1. 程式人生 > MYSQL進階教學 ><p>MySQL 的非同步複製</p>

<p>MySQL 的非同步複製</p>

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

  1. 如果是從庫的GTID_EXECUTED為空值,即從庫無任何事務操作,則無需理會;
  2. 如果是從庫的GTID_EXECUTED為非空,兩種解決方案。
    在主庫 mysqldump 匯出時,加上引數 --set-gtid-purged=OFF,適合場景為匯出部分資料;
    在從庫 mysqldump 匯入前,執行 reset master,適合場景為搭建新從庫。

3. 小結

本小節主要介紹了 MySQL 複製的基本概念和 MySQL 非同步複製的搭建方式。

非同步複製的配置步驟相對簡單:

  • 一般來說,需確保主從庫安裝相同版本的資料庫
  • 在主庫需新建一個複製賬號,並授予replication slave許可權