mysql主從同步搭建和故障排除
主:被客戶端訪問的數據庫服務器就是主庫服務器master
從:連接主庫服務器,自動同步主庫的所有數據到本機slave
1、什麽是mysql主從同步?
當master(主)庫的數據發生變化的時候,變化會實時的同步到slave(從)庫。
2、主從同步有什麽好處?
水平擴展數據庫的負載能力。
容錯,高可用。Failover(失敗切換)/High Availability
數據備份。
3.主從同步的具體內容和目的
不管是delete、update、insert,還是創建函數、存儲過程,所有的操作都在master上。當master有操作的時候,slave會快速的接收到這些操作,從而做同步。
4.基本結構:
單向復制:主 --> 從
擴展應用
鏈式復制:主 --> 從 --> 從
雙向復制:主 <--> 從
放射式復制:從 <-- 主 --> 從
|
從
5.實現原理
在master機器上,主從同步事件會被寫到特殊的log文件中(binary-log);在slave機器上,slave讀取主從同步事件,並根據讀取的事件變化,在slave庫上做相應的更改,就實現了主從同步!
6.主從同步事件有3種模式:
statement、row、mixed
statement:會將對數據庫操作的sql語句寫入到binlog中。
row:會將每一條數據的變化寫入到binlog中。
mixed:statement與row的混合。Mysql決定什麽時候寫statement格式的,什麽時候寫row格式的binlog。
實現:
7.目的
當master上的數據發生改變的時候,該事件(insert、update、delete)變化會按照順序寫入到binlog中。
Mysql主從同步的搭建步驟:
主要分為【主庫配置】和【從庫配置】
例機IP及分配:master 192.168.4.52
slave 192.168.4.53
主庫的配置步驟:
1.啟用數據庫binlog日誌
# vim /etc/my.cnf
[mysqld]
server_id=52 //數據庫的 id【主庫與從庫不可相同】
log-bin=master //啟用binlog日誌並設置路徑
binlog-format="mixed" //指定binlog使用模式
2.授權用戶
mysql> grant replication slave on *.*
-> to
-> tom@"192.168.4.53"
-> identified by "123456";
更新數據庫權限
mysql>flush privileges;
3.查看master的狀態
# show master status;
從庫配置步驟(slave):
1.查看是否可以登陸數據庫
mysql -h192.168.4.52 -u tom -p123456
show grants; //查看權限
2.指定數據庫ID號(server_id)
vim /etc/my.cnf
[mysql]
server_id=53
systemctl restar mysqld
3.管理員指定數據庫服務器的信息
mysql> change master to
-> master_host="192.168.4.52", //指定主庫的ip地址
-> master_user="tom", //指定授權的用戶名
-> master_password="123456",
-> master_log_file="master.000001", //指定主日誌時可去主庫查看填寫
-> master_log_pos=447;
4.啟用slave進程
mysql> start slave; //開啟slave進程
mysql> show slave status\G; //查看slave進程
Slave_IO_Running: yes //查看線程是否運行
Slave_SQL_Running: Yes
I/O線程。該線程連接到master機器,master機器上的binlog dump線程會將binlog的內容發送給該I/O線程。該I/O線程接收到binlog內容後,再將內容寫入到本地的relay log。
SQL線程。該線程讀取I/O線程寫入的relay log。並且根據relay log的內容對slave數據庫做相應的操作。
註:Slave_IO_Running及Slave_SQL_Running進程必須正常運行,即YES狀態,否則說明同步失敗。可用這兩項判斷主從同步是否成功
5.測試
mysql>create database ceshi; //master主庫創建測試庫
mysql>show databases; //slave從庫上查看是否自動更新
常見問題排查:
若進程啟用時,線程未yes狀態,可查看下方報錯信息進行排錯
常見原因:
一:數據庫UUID相同導致沖突
解決方法:vim /var/lib/mysql/auto.cnf 修改UUID使其不相同
重啟數據庫
重啟slave進程
【若還無法同步則需重新指定數據庫信息並重啟slave進程即可】
二:數據庫ID沖突,重新設置ID並重啟服務即可
三: 查看命令是否寫錯
四:刪除binlog日誌的影響
【如果有一個將要進行同步的slave從屬服務器,該服務器需讀取您正在刪除的日誌之一,則該同步不會執行,並產生錯誤;如果slave從屬服務器是關閉的(或master-slave主從關系關閉),若清理了將要讀取的日誌之一,則slave從屬服務器啟動後不能同步;當從屬服務器正在復制時,刪除binlog日誌無影響,切無需停止主從服務】
mysql主從同步搭建和故障排除