亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

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

3. 小結

本小節主要介紹了 MySQL 復制的基本概念和 MySQL 異步復制的搭建方式。

異步復制的配置步驟相對簡單:

  • 一般來說,需確保主從庫安裝相同版本的數據庫
  • 在主庫需新建一個復制賬號,并授予replication slave權限