1. 程式人生 > >一個windows上安裝兩個mysql伺服器,並做主從同步

一個windows上安裝兩個mysql伺服器,並做主從同步

一、配置兩個mysql伺服器

1.首先安裝mysql,一筆帶過。

2.複製安裝後的目錄d:/mysql/MySQL Server 5.5 (我安裝的是5.5)到d:/mysql/mysql2

修改mysql2目錄下的my.ini 檔案

[client]

port=3307(安裝資料庫的埠是3306 ,此處修改為3307)

 

[mysqld]

 

# The TCP/IP Port the MySQL Server will listen on

port=3307(安裝資料庫的埠是3306 ,此處修改為3307)

 

 

#Path to installation directory. All paths are usually resolved relative to this.

basedir="D:/mysql/MySQL Server 5.5/"

 

#Path to the database root

datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"

修改後

#Path to installation directory. All paths are usually resolved relative to this.

basedir="D:/mysql/mysql_2/" (複製後的目錄)

 

#Path to the database root

datadir="C:/ProgramData/MySQL/mysql_2/Data/"

(此處注意,在C:/ProgramData/MySQL下新建mysql_2 並把MySQL Server 5.5/下的Data檔案全貼上過來)

3.安裝服務

命令符進入:D:\mysql\mysql_2\bin>

mysqld --install mysql2 --defaults-file='d:\mysql\mysql_2\my.ini'

執行成功,則會顯示Service Successfully installed.

這時候開啟工作管理員--服務,可以看到一個mysql2服務。

4. 開啟服務

命令提示符:  D:\mysql\mysql_2\bin>net start mysql2 或者在服務中手動開啟

如果報錯1067 可以把C:/ProgramData/MySQL/mysql_2/Data/ 中ib_logfile0、ib_logfile1和ibdata1 刪掉,重啟。

5. 停止服務

命令提示符:  D:\mysql\mysql_2\bin>net stop mysql2 或者在服務中手動停止;

 

二、設定主從配置:

  • 主伺服器(master): IP為127.0.0.1,埠為3306
  • 從伺服器(slave): IP為127.0.0.1,埠為3307

將兩個服務都停掉(這邊我將主庫叫做master , 從庫叫做slave):

主伺服器配置:

修改主伺服器的資料庫配置檔案(D:/mysql/MySQL Server 5.5/my.ini),

在 [mysqld] 標籤的最下面,新增如下程式碼:

 

#需要備份的資料庫  

binlog-do-db=test

#不需要備份的資料庫  

binlog-ignore-db=mysql  

#開啟二進位制日誌

log-bin=mysql-bin

 

#伺服器id

server-id=1

 

儲存退出,重啟MySQL主伺服器。

binlog-do-db用於指定需要同步的資料庫,binlog-ignore-db指定不需要同步的資料庫,如果這兩個引數都不設定,則從伺服器會複製主伺服器的所有資料庫。

 

一般不用root賬號作同步賬號,為此,我們需要在主伺服器上建立一個新的使用者(如 user01,密碼為123456)。

這裡我們用命令列的方式建立,方法如下:

開啟cmd,切換至  D:\mysql\mysql_2\bin,用 root 賬戶連線MySQL主伺服器: 

mysql -uroot -p -P3306

建立新使用者: 

create user 'user01'@'127.0.0.1' identified by '123456';

(@後面的ip地址為允許連線的客戶端的ip地址。)

 

然後,給新使用者配置主從複製的許可權:

grant replication slave on *.* to 'user01'@'127.0.0.1' identified by '123456';

mysql> flush privileges;//重新整理許可權

(@後面的ip地址為允許連線的客戶端的ip地址,如果改為 '%',就表示客戶端沒有ip地址的限制)

 

 

檢視主伺服器的 master 狀態:

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000001 |      498 | test         | mysql            |                   |

+------------------+----------+--------------+------------------+-------------------+

 

從伺服器配置:

修改從伺服器的資料庫配置檔案(d:\mysql\mysql_2\my.ini),在 [mysqld] 標籤的最下面,新增如下程式碼:

 

#埠

port = 3307

 

#伺服器id

server_id = 2

 

#開啟二進位制日誌(從伺服器不是必須要開啟二進位制日誌)

log-bin=mysql-bin 

 

儲存退出,重啟MySQL服務。

 

連線MySQL從伺服器:

mysql -uroot -p -P3307

 

配置複製的引數:

change master to master_host='127.0.0.1',master_user='user01',master_password='123456',master_port=3306,master_log_file='mysql-bin.000001',master_log_pos=498;

 

引數詳解:

master_host: 主伺服器的IP

master_user: 主伺服器上新建立的使用者名稱

master_password: 使用者的密碼

master_port: 主伺服器的埠,如果未曾修改,預設即可。

 

master_log_file: 主伺服器二進位制日誌檔案的名稱,填寫檢視主伺服器的master狀態時顯示的File的值

 

master_log_pos: 日誌的位置,填寫檢視主伺服器的master狀態時顯示的Position的值

 

 

啟動從伺服器的slave複製功能:

start slave;

 

檢視從伺服器的slave狀態:

mysql> show slave status \G

*************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 127.0.0.1

                  Master_User: user01

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: mysql-bin.000009

          Read_Master_Log_Pos: 120

               Relay_Log_File: hp-PC-relay-bin.000004

                Relay_Log_Pos: 283

        Relay_Master_Log_File: mysql-bin.000009

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

 

如果 Slave_IO_Running 和 Slave_SQL_Running 的值都為 Yes,則說明主從複製的所有配置已成功,即從伺服器已經可以自動與主伺服器的資料庫資料實現同步了。

 

此後,只要主伺服器的資料有更新(比如:在 test資料庫中新建了一張表或者表中的資料發生了變化),從伺服器都會自動與主伺服器保持一致。但如果有人刻意改變了從伺服器的資料,主伺服器中的資料並不會同步更新,除非我們把這兩個MySQL伺服器設定為互為主從。