1. 程式人生 > >mysql5.6資料庫同步,單雙多主多從配置。

mysql5.6資料庫同步,單雙多主多從配置。

windows下MySQL5.6實現主從資料庫同步資料

 mysql5.6資料庫同步,單向雙向同步問題

一.單向同步

主資料庫(mysql5.6)192.168.1.104

從資料庫(mysql5.6)192.168.1.105

略去建立庫的步驟,這裡認為你同步的資料庫已經存在,而且主從資料庫的庫和表結構均相同

1.在主資料庫上建立使用者

insertinto MySQL.user(host,user,password)

values('localhost','admin',password('123456'));

flushprivileges;

2.主資料庫提供使用者,賦值訪問許可權

僅僅192.168.1.105這個機器使用admin/123456同步

grantreplication slave,reload,super on *.* to 'admin'@'192.168.1.105' identified by'123456' with grant option;

所有人都只用admin/123456同步

grantreplication slave,reload,super on *.* to 'admin'@'%' identified by '123456'with grant option;

3.修改104主資料庫的my.ini

在[mysqld]節點下配置一下程式碼

#設定伺服器id,為1表示主伺服器,注意:如果原來的配置檔案中已經有這一行,就不用再添加了。

server_id=1

log_bin=mysql-bin  #啟動MySQ二進位制日誌系統,注意:如果原來的配置檔案中已經有這一行,就不用再添加了。

binlog_do_db=test  #需要同步的資料庫名,如果有多個數據庫,可重複此引數,每個資料庫一行

binlog_ignore_db=mysql  #不同步mysql系統資料庫

binlog_ignore_db=information_schema  #不同步information_schema系統資料庫

然後儲存my.ini

配置檔案

管理員開啟cmd

先停止mysql服務,net stop mysql

然後重啟mysql服務,net start mysql

服務啟動成功後,登陸mysql

mysql -u root -p123456  注意,-p123456之間不用空格

在檢視主資料庫的狀態,show master status\G;

+------------------+----------+--------------+------------------+
|File                        |Position  | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+
| mysql-bin.000001 |    120      | test            |mysql                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

注意:這裡記住File的值:mysql-bin.000001Position的值:120,後面會用到。

4.修改105從資料庫的my.ini檔案

server_id=2

log_bin=mysql-bin

replicate_do_db=test

replicate_ignore_db=mysql

replicate_ignore_db=information_schema

儲存my.ini

然後停止mysql服務,net stop mysql

在啟動mysql服務,net start mysql

然後進入mysql -u root -p123456

先停止從資料庫同步,stop slave,

再輸入:change master to master_host='192.168.1.104',master_user='admin',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=120;#執行同步語句

開啟同步,start slave

注:經測試,stop slave ,start slave 和 slave start,slave stop一樣都可以,

最後檢視一下狀態:show slave status;

mysql>show slave status\G;

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

               Slave_IO_State: Waiting formaster to send event

                  Master_Host: 192.168.1.104

                  Master_User: test01

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: mysql-bin.000001

          Read_Master_Log_Pos: 120

               Relay_Log_File: mysql-bin.000001

                Relay_Log_Pos: 283

        Relay_Master_Log_File: mysql-bin.000001

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

              Replicate_Do_DB:

          Replicate_Ignore_DB:mysql,information_schema

           Replicate_Do_Table:

       Replicate_Ignore_Table:

      Replicate_Wild_Do_Table:

  Replicate_Wild_Ignore_Table:

                   Last_Errno: 0

                   Last_Error:

                 Skip_Counter: 0

          Exec_Master_Log_Pos: 120

              Relay_Log_Space: 465

              Until_Condition: None

               Until_Log_File:

                Until_Log_Pos: 0

           Master_SSL_Allowed: No

           Master_SSL_CA_File:

           Master_SSL_CA_Path:

              Master_SSL_Cert:

            Master_SSL_Cipher:

               Master_SSL_Key:

        Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert:No

                Last_IO_Errno: 0

                Last_IO_Error:

               Last_SQL_Errno: 0

               Last_SQL_Error:

  Replicate_Ignore_Server_Ids:

             Master_Server_Id: 1

                  Master_UUID:f44dc946-f462-11e4-81cc-00ffb613a054

             Master_Info_File:D:\GreenProgramFiles\MySQL Server 5.6\data\master

.info

                    SQL_Delay: 0

          SQL_Remaining_Delay: NULL

      Slave_SQL_Running_State: Slave has readall relay log; waiting for the sla

veI/O thread to update it

           Master_Retry_Count: 86400

                  Master_Bind:

      Last_IO_Error_Timestamp:

     Last_SQL_Error_Timestamp:

               Master_SSL_Crl:

           Master_SSL_Crlpath:

           Retrieved_Gtid_Set:

            Executed_Gtid_Set:

                Auto_Position: 0

1row in set (0.00 sec)

注:Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

這兩個都是yes的時候同步才會成功發生,否則不能實現同步

5.最後在主資料庫上執行插入,更改,刪除語句,在從資料庫上檢視,資料保持一致了,

二.雙向同步(雙向同步又稱雙主同步相互指定master。可在此matser下繼續配置slave從庫。達到多主多從資料庫)

在上述配置保持不變的情況下,各自增加主從配置項

104:主資料庫已經配置完畢,需要配置從資料庫

log_bin=mysql-bin

replicate_do_db=test

replicate_ignore_db=mysql

replicate_ignore_db=information_schema

重啟mysql,登陸後輸入:

stopslave;

changemaster to master_host='192.168.1.105',master_user='admin',master_password='123456',master_log_file='mysql-bin.0000001',master_log_pos=120;

# master_log_file='mysql-bin.0000001',master_log_pos=120;

其中這兩個引數是根據master主資料庫的二進位制日誌檔案和為止固定的

startslave;

showslave status\G;

105:從資料庫已經配置完畢,需要配置主資料庫

log_bin=mysql-bin

binlog_do_db=test

binlog_ignore_db=mysql

binlog_ignore_db=information_schema

重啟mysql,登陸輸入:

flushtables with read lock;

showmaster status\G;得到主資料庫的資訊

根據這這個命令的結果在跟新104主從資料庫的同步日誌和位置

mysql>changemaster to master_log_file='mysql-bin.00002',master_log_pos=120;

同時要為使用者開放許可權

僅僅192.168.1.105這個機器使用admin/123456同步

grantreplication slave,reload,super on *.* to 'admin'@'192.168.1.105' identified by'123456' with grant option;

所有人都只用admin/123456同步

grantreplication slave,reload,super on *.* to 'admin'@'%' identified by '123456'with grant option;

GRANTREPLICATION SLAVE ON *.* TO 'admin'@'%' IDENTIFIED BY '123456'; 

GRANTFILE,SELECT,REPLICATION SLAVE ON *.* TO 'admin'@'%' IDENTIFIED BY '123456';

最後配置完畢的結果

104:主從資料庫

#主資料庫配置項

server_id=1

#auto_increment_increment=2

#auto_increment_offset=1

log_bin=mysql-bin

binlog_do_db=test

binlog_ignore_db=mysql

binlog_ignore_db=information_schema

#從資料庫配置項

replicate_do_db=test #同步的資料庫

replicate_ignore_db=mysql

replicate_ignore_db=information_schema

105:主從資料庫

#從資料庫配置項

server_id=2

#auto_increment_increment=2

#auto_increment_offset=1

log_bin=mysql-bin

replicate_do_db=test #同步的資料庫

replicate_ignore_db=mysql

replicate_ignore_db=information_schema

#主資料庫配置項

binlog_do_db=test

binlog_ignore_db=mysql

binlog_ignore_db=information_schema

遇到的問題總結:

1.經測試,主mysql5.6,從mysql5.5,不能實現同步,

Slave_IO_Running:No

Slave_SQL_Running:Yes

錯誤提示:Last_IO_Error: Got fatal error 1236 from master when  reading data from binary log:

問題:一般版本不一致

2.

Slave_IO_Running:Yes

Slave_SQL_Running:No

3.Last_IO_Error: Fatal error: The slave I/O thread stops because master and slavehave equal MySQL server UUIDs; these UUIDs must be different for

 replication to work.

mysql>showvariables like ‘server_id';

+—————+——-+
| Variable_name | Value |
+—————+——-+
| server_id | 3 |
+—————+——-+

主從並不一樣,排除該問題。

找到原因在於,拷貝整個data目錄,把auto.cnf檔案也拷貝過來了,裡面記錄了資料庫的uuid,每個庫的uuid應該是不一樣的。

[auto]
server-uuid=6dcee5be-8cdb-11e2-9408-90e2ba2e2ea6

解決辦法,按照這個16進位制格式,隨便改下,重啟mysql即可。

4. 111010 17:35:49 [ERROR] Error reading packet from server: Clientrequested master

 to start replication from impossible position( server_errno=1236)

11101017:35:49 [ERROR] Slave I/O: Got fatal error 1236 from master when reading data

frombinary log: 'Client requested master to start replication from impossible

position',Error_code: 1236

11101017:35:49 [Note] Slave I/O thread exiting, read up to log 'mysql-bin.000288',

position627806304

解決方法:

mysql>stop slave;

mysql>change master to master_log_file='mysql-bin.000288',master_log_pos=627625751;

mysql>start slave;

5.在一臺主機上配置一臺從機,啟動的時候報ERROR 1872 (HY000): Slave failed to initialize relay log info structurefrom the

 repository(雙向配置後,啟動從機報錯)

解決方法:配置relay_log=relay-,

然後再重新停止net stop mysql,

啟動net start mysql,

登陸mysql -u root -p123456

執行reset slave

然後啟動從機start slave