MySQL 的異步復制
MySQL 復制屬于水平擴展架構,是構建大規模高性能應用的基礎。在 MySQL 中,有兩種常用的搭建復制的方式:異步復制和增強半同步復制,本小節主要介紹 MySQL 的異步復制。
1. 復制概述
復制解決的問題,是讓一臺數據庫的數據與其他數據庫保持同步。復制的原理是將主庫的 DML 和 DDL操作通過 binlog 日志傳到從庫,然后在從庫上重放這些日志,從而使主庫和從庫保持數據同步。
MySQL復制的優點:
- 實現高可用架構,避免單點故障;
- 可以在從庫執行查詢,分擔主庫的查詢壓力;
- 可以在從庫執行備份,降低主庫受到的影響。
2. 異步復制
MySQL 的復制默認是異步復制,主從異步復制是 MySQL 很常見的復制場景,搭建步驟也相對簡單。下面從實戰的角度一步步搭建異步復制環境。
2.1 基本環境
Master | Slave | |
---|---|---|
MySQL版本 | MySQL-5.7.31-x86_64 | MySQL-5.7.31-x86_64 |
IP | 192.168.0.1 | 192.168.0.2 |
port | 3306 | 3306 |
2.2 主庫配置
修改 my.cnf 文件:
gtid-mode = on
enforce-gtid-consistency = 1
binlog_format = row
server-id = 330601
log-bin = /mysql/log/mysql-bin
binlog_cache_size = 1M
創建復制用賬號:
create user 'repl'@'192.168.0.2' identified by '123456';
grant replication slave on *.* to 'repl'@'192.168.0.2';
2.3 從庫配置
修改 my.cnf 文件:
gtid-mode = on
enforce-gtid-consistency = 1
binlog_format = row
server-id = 330602
log-bin = /mysql/log/mysql-bin
binlog_cache_size = 1M
skip_slave_start = 1
導出導入:
--主庫導出
mysqldump -uroot -p --single-transaction --master-data=2 --databases test123 > test_200908.sql
--從庫導入
mysql -uroot -p < test_200908.sql
--調整復制起點
change master to master_host='192.168.0.1', master_port=3306, master_user='repl', master_password='123456', master_auto_position=1;
--開始復制
start slave;
--查看復制
show slave status\G;
2.4 環境校驗
--主庫,創建表t1并插入數據
use test123;
create table t1(id int);
insert into t1 values(1);
select * from t1;
--從庫,檢查t1表是否存在
use test123;
select * from t1;
2.5 擴展問題
如果主庫導出時出現如下警告信息:
mysqldump -uroot -p --single-transaction --master-data=2 --databases test123 > test_200908.sql
Enter password:
Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even those that changed suppressed parts of the database. If you don't want to restore GTIDs, pass --set-gtid-purged=OFF. To make a complete dump, pass --all-databases --triggers --routines --events.
當MySQL為GTID模式時,用mysqldump導出默認會帶上當前已執行的GTID
- 如果是從庫的GTID_EXECUTED為空值,即從庫無任何事務操作,則無需理會;
- 如果是從庫的GTID_EXECUTED為非空,兩種解決方案。
在主庫 mysqldump 導出時,加上參數 --set-gtid-purged=OFF,適合場景為導出部分數據;
在從庫 mysqldump 導入前,執行 reset master,適合場景為搭建新從庫。
3. 小結
本小節主要介紹了 MySQL 復制的基本概念和 MySQL 異步復制的搭建方式。
異步復制的配置步驟相對簡單:
- 一般來說,需確保主從庫安裝相同版本的數據庫
- 在主庫需新建一個復制賬號,并授予replication slave權限