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 注意,-p和123456之間不用空格
在檢視主資料庫的狀態,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.000001和Position的值: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