首先,因為Mysql的同步機制完全是基於在主資料庫上執行的增量SQL要被送到副資料庫上,並且被成功執行。
這就勢必要求:開啟同步機制前,主副數據庫中數據是相同的;但是在運行中仍然可能遇到不一致的產生,
這會導致通信無法正常繼續下去。因此一旦同步出現問題,首先應該確認是否某些SQL的語法在副資料庫無法執行
具體的主從mysql設定方式如下
================================================Master設定
首先在my.cnf中加入
server-id = 1
log-bin=mysql-bin
binlog_do_db = 資料庫名稱
重新啟動mysql後檢查是否開始運作
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 335 | dbname | |
+------------------+----------+--------------+------------------+
================================================Slave設定
一樣找到my.cnf中加入
server-id = 2
master-host = master ip
master-user = username
master-password = passwd
master-port = port
master-connect-retry = 多久同步一次
replicate-do-db = 資料庫名稱
重啟mysql後檢查
mysql> show slave status
如果再last error的欄位有錯誤,一般是資料不同步導致主資料庫的某些語法無法在副資料庫執行。
因此如果很不幸的因為某些原因同步失敗了,解決的方式一種就是重新mysqldump主資料庫的資料倒到副資料庫在重啟同步機制
另一種則是忽略此錯誤(最好用show slave status檢查無法執行的SQL語法,以及是否可以有稍微的主從不相同)
mysql>slave stop
mysql>set global sql_slave_skip_counter =1
mysql>start slave
若是狀態一直停留在
Waiting to reconnect after a failed master event read
表示這個使用者並沒有足夠的權限,解決方式在Master新增該使用者的權限即可
GRANT REPLICATION SLAVE ON dbname.* TO 'user'@'slavesDnsHostname' IDENTIFIED BY 'passwd';
#===========20160714後記=====================
今天想要修改設定檔的時候,發現修改後不管怎麼restart
show slave status \G;的結果都不變,(mysql 5.5版以後很像取消這種設定方式)
最後找到的解法是用client直接改,修改設定檔似乎沒有用,語法如下
CHANGE MASTER TO MASTER_HOST='host ip', MASTER_PORT=3306, MASTER_USER='同步的帳號', MASTER_PASSWORD='密碼';
那如果碰到binlog出問題導致slave start一直出錯,可以嘗試
slave stop;
reset slave;
slave start;
這就勢必要求:開啟同步機制前,主副數據庫中數據是相同的;但是在運行中仍然可能遇到不一致的產生,
這會導致通信無法正常繼續下去。因此一旦同步出現問題,首先應該確認是否某些SQL的語法在副資料庫無法執行
具體的主從mysql設定方式如下
================================================Master設定
首先在my.cnf中加入
server-id = 1
log-bin=mysql-bin
binlog_do_db = 資料庫名稱
重新啟動mysql後檢查是否開始運作
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 335 | dbname | |
+------------------+----------+--------------+------------------+
================================================Slave設定
一樣找到my.cnf中加入
server-id = 2
master-host = master ip
master-user = username
master-password = passwd
master-port = port
master-connect-retry = 多久同步一次
replicate-do-db = 資料庫名稱
重啟mysql後檢查
mysql> show slave status
如果再last error的欄位有錯誤,一般是資料不同步導致主資料庫的某些語法無法在副資料庫執行。
因此如果很不幸的因為某些原因同步失敗了,解決的方式一種就是重新mysqldump主資料庫的資料倒到副資料庫在重啟同步機制
另一種則是忽略此錯誤(最好用show slave status檢查無法執行的SQL語法,以及是否可以有稍微的主從不相同)
mysql>slave stop
mysql>set global sql_slave_skip_counter =1
mysql>start slave
若是狀態一直停留在
Waiting to reconnect after a failed master event read
表示這個使用者並沒有足夠的權限,解決方式在Master新增該使用者的權限即可
GRANT REPLICATION SLAVE ON dbname.* TO 'user'@'slavesDnsHostname' IDENTIFIED BY 'passwd';
#===========20160714後記=====================
今天想要修改設定檔的時候,發現修改後不管怎麼restart
show slave status \G;的結果都不變,(mysql 5.5版以後很像取消這種設定方式)
最後找到的解法是用client直接改,修改設定檔似乎沒有用,語法如下
CHANGE MASTER TO MASTER_HOST='host ip', MASTER_PORT=3306, MASTER_USER='同步的帳號', MASTER_PASSWORD='密碼';
那如果碰到binlog出問題導致slave start一直出錯,可以嘗試
slave stop;
reset slave;
slave start;