MySQL運維實戰(7)建立複製

發表於2024-02-27

引言

在構建資料庫複製系統時,正確配置主庫和備庫是確保資料同步順利進行的關鍵步驟。以下是建立複製的基本步驟,主要包括主庫開啟binlog的關鍵引數設定,建立主庫複製賬號以滿足基本許可權需求,備庫引數配置和初始化的步驟。

1、主庫開啟binlog

主庫需要配置的關鍵引數
server_id:主備庫需要設定為不同。
log_bin:binlog檔案的字首,可以指定絕對路徑,也可以只指定檔名。若不指定路徑,binlog預設存放在datadir指定的路徑下。
binlog_format:可設定為STATEMENT、MIXED、ROW這幾種模式。一般建議使用ROW模式。

server_id=100
log_bin=/data/mysql5.6/binlog/binlog
binlog_format=ROW

# log_slave_updates=ON

上述引數中,log_bin不能動態修改。需要重啟mysql才能生效。
使用show global variables確認主庫binlog已經開啟:

mysql> show global variables like 'log_bin%';
| log_bin                                 | ON                                 |
| log_bin_basename                        | /data/mysql5.6/binlog/binlog       |
| log_bin_index                           | /data/mysql5.6/binlog/binlog.index |

使用show binary logs命令檢視主庫binlog列表:

mysql> show binary logs;
+---------------+-----------+
| Log_name      | File_size |
+---------------+-----------+
| binlog.000001 |       120 |
+---------------+-----------+
1 row in set (0.00 sec)

2、主庫建立複製賬號(滿足基本許可權要求)

主庫需要建立一個複製賬號,備庫需要使用複製賬號連線到主庫,獲取binlog。

mysql> create user 'rep'@'%' identified by 'rep123';
Query OK, 0 rows affected (0.00 sec)

mysql> grant  replication slave on *.* to 'rep'@'%';
Query OK, 0 rows affected (0.00 sec)

複製賬號需要的許可權:replication slave。

3、備庫引數配置

備庫上必須設定的引數server_id,server_id的值需要和主庫設定成不一樣。

server_id=236

其他binlog引數可以不設定,或者和主庫設定成一樣。
備庫開啟binlog和log_slave_updates後,會將從主庫上覆制過來的事務也記錄到binlog,在建立級連複製時,需要這麼配置。

log_slave_updates=ON
log_bin=/data/mysql5.6/binlog/binlog
binlog_format=ROW

4、備庫初始化

備庫資料準備,需要滿足條件:

  • 備庫資料是主庫資料在過去某個時間點的快照
  • 從那個時間點開始的binlog都存在

我們可以使用備份(如percona開源的xtrabackup,或mysqldump)等工具建立主庫的一致性備份,將恢復到備庫中,然後再開啟複製。

如果主備庫都是新初始化的資料庫例項,主庫binlog沒有缺失,則可以略過資料庫備份和恢復這一個步驟,直接開啟複製。

mysqldump備份資料

這裡使用mysqldump進行備份:

/opt/mysql5.7/bin/mysqldump -uroot -h127.0.0.1 -P3357 -pabc123 --all-databases \
 --master-data=2 --routines --flush-privileges --triggers --events > /tmp/mysql57_dump.sql

mysqldump引數說明:

  • all-databases --routines --triggers --events:備份所有資料庫,包括儲存過程、觸發器、定時事件
  • master-data=2:記錄資料庫當前binlog位點。指定master-data後,後自動加上lock-tables選項,鎖定資料庫,除非同時加上--single-transaction。
  • single-transaction:使用innodb的一致性讀取機制實現一執行資料庫備份,不鎖表。但是對非InnoDB引擎(如MyISAM)無效。同時備份過程中不能有DDL。
  • flush-privileges:備份完mysql資料庫後,加上flush privileges命令。資料恢復時,恢復完mysql資料庫後就會執行flush privileges命令,恢復出來的使用者資訊才會生效。
  • gtid-mode=auto:如果資料庫開啟了GTID,則備份檔案中會加入set global GTID_PURGED=xxx;

mysqldump資料恢復

到目標例項執行:

mysql -uroot -h127.0.0.1 -P3357 -pabc123 
source mysql57_dump.sql

注意,執行source前,確認登陸了正確的資料庫。如果登陸到主庫執行恢復操作,則會引起主庫資料丟失。

5、備庫建立複製通道

在備庫上使用change master命令建立複製資訊,這裡指定從主庫binlog.000001檔案頭部開始複製(master_log_pos沒有指定時,從binlog檔案頭部複製)。

change master to master_host='172.16.121.234',master_port=3356,master_user='rep',
master_password='rep123',master_log_file='binlog.000001';

start slave;

show slave status\G

位點從備份檔案中找:

# head -30 /tmp/mysql57_dump.sql | grep 'CHANGE MASTER'
-- CHANGE MASTER TO MASTER_LOG_FILE='binlog.000006', MASTER_LOG_POS=608;

更多技術資訊請檢視雲掣官網https://yunche.pro/?t=yrgw

相關文章