主從復(fù)制(Replication)
1.介紹?
兩臺(tái)或以上數(shù)據(jù)庫(kù)實(shí)例,通過(guò)二進(jìn)制日志溉知,實(shí)現(xiàn)數(shù)據(jù)的“同步”關(guān)系陨瘩。
2.主從復(fù)制前提(搭建過(guò)程)
# 時(shí)間同步
#至少2臺(tái)以上實(shí)例,要有角色劃分
#主庫(kù)開(kāi)binlog
#網(wǎng)絡(luò)通暢
#開(kāi)啟專(zhuān)用復(fù)制線(xiàn)程
#專(zhuān)門(mén)開(kāi)啟一個(gè)復(fù)制用戶(hù)
#"補(bǔ)課"
#確認(rèn)復(fù)制起點(diǎn)
#總結(jié)
1.需要兩臺(tái)以上數(shù)據(jù)庫(kù)實(shí)例级乍,網(wǎng)絡(luò)通暢舌劳,時(shí)間同步,server_id不同玫荣,區(qū)分不同角色(主庫(kù)甚淡,從庫(kù))
2.主庫(kù)開(kāi)啟binlog,建立專(zhuān)用復(fù)制用戶(hù)捅厂。
3.從庫(kù)需要提前補(bǔ)課
4.從庫(kù):主庫(kù)的鏈接信息贯卦,確認(rèn)復(fù)制起點(diǎn)
5.從庫(kù):? ?需要專(zhuān)用的復(fù)制線(xiàn)程
3.搭建
實(shí)例準(zhǔn)備
[root@later03 ~]# systemctl start mysqld3308
[root@later03 ~]# systemctl start mysqld3308
[root@later03 ~]# systemctl start mysqld3309
檢查server_id?
[root@later03 tmp]# mysql -S /tmp/mysql3307.sock -e "select @@server_id";
+-------------+
| @@server_id |
+-------------+
|? ? ? ? ? 7 |
+-------------+
[root@later03 tmp]# mysql -S /tmp/mysql3308.sock -e "select @@server_id";
+-------------+
| @@server_id |
+-------------+
|? ? ? ? ? 8 |
+-------------+
[root@later03 tmp]# mysql -S /tmp/mysql3309.sock -e "select @@server_id";
+-------------+
| @@server_id |
+-------------+
|? ? ? ? ? 9 |
+-------------+
3.3 檢查主庫(kù)的binlog?
[root@later03 tmp]# mysql -S /tmp/mysql3307.sock -e "select @@log_bin";
+-----------+
| @@log_bin |
+-----------+
|? ? ? ? 1 |
+-----------+
3.4建立復(fù)制用戶(hù)
mysql -S /tmp/mysql3307.sock -e "grant replication slave on *.*? to repl@'localhost' identified by '123'";
?grant replication slave on *.* to 'repl'@''
3.5 主庫(kù)備份恢復(fù)到從庫(kù)
主庫(kù)備份:
mysqldump -S /tmp/mysql3307.sock -A --master-data=2 --single-transaction > /tmp/all.sql?
從庫(kù)恢復(fù):mysql? -S /tmp/mysql3308.sock? ?< /tmp/all.sql??
從庫(kù)恢復(fù): mysql? -S /tmp/mysql3309.sock? ?< /tmp/all.sql
3.6告知從庫(kù)復(fù)制信息
查看binlog復(fù)制起點(diǎn)
[root@later03 ~]# grep "\-- CHANGE MASTER " /tmp/all.sql?
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=849;
3308,3309? 執(zhí)行:
CHANGE MASTER TO
? MASTER_HOST='39.101.199.159',
? MASTER_USER='repl',
? MASTER_PASSWORD='luobiao123',
? MASTER_PORT=3306,
? MASTER_LOG_FILE='mysql-bin.000005',
? MASTER_LOG_POS=194,
? MASTER_CONNECT_RETRY=10;
3.7 從庫(kù)中開(kāi)啟專(zhuān)用復(fù)制線(xiàn)程
mysql> start slave;
3.8 驗(yàn)證主從狀態(tài)
show slave status ;
?Slave_IO_Running: Yes
?Slave_SQL_Running: Yes
3.9 重置從庫(kù),如果主庫(kù)重啟恒傻,或者發(fā)生變化脸侥,可以重置主從關(guān)系,重新設(shè)置
1.停止從庫(kù)? ?stop slave;
2.重置 reset slave all;?
主從復(fù)制原理?
4.1 主從中涉及到的資源
文件:
主庫(kù):binlog文件?
從庫(kù):
relay-log文件:存儲(chǔ)接受的binlog
later03-relay-bin.000001
手工定義方法: vi /etc/my.cnf?
relay_log_basename=/relay_log/later03-relay-bin?
master.info :連接主庫(kù)的信息盈厘,已經(jīng)接受到的binlog位置信息睁枕。
默認(rèn)存儲(chǔ)在從庫(kù)的數(shù)據(jù)路徑下。
手工定義:
master_info_repository=FILE/TABLE
relay-log.info?
作用:
記錄從庫(kù)回放到的relay-log的位置點(diǎn)沸手。
默認(rèn)在從庫(kù)的數(shù)據(jù)路徑下外遇。
手工定義:
relay_log_info_repository=FILE/TABLE
4.1.2線(xiàn)程:
(1)主庫(kù):
Binlog_dump_Thread
作用:用來(lái)接b收從庫(kù)請(qǐng)求,并且投遞binlog給從庫(kù)契吉。
show processlist;
(2)從庫(kù):
IO線(xiàn)程跳仿,請(qǐng)求日志,接收日志
SQL線(xiàn)程捐晶,回放日志:
4.2 主從復(fù)制原理
畫(huà)圖說(shuō)明:
文字說(shuō)明:
1.S: change master to IP,Port,User,Password,binlog位置點(diǎn)信息
菲语,執(zhí)行start? slave 啟動(dòng)IO和SQL線(xiàn)程。??
2.S:連上主庫(kù)?
3.M:分配Dump_T惑灵,專(zhuān)門(mén)和S_IO通信山上。
show processlist;
4.S:IO線(xiàn)程,根據(jù)master.info記錄的日志點(diǎn)信息英支,請(qǐng)求新日志
5.M:DUMP_T 接收請(qǐng)求佩憾,截取日志,返回給S_IO
6.S: IO線(xiàn)程接收到binlog,日志放在TCP/IP妄帘,此時(shí)網(wǎng)絡(luò)層面返回
ACK給主庫(kù)楞黄,主庫(kù)工作完成。
7:S:IO將binlog最終寫(xiě)入到relay-log ,并跟新master.info ,IO線(xiàn)程工作結(jié)束.
8:S:SQL線(xiàn)程讀R.info,獲取上次執(zhí)行到的位置點(diǎn)
9.S:SQL線(xiàn)程向后執(zhí)行新的relay-log,再次跟新R.info?
小細(xì)節(jié):
1.S:relay-log 參數(shù):relay_log_purge=ON 定期自動(dòng)刪除應(yīng)用過(guò)的relay-log?
2.M Dump線(xiàn)程實(shí)時(shí)監(jiān)控主庫(kù)的binlog變化抡驼,如果有新變化發(fā)信號(hào)給從庫(kù)鬼廓。
5.主從監(jiān)控
5.1主庫(kù)監(jiān)控
show processlist; 查看主庫(kù)dump進(jìn)程
show slave hosts;查看從庫(kù)的情況
5.2從庫(kù)監(jiān)控
show slave status;
主從相關(guān)信息,來(lái)自于Master.info?
Master_Host: 39.101.199.159
?Master_User: repl
Master_Port: 3306
Connect_Retry: 10
?Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 1461
從庫(kù)的relay-log的執(zhí)行情況致盟,來(lái)自于Relay.info? ?一般用作判斷主從延時(shí)
Relay_Log_File: later03-relay-bin.000002
Relay_Log_Pos: 932
Relay_Master_Log_File: mysql-bin.000002
Exec_Master_Log_Pos: 1461
Seconds_Behind_Master: 0
從庫(kù)線(xiàn)程狀態(tài)桑阶,具體報(bào)錯(cuò)信息
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Last_IO_Errno: 0
?Last_IO_Error:?
Last_SQL_Errno: 0
Last_SQL_Error:?
過(guò)濾復(fù)制相關(guān)信息
Replicate_Do_DB:?
Replicate_Ignore_DB:?
Replicate_Do_Table:?
Replicate_Ignore_Table:?
Replicate_Wild_Do_Table:?
Replicate_Wild_Ignore_Table:?
延時(shí)從庫(kù)的配置信息
SQL_Delay: 0
SQL_Remaining_Delay: NULL
GTID相關(guān)復(fù)制信息
?Retrieved_Gtid_Set: 2ade123b-73aa-11ea-b05d-00163e082e57:4-6
?Executed_Gtid_Set: 205e7212-736e-11ea-bfde-00163e0477d5:1-123