一、簡介
MySQL 主從複製是 MySQL 自帶的一個功能,他是藉助 bin-log日誌文件裏面的
SQL 命令實現主從複製,我們在 Master 端執行了一條命令,在 Salve 端
也會執行一遍,從而達到主從複製的效果,通過主從複製可以實現數據備份,
故障轉移,MySQL集羣,高可用,讀寫分離。
Slave 數據庫生成兩個線程,一個 I/O 線程,一個 SQL 線程,I/O 線程請求主庫bin-log,
將得到的 bin- log 日誌寫到 relay_log(中繼日誌) 文件,主庫會生成一個 log Dump 線程,用來給從庫IO線程傳 bin-log,SQL 線程會讀取 relay_log 文件中的日誌,並生成具體操作,從而實現主從操作的一致性,從而實現讀寫分離。
二、基於 Docker 實現 MySQL 主從複製
1、安裝 MySQL
運行 MySQL 容器,這裏我們運行兩個,一個是主(master)數據庫,一個是從(slave) 數據庫。
主數據庫:
docker run --name master -e MYSQL_ROOT_PASSWORD=roof -p 3306:3306 -d mysql:5.7
從數據庫:
docker run --name slave -e MYSQL_ROOT_PASSWORD=roof -p 3307:3306 -d mysql:5.7
2、配置主數據庫 master
修改主數據庫文件,進入容器內部
docker exec -it master /bin/bash
cd /etc/mysql
安裝 vim,以便修改配置文件
apt-get update
apt-get install vim
進入 mysql 配置文件
vim my.cnf
添加以下配置
[mysqld]
# 設置同一局域網內唯一ID
server-id=100
# 開啓二進制日誌功能
log-bin=mysql-bin
重啓 MySQL 服務
service mysql restart
啓動 Docker 容器
docker start master
驗證是否配置成功,執行以下 SQL 命令,查詢配置中的 server_id
show VARIABLES like '%server_id%';
查詢同步的文件和行數
SHOW MASTER status;
2、配置從數據庫 slave
同理配置主數據庫,添加以下配置,重啓 MySQL 和 Docker 即可。
[mysqld]
# 設置同一局域網內唯一ID
server_id = 102
# 日誌文件同步方式
log-bin = mysql-bin
# 需要同步的數據庫
binlog-do-db = test
在 Master 數據庫執行以下命令
SHOW MASTER status;
我們可以看到 File 和 Position,然後在 Slave 數據庫執行以下命令,使從節點同步主節點數據,File 和 Position 要和主節點相同。
change master to master_host='106.13.1.171',
master_user='root', master_password='roof',
master_port=3306, master_log_file='mysql-bin.000001',
master_log_pos= 154, master_connect_retry=30;
開始主從複製
START SLAVE;
查看效果
SHOW SLAVE STATUS;
有兩個 Yes 成功!我們可以在 Master 數據庫創建一個數據庫 test 進行測試, Slave 就會自動同步主數據庫數據。
完
ABOUT
我的 Github:Github
CSDN: CSDN
個人網站: sirius blog
E-mail: [email protected]