Docker 環(huán)境運(yùn)行 Mysql 和開(kāi)啟 Binlog 配置主從同步的設(shè)置方法
同一服務(wù)器模擬利用 Docker 模擬 Mysql 設(shè)置的主從同步設(shè)置。
1、運(yùn)行起來(lái)兩個(gè) Mysql :masterMysql(主庫(kù))、slaveMysql(從庫(kù)),數(shù)據(jù)庫(kù)版本 5.7。
#拉取鏡像 docker pull mysql:5.7 #y運(yùn)行主、從容器 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
運(yùn)行完成后可以嘗試連接,注意此處的映射到主機(jī)的服務(wù)端口分別為 13306和13307,對(duì)外連接需要保證防火墻和網(wǎng)關(guān)設(shè)置都要放開(kāi)。
2、查看容器的使用 IP(配置主從需要同一內(nèi)網(wǎng)中的 IP 地址使用)
#查看主庫(kù)的所在 IP docker inspect --format='{{.NetworkSettings.IPAddress}}' masterMysql #172.18.0.2
3、配置主從庫(kù)。
(1)進(jìn)入主庫(kù)
docker exec -it masterMysql bash #masterMysql 為運(yùn)行容器的名稱。
(2)進(jìn)行配設(shè)置配置文件
cd /etc/mysql&&ls
可以看到,多份 *.cnf 文件,包括在 conf.d 和 mysql.conf.d 文件夾下都有。 這個(gè)是有加載順序的,此處配置就統(tǒng)在 my.cnf 上操作。
(3)設(shè)置配置文件
方式一:
正常操作是進(jìn)入文件夾內(nèi)編輯,如以下方式:
vim ./my.cnf 不過(guò)這里遇到會(huì)報(bào)錯(cuò): bash: vi: command not found
先行安裝 vi
apt-get update #成功后運(yùn)行 apt-get install vim
方式二(建議):
在容器外編輯后拷貝到容器內(nèi),這里是直接覆蓋的方式。
復(fù)制主機(jī)到容器內(nèi)。 語(yǔ)法:docker cp [主機(jī)地址] [容器 ID 或容器名稱]:[容器文件地址] docker cp /home/mysql/my.cnf mysql:/etc/mysql/my.cnf
(4)打開(kāi) Binlog 配置。
相同的配置:進(jìn)入主、從庫(kù)設(shè)置 my.cnf 配置文件。注意 server-id 需要不一致。
character_set_server=utf8 init_connect='SET NAMES utf8' #這兩條是設(shè)置utf-8字符格式,兩個(gè)主機(jī)配置相同 ## 同一局域網(wǎng)內(nèi)注意要唯一(如果雙向主備庫(kù),依賴這個(gè)去區(qū)分執(zhí)行 Binlog 的 SQL 語(yǔ)句 ) #可以取 Ip 的最后一個(gè)。主庫(kù)為 2,從庫(kù)為 3。 server-id=2 ## 開(kāi)啟二進(jìn)制日志功能,可以隨便?。P(guān)鍵) #演示設(shè)置主庫(kù)設(shè)置為 master-bin,從庫(kù)為 slave-bin log-bin=master-bin log_bin_index = master-bin.index
其中不同的配置: 主庫(kù):
#這里整理可以配置的內(nèi)容,由于測(cè)試,先注釋。 #要給從機(jī)同步的庫(kù)(如果不寫(xiě),默認(rèn)全部同步) #binlog-do-db=test #不給從機(jī)同步的庫(kù)(多個(gè)寫(xiě)多行) #binlog-ignore-db=mysql #設(shè)置復(fù)制的數(shù)據(jù)庫(kù) #binlog-ignore-db=information_schema #設(shè)置忽略復(fù)制的數(shù)據(jù)庫(kù) #自動(dòng)清理 15 天前的log文件 expire_logs_days=15 #binlog_format=row #設(shè)置 Binlog 記錄的實(shí)際操作的 SQL。 #max_binlog_size=100m #設(shè)置文件大小 #replicate_do_table=test #進(jìn)行復(fù)制的的數(shù)據(jù)表 #replicate_ignore_table=igoreTest #忽略進(jìn)行復(fù)制的的數(shù)據(jù)表 #replicate_wild_ignore_db=test # 同 Replicate_Do_DB 可帶通配符 #replicate_wild_ignore_db=igoreTest # 同 Replicate_Ignore_DB 可帶通配符
從庫(kù):
#設(shè)置避免更新不及時(shí)或是重啟后導(dǎo)致主從庫(kù)復(fù)制出錯(cuò)。 read_only = 1 master_info_repository=TABLE relay_log_info_repository=TABLE relay-log = slave-relay-bin #主庫(kù)的日志存放。 relay-log-index = slave-relay-bin.index
配置是需要重啟容器后生效。
docker restart masterMysql docker restart slaveMysql
查看容器的日志:
docker logs masterMysql
如果要是重啟失敗,可以用此操作檢查是否剛才的配置文件有出錯(cuò),利用(3)方式二,修改配置文件,再去啟動(dòng)容器。
(5)查看容器是否設(shè)置 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)查看主庫(kù)的 Matser 節(jié)點(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、主庫(kù)設(shè)置一個(gè)賬號(hào)提供從庫(kù)同步數(shù)據(jù)使用。此處賬號(hào)為 slaveMysql。
CREATE USER 'slaveMysql'@'%' IDENTIFIED BY '123456'; GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slaveMysql'@'%';
5、登錄從庫(kù)的 Mysql 執(zhí)行,建議還是連接到 Navicat 上運(yùn)行和查看,服務(wù)器上查看格式很亂。
(1)執(zhí)行同步的主庫(kù)配置。注意這里的是結(jié)尾符號(hào)。
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;
參數(shù)詳解:
change master to master_host=${容器所用IP} 這里需要是同一局域網(wǎng)內(nèi),第 2 所得。 master_port Master 的端口號(hào),指的是容器的運(yùn)行數(shù)據(jù)庫(kù)的端口號(hào),不是映射到主機(jī)的端口號(hào),第 1 所得。 master_user 設(shè)置同步使用的賬號(hào), 第 4 所得 master_password 設(shè)置同步使用的賬密碼,第 4 所得 master_log_file 指定了從主庫(kù)哪個(gè)配置文件讀取 Binlog 日志,第 3(6) 所得 master_log_pos 從哪個(gè) Position 開(kāi)始讀,即上文中提到的 Position 字段的值,第 3(6) 所得 master_connect_retry 如果連接失敗,重試的時(shí)間間隔,單位是秒,默認(rèn)是60秒
(2)打開(kāi)從庫(kù)的配置。
start slave; #停止 slave。 #stop slave;
(3)查看主從同步的狀態(tài)。 檢查主從同步的狀態(tài)。
show slave status ;
(4)檢查錯(cuò)誤。
可以通過(guò)查看 Last_Io_Error 查看到連接的錯(cuò)誤。 排查以下出錯(cuò)的可能。 1>網(wǎng)絡(luò)不通,端口和局域網(wǎng) IP 2>用于同步的賬戶密碼正常 3> Master 的 Binlog 文件名稱和 Pos 位置錯(cuò)誤。
6、測(cè)試主從是否正常。
Master 庫(kù)創(chuàng)建數(shù)據(jù)庫(kù),查看 從庫(kù)是否也有同步創(chuàng)建成功即可,到此就結(jié)束啦。
到此這篇關(guān)于Docker 環(huán)境運(yùn)行 Mysql 和開(kāi)啟 Binlog 配置主從同步的文章就介紹到這了,更多相關(guān)Docker Binlog mysql主從同步內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解用Docker搭建Laravel和Vue項(xiàng)目的開(kāi)發(fā)環(huán)境
這篇文章主要介紹了詳解用Docker搭建Laravel和Vue項(xiàng)目的開(kāi)發(fā)環(huán)境,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-03-03使用非root用戶安裝及啟動(dòng)docker的問(wèn)題(rootless模式運(yùn)行)
docker是使用--userns-remap容器用戶映射宿主機(jī)用戶的方式來(lái)解決問(wèn)題,用戶和組的映射由兩個(gè)配置文件來(lái)控制,分別是/etc/subuid和/etc/subgid,本文給大家介紹非root用戶啟動(dòng)docker的問(wèn)題,感興趣的朋友一起看看吧2022-05-05聊聊kubernetes1.20用containerd替換docker(shim)的問(wèn)題
這篇文章主要介紹了kubernetes1.20用containerd替換docker(shim),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03Docker數(shù)據(jù)存儲(chǔ)之Volumes詳解
今天小編就為大家分享一篇關(guān)于Docker數(shù)據(jù)存儲(chǔ)之Volumes詳解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02docker容器無(wú)法ping域名問(wèn)題及解決
這篇文章主要介紹了docker容器無(wú)法ping域名問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08使用minikube安裝使用單機(jī)版K8S方式(docker)
本文介紹了如何在centos7上使用minikube快速搭建單機(jī)版k8s,主要步驟包括:下載kubectl和docker,創(chuàng)建新用戶,下載和安裝minikube,驗(yàn)證安裝情況,最后,通過(guò)執(zhí)行minikube和minikubestop啟停K8s,或使用minikubedelete徹底刪除K8S的數(shù)據(jù)2024-10-10解決Docker之mysql容器數(shù)據(jù)庫(kù)更改不生效的問(wèn)題
這篇文章主要介紹了解決Docker之mysql容器數(shù)據(jù)庫(kù)更改不生效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11