同一服務器模擬利用 Docker 模擬 Mysql 設置的主從同步設置。
1、運行起來兩個 Mysql :masterMysql(主庫)、slaveMysql(從庫),數據庫版本 5.7。
#拉取鏡像
docker pull mysql:5.7
#y運行主、從容器
docker run -p 13306:3306 --name slavemysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
docker run -p 13307:3306 --name mastermysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
運行完成后可以嘗試連接,注意此處的映射到主機的服務端口分別為 13306和13307,對外連接需要保證防火墻和網關設置都要放開。
2、查看容器的使用 IP(配置主從需要同一內網中的 IP 地址使用)
#查看主庫的所在 IP
docker inspect --format='{{.NetworkSettings.IPAddress}}' masterMysql
#172.18.0.2
3、配置主從庫。
(1)進入主庫
docker exec -it masterMysql bash #masterMysql 為運行容器的名稱。
(2)進行配設置配置文件

可以看到,多份 *.cnf 文件,包括在 conf.d 和 mysql.conf.d 文件夾下都有。 這個是有加載順序的,此處配置就統在 my.cnf 上操作。
(3)設置配置文件
方式一:
正常操作是進入文件夾內編輯,如以下方式:
vim ./my.cnf
不過這里遇到會報錯:
bash: vi: command not found
先行安裝 vi
apt-get update
#成功后運行
apt-get install vim
方式二(建議):
在容器外編輯后拷貝到容器內,這里是直接覆蓋的方式。
復制主機到容器內。
語法:docker cp [主機地址] [容器 ID 或容器名稱]:[容器文件地址]
docker cp /home/mysql/my.cnf mysql:/etc/mysql/my.cnf
(4)打開 Binlog 配置。
相同的配置:進入主、從庫設置 my.cnf 配置文件。注意 server-id 需要不一致。
character_set_server=utf8
init_connect='SET NAMES utf8'
#這兩條是設置utf-8字符格式,兩個主機配置相同
## 同一局域網內注意要唯一(如果雙向主備庫,依賴這個去區分執行 Binlog 的 SQL 語句 )
#可以取 Ip 的最后一個。主庫為 2,從庫為 3。
server-id=2
## 開啟二進制日志功能,可以隨便取(關鍵)
#演示設置主庫設置為 master-bin,從庫為 slave-bin
log-bin=master-bin
log_bin_index = master-bin.index
其中不同的配置: 主庫:
#這里整理可以配置的內容,由于測試,先注釋。
#要給從機同步的庫(如果不寫,默認全部同步)
#binlog-do-db=test
#不給從機同步的庫(多個寫多行)
#binlog-ignore-db=mysql #設置復制的數據庫
#binlog-ignore-db=information_schema #設置忽略復制的數據庫
#自動清理 15 天前的log文件
expire_logs_days=15
#binlog_format=row #設置 Binlog 記錄的實際操作的 SQL。
#max_binlog_size=100m #設置文件大小
#replicate_do_table=test #進行復制的的數據表
#replicate_ignore_table=igoreTest #忽略進行復制的的數據表
#replicate_wild_ignore_db=test # 同 Replicate_Do_DB 可帶通配符
#replicate_wild_ignore_db=igoreTest # 同 Replicate_Ignore_DB 可帶通配符
從庫:
#設置避免更新不及時或是重啟后導致主從庫復制出錯。
read_only = 1
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay-log = slave-relay-bin
#主庫的日志存放。
relay-log-index = slave-relay-bin.index
配置是需要重啟容器后生效。
docker restart masterMysql
docker restart slaveMysql
查看容器的日志:
如果要是重啟失敗,可以用此操作檢查是否剛才的配置文件有出錯,利用(3)方式二,修改配置文件,再去啟動容器。
(5)查看容器是否設置 Binlog 配置成功。
#進入容器
docker exec -it masterMysql bash
#進入 Mysql
mysql -uroot -p123456
#查看 Binlog 狀態。
show variables like '%log_bin%';
#可以看到 log_bin 是打開的狀態,bin_log 的位置在 /var/lib/mysql/master-bin

(6)查看主庫的 Matser 節點的 Binlog 狀態,拿到此處的配置的 position 值。
若是之前開啟的 Binlog 沒有使用,需要新生成或是重置清空。
#生成新的 Binlog 日志文件
flush logs;
#重置清空 Binlog 日志文件
reset master;
可以查看到此處的 日志配置文件是:master-bin.000001,Position 為 334。

4、主庫設置一個賬號提供從庫同步數據使用。此處賬號為 slaveMysql。
CREATE USER 'slaveMysql'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slaveMysql'@'%';
5、登錄從庫的 Mysql 執行,建議還是連接到 Navicat 上運行和查看,服務器上查看格式很亂。
(1)執行同步的主庫配置。注意這里的是結尾符號。
change master to master_host='172.18.0.2',
master_user='slaveMysql',
master_password='123456',
master_port=3306,
master_log_file='mysql-bin.000001',
master_log_pos= 334,
master_connect_retry=30;
參數詳解:
change master to master_host=${容器所用IP} 這里需要是同一局域網內,第 2 所得。
master_port Master 的端口號,指的是容器的運行數據庫的端口號,不是映射到主機的端口號,第 1 所得。
master_user 設置同步使用的賬號, 第 4 所得
master_password 設置同步使用的賬密碼,第 4 所得
master_log_file 指定了從主庫哪個配置文件讀取 Binlog 日志,第 3(6) 所得
master_log_pos 從哪個 Position 開始讀,即上文中提到的 Position 字段的值,第 3(6) 所得
master_connect_retry 如果連接失敗,重試的時間間隔,單位是秒,默認是60秒
(2)打開從庫的配置。
start slave;
#停止 slave。
#stop slave;
(3)查看主從同步的狀態。 檢查主從同步的狀態。

(4)檢查錯誤。
可以通過查看 Last_Io_Error 查看到連接的錯誤。 排查以下出錯的可能。 1>網絡不通,端口和局域網 IP 2>用于同步的賬戶密碼正常 3> Master 的 Binlog 文件名稱和 Pos 位置錯誤。
6、測試主從是否正常。
Master 庫創建數據庫,查看 從庫是否也有同步創建成功即可,到此就結束啦。

到此這篇關于Docker 環境運行 Mysql 和開啟 Binlog 配置主從同步的文章就介紹到這了,更多相關Docker Binlog mysql主從同步內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!