同一服務(wù)器模擬利用 Docker 模擬 Mysql 設置的主從同步設置。
1、運行起來(lái)兩個(gè) 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
運行完成后可以嘗試連接,注意此處的映射到主機的服務(wù)端口分別為 13306和13307,對外連接需要保證防火墻和網(wǎng)關(guān)設置都要放開(kāi)。
2、查看容器的使用 IP(配置主從需要同一內網(wǎng)中的 IP 地址使用)
#查看主庫的所在 IP docker inspect --format='{{.NetworkSettings.IPAddress}}' masterMysql #172.18.0.2
3、配置主從庫。
(1)進(jìn)入主庫
docker exec -it masterMysql bash #masterMysql 為運行容器的名稱(chēng)。
(2)進(jìn)行配設置配置文件
cd /etc/mysql&&ls
可以看到,多份 *.cnf 文件,包括在 conf.d 和 mysql.conf.d 文件夾下都有。 這個(gè)是有加載順序的,此處配置就統在 my.cnf 上操作。
(3)設置配置文件
方式一:
正常操作是進(jìn)入文件夾內編輯,如以下方式:
vim ./my.cnf 不過(guò)這里遇到會(huì )報錯: bash: vi: command not found
先行安裝 vi
apt-get update #成功后運行 apt-get install vim
方式二(建議):
在容器外編輯后拷貝到容器內,這里是直接覆蓋的方式。
復制主機到容器內。 語(yǔ)法:docker cp [主機地址] [容器 ID 或容器名稱(chēng)]:[容器文件地址] docker cp /home/mysql/my.cnf mysql:/etc/mysql/my.cnf
(4)打開(kāi) Binlog 配置。
相同的配置:進(jìn)入主、從庫設置 my.cnf 配置文件。注意 server-id 需要不一致。
character_set_server=utf8 init_connect='SET NAMES utf8' #這兩條是設置utf-8字符格式,兩個(gè)主機配置相同 ## 同一局域網(wǎng)內注意要唯一(如果雙向主備庫,依賴(lài)這個(gè)去區分執行 Binlog 的 SQL 語(yǔ)句 ) #可以取 Ip 的最后一個(gè)。主庫為 2,從庫為 3。 server-id=2 ## 開(kāi)啟二進(jìn)制日志功能,可以隨便?。P(guān)鍵) #演示設置主庫設置為 master-bin,從庫為 slave-bin log-bin=master-bin log_bin_index = master-bin.index
其中不同的配置: 主庫:
#這里整理可以配置的內容,由于測試,先注釋。 #要給從機同步的庫(如果不寫(xiě),默認全部同步) #binlog-do-db=test #不給從機同步的庫(多個(gè)寫(xiě)多行) #binlog-ignore-db=mysql #設置復制的數據庫 #binlog-ignore-db=information_schema #設置忽略復制的數據庫 #自動(dòng)清理 15 天前的log文件 expire_logs_days=15 #binlog_format=row #設置 Binlog 記錄的實(shí)際操作的 SQL。 #max_binlog_size=100m #設置文件大小 #replicate_do_table=test #進(jìn)行復制的的數據表 #replicate_ignore_table=igoreTest #忽略進(jìn)行復制的的數據表 #replicate_wild_ignore_db=test # 同 Replicate_Do_DB 可帶通配符 #replicate_wild_ignore_db=igoreTest # 同 Replicate_Ignore_DB 可帶通配符
從庫:
#設置避免更新不及時(shí)或是重啟后導致主從庫復制出錯。 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
查看容器的日志:
docker logs masterMysql
如果要是重啟失敗,可以用此操作檢查是否剛才的配置文件有出錯,利用(3)方式二,修改配置文件,再去啟動(dòng)容器。
(5)查看容器是否設置 Binlog 配置成功。
#進(jìn)入容器 docker exec -it masterMysql bash #進(jìn)入 Mysql mysql -uroot -p123456 #查看 Binlog 狀態(tài)。 show variables like '%log_bin%'; #可以看到 log_bin 是打開(kāi)的狀態(tài),bin_log 的位置在 /var/lib/mysql/master-bin 
(6)查看主庫的 Matser 節點(diǎn)的 Binlog 狀態(tài),拿到此處的配置的 position 值。
show master status;
若是之前開(kāi)啟的 Binlog 沒(méi)有使用,需要新生成或是重置清空。
#生成新的 Binlog 日志文件 flush logs; #重置清空 Binlog 日志文件 reset master;
可以查看到此處的 日志配置文件是:master-bin.000001,Position 為 334。
4、主庫設置一個(gè)賬號提供從庫同步數據使用。此處賬號為 slaveMysql。
CREATE USER 'slaveMysql'@'%' IDENTIFIED BY '123456'; GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slaveMysql'@'%';
5、登錄從庫的 Mysql 執行,建議還是連接到 Navicat 上運行和查看,服務(wù)器上查看格式很亂。
(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} 這里需要是同一局域網(wǎng)內,第 2 所得。 master_port Master 的端口號,指的是容器的運行數據庫的端口號,不是映射到主機的端口號,第 1 所得。 master_user 設置同步使用的賬號, 第 4 所得 master_password 設置同步使用的賬密碼,第 4 所得 master_log_file 指定了從主庫哪個(gè)配置文件讀取 Binlog 日志,第 3(6) 所得 master_log_pos 從哪個(gè) Position 開(kāi)始讀,即上文中提到的 Position 字段的值,第 3(6) 所得 master_connect_retry 如果連接失敗,重試的時(shí)間間隔,單位是秒,默認是60秒
(2)打開(kāi)從庫的配置。
start slave; #停止 slave。 #stop slave;
(3)查看主從同步的狀態(tài)。 檢查主從同步的狀態(tài)。
show slave status ;
(4)檢查錯誤。
可以通過(guò)查看 Last_Io_Error 查看到連接的錯誤。 排查以下出錯的可能。 1>網(wǎng)絡(luò )不通,端口和局域網(wǎng) IP 2>用于同步的賬戶(hù)密碼正常 3> Master 的 Binlog 文件名稱(chēng)和 Pos 位置錯誤。
6、測試主從是否正常。
Master 庫創(chuàng )建數據庫,查看 從庫是否也有同步創(chuàng )建成功即可,到此就結束啦。
到此這篇關(guān)于Docker 環(huán)境運行 Mysql 和開(kāi)啟 Binlog 配置主從同步的文章就介紹到這了,更多相關(guān)Docker Binlog mysql主從同步內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站