首頁 > 軟體

MYSQL 增加從庫方式介紹

2022-08-25 10:00:05

一、MySQL主從複製

常見的主從架構:

  • 一主一從:一個 Master,一個 Slave
  • 一主多從:一個 Master,多個 Slave

具體,參考下圖:

實現細節

MySQL 在主從同步時,其底層實現細節又是什麼?為此後分析主從延遲原因以及優化方案,做好理論準備。

總結來說,MySQL 的主從複製:非同步單執行緒。

  • Master上 1 個IO執行緒,負責向Slave傳輸 binary logbinlog
  • Slave上 2 個執行緒:IO 執行緒執行SQL的執行緒,其中:
    • IO執行緒:將獲取的紀錄檔資訊,追加到relay log上;
    • 執行SQL的執行緒:檢測到relay log中內容有更新,則在Slave上執行sql;

特別說明:MySQL 5.6.3 開始支援「多執行緒主從複製」,一個資料庫一個執行緒多個資料庫多個執行緒

完整的 Master & Slave 之間主從複製過程:

二、增加一個slave

需求:目前我的master上有一個資料庫ucenter,需要為其增加一臺slave(目前有一臺slave)

分析:

  • 我這裡有一個前一天的4:00的資料庫備份。
  • 有一臺已存在的ucenter的slave
  • 重點是尋找binlog的時間點

操作:

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 增加從庫方式介紹的文章就介紹到這了,更多相關MYSQL增加從庫內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com