<p>MySQL 的非同步複製</p>
阿新 • • 發佈:2021-07-01
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許可權