#常見的主從架構:
一主一從:一個Master,一個Slave
一主多從:一個Master,多個Slave
具體,參考下圖:
MySQL 在主從同步時,其底層實作細節又是什麼?為此後分析主從延遲原因以及最佳化方案,做好理論準備。
總結來說,MySQL 的主從複製:非同步單一執行緒。
Master
上1 個IO執行緒
,負責傳送 binary log
binlog
#bin #)Slave上2 個執行緒:
:將取得的日誌訊息,追加到relay log上;
多個線程可
特別說明
:MySQL 5.6.3 開始支持「
多執行緒的
主從複製」,
一個資料庫#一個執行緒
,
多個資料庫
。
完整的Master & Slave 之間主從複製過程:
二、增加一個slave
需求:目前我的master上有一個資料庫ucenter,需要增加一台slave(目前有一台slave)
操作:
1、在slave機器上配置slave信息,修改mysql.cfg配置並重啟slave資料庫
在[mysqld]中新增
replicate-do-db = ucenter #同步的数据库名字 slave-skip-errors=all #同步是忽略错误 server-id = 1112 #和master与其他slave保持不通
2、尋找資料庫前一天的備份,將其copy到新增的slave機器上,並導引庫
[root@ucenter_slave /data]# mysql ucenter < ucenter_20171102.sql[root@ucenter_slave /data]# du -sh ucenter_20171102.sql 24G ucenter_20171102.sql
3、定位binlog時間戳記(重點)
在master上查找binlog[root@Ucenter /data/mysqldata]# ll -t *bin* -rw-rw---- 1 mysql mysql 30709744 Nov 2 21:32 mysql-bin.000268 -rw-rw---- 1 mysql mysql 171 Nov 2 19:41 mysql-bin.index -rw-rw---- 1 mysql mysql 1021101094 Nov 2 19:41 mysql-bin.000267 -rw-rw---- 1 mysql mysql 1073742415 Oct 30 06:07 mysql-bin.000266 -rw-rw---- 1 mysql mysql 1073742062 Oct 26 12:03 mysql-bin.000265 -rw-rw---- 1 mysql mysql 1073742636 Oct 22 19:21 mysql-bin.000264 -rw-rw---- 1 mysql mysql 1073741961 Oct 18 22:49 mysql-bin.000263 -rw-rw---- 1 mysql mysql 1073742141 Oct 15 12:47 mysql-bin.000262 -rw-rw---- 1 mysql mysql 1073742284 Oct 11 10:18 mysql-bin.000261 -rw-rw---- 1 mysql mysql 1073742184 Oct 7 09:49 mysql-bin.000260我的備份時間是2號4點開始,所以應該在mysql-bin.000267裡找2編號4點前的pos,開始定位
[root@Ucenter /data/mysqldata]# /usr/local/mysql/bin/mysqlbinlog mysql-bin.000267 |grep '3:59:' |grep -v '13:59:' #171102 3:59:58 server id 21323 end_log_pos 824385760 Query thread_id=3023086382 exec_time=0 error_code=0 #171102 3:59:58 server id 21323 end_log_pos 824386335 Query thread_id=3023086386 exec_time=0 error_code=0 #171102 3:59:58 server id 21323 end_log_pos 824386363 Intvar #171102 3:59:58 server id 21323 end_log_pos 824386698 Query thread_id=3023086386 exec_time=0 error_code=0 #171102 3:59:58 server id 21323 end_log_pos 824387706 Query thread_id=3023086388 exec_time=0 error_code=0 #171102 3:59:58 server id 21323 end_log_pos 824387734 Intvar #171102 3:59:58 server id 21323 end_log_pos 824388209 Query thread_id=3023086388 exec_time=0 error_code=0 #171102 3:59:58 server id 21323 end_log_pos 824388534 Query thread_id=3023086398 exec_time=0 error_code=0所以定位到最後 end_log_pos 824388534
4、在另一台slave上查看master.info
[root@LeduPass02/data/mysqldata]# cat master.info 15 mysql-bin.000268 11367810 192.168.100.70 omsync om@123 3306 60 0 0 0
5、在slave 配置slave,進行同步
在Slave上配置相關設置,以便告訴Slave如何去連接Master,這包括主機地址,登陸憑證等等
[root@ucenter_slave /data]# mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 6 Server version: 5.1.51-Community-Server-log Source Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. This software comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to modify and redistribute it under the GPL v2 license Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql (none)>change master to master_host='192.168.100.70',master_port=3306,master_user='omsync',master_password='om@123',master_log_file='mysql-bin.000267',master_log_pos=824388534;
開啟slave
mysql (none)>start slave;
檢視slave狀態:
#########以上是MYSQL增加從函式庫的方法是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!