引言
在構建資料庫複製系統時,正確配置主庫和備庫是確保資料同步順利進行的關鍵步驟。以下是建立複製的基本步驟,主要包括主庫開啟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