1. 程式人生 > >mysql主從同步搭建和故障排除

mysql主從同步搭建和故障排除

mysql主從同步搭建 mysql主從同步線程無法開啟 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主從同步搭建和故障排除