下文主要給大家?guī)?lái)如何搭建基于Docker的MySQL主從復(fù)制,希望這些內(nèi)容能夠帶給大家實(shí)際用處,這也是我編輯如何搭建基于Docker的MySQL主從復(fù)制這篇文章的主要目的。好了,廢話不多說(shuō),大家直接看下文吧。
公司主營(yíng)業(yè)務(wù):成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、成都外貿(mào)網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶(hù)真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶(hù)帶來(lái)驚喜。創(chuàng)新互聯(lián)推出曹縣免費(fèi)做網(wǎng)站回饋大家。
首先拉取docker鏡像,我們這里使用5.7版本的mysql:
docker pull mysql:5.7
然后使用此鏡像啟動(dòng)容器,這里需要分別啟動(dòng)主從兩個(gè)容器
docker run -p 3339:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
docker run -p 3340:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
Master對(duì)外映射的端口是3339,Slave對(duì)外映射的端口是3340。因?yàn)閐ocker容器是相互獨(dú)立的,每個(gè)容器有其獨(dú)立的ip,所以不同容器使用相同的端口并不會(huì)沖突。這里我們應(yīng)該盡量使用mysql默認(rèn)的3306端口,否則可能會(huì)出現(xiàn)無(wú)法通過(guò)ip連接docker容器內(nèi)mysql的問(wèn)題。
使用docker ps命令查看正在運(yùn)行的容器:
此時(shí)可以使用Navicat等工具測(cè)試連接mysql
通過(guò)docker exec -it 5ddad8c2f368 /bin/bash命令進(jìn)入到Master容器內(nèi)部,也可以通過(guò)docker exec -it mysql-master /bin/bash命令進(jìn)入。5ddad8c2f368是容器的id,而mysql-master是容器的名稱(chēng)。
cd /etc/mysql/mysql.conf.d切換到/etc/mysql/mysql.conf.d目錄下,然后vim mysqld.cnf對(duì)my.cnf進(jìn)行編輯。此時(shí)會(huì)報(bào)出bash: vim: command not found,需要我們?cè)赿ocker容器內(nèi)部自行安裝vim。使用apt-get install vim命令安裝vim
會(huì)出現(xiàn)如下問(wèn)題:
執(zhí)行apt-get update,然后再次執(zhí)行apt-get install vim即可成功安裝vim。然后我們就可以使用vim編輯my.cnf,在my.cnf中添加如下配置:
[mysqld] ## 同一局域網(wǎng)內(nèi)注意要唯一 server-id=100 ## 開(kāi)啟二進(jìn)制日志功能,可以隨便?。P(guān)鍵) log-bin=mysql-bin
配置完成之后,需要重啟mysql服務(wù)使配置生效。使用service mysql restart完成重啟。重啟mysql服務(wù)時(shí)會(huì)使得docker容器停止,我們還需要docker start mysql-master啟動(dòng)容器。
下一步在Master數(shù)據(jù)庫(kù)創(chuàng)建數(shù)據(jù)同步用戶(hù),授予用戶(hù) slave REPLICATION SLAVE權(quán)限和REPLICATION CLIENT權(quán)限,用于在主從庫(kù)之間同步數(shù)據(jù)。
首先連接mysql數(shù)據(jù)庫(kù)
root@5ddad8c2f368:/# mysql -uroot -p123456
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
授予復(fù)制賬號(hào)REPLICATION CLIENT權(quán)限,復(fù)制用戶(hù)可以使用SHOW MASTER STATUS, SHOW SLAVE STATUS和 SHOW BINARY LOGS來(lái)確定復(fù)制狀態(tài)。
授予復(fù)制賬號(hào)REPLICATION SLAVE權(quán)限,復(fù)制才能真正地工作。
和配置Master(主)一樣,在Slave配置文件my.cnf中添加如下配置:
[mysqld] ## 設(shè)置server_id,注意要唯一 server-id=101 ## 開(kāi)啟二進(jìn)制日志功能,以備Slave作為其它Slave的Master時(shí)使用 log-bin=mysql-slave-bin ## relay_log配置中繼日志 relay_log=edu-mysql-relay-bin
配置完成后也需要重啟mysql服務(wù)和docker容器,操作和配置Master(主)一致。
relay log很多方面都跟binary log差不多。區(qū)別是:從云服務(wù)器I/O線程將主云服務(wù)器的二進(jìn)制日志讀取過(guò)來(lái)記錄到從云服務(wù)器本地文件,然后SQL線程會(huì)讀取relay-log日志的內(nèi)容并應(yīng)用到從云服務(wù)器,從而使從云服務(wù)器和主云服務(wù)器的數(shù)據(jù)保持一致。
在Master進(jìn)入mysql,執(zhí)行show master status;
File和Position字段的值后面將會(huì)用到,在后面的操作完成之前,需要保證Master庫(kù)不能做任何操作,否則將會(huì)引起狀態(tài)變化,F(xiàn)ile和Position字段的值變化。
在Slave 中進(jìn)入 mysql,執(zhí)行
CHANGE MASTER TO master_host = '172.17.0.2', master_user = 'slave', master_password = '123456', master_port = 3306, master_log_file = 'mysql-bin.000001', master_log_pos = 617, master_connect_retry = 30;
命令說(shuō)明:
master_host :Master的地址,指的是容器的獨(dú)立ip,可以通過(guò)docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名稱(chēng)|容器id查詢(xún)?nèi)萜鞯膇p
master_port:Master的端口號(hào),指的是容器的端口號(hào)
master_user:用于數(shù)據(jù)同步的用戶(hù)
master_password:用于同步的用戶(hù)的密碼
master_log_file:指定 Slave 從哪個(gè)日志文件開(kāi)始復(fù)制數(shù)據(jù),即上文中提到的 File 字段的值
master_log_pos:從哪個(gè) Position 開(kāi)始讀,即上文中提到的 Position 字段的值
master_connect_retry:如果連接失敗,重試的時(shí)間間隔,單位是秒,默認(rèn)是60秒
在Slave 中的mysql終端執(zhí)行show slave status \G;用于查看主從同步狀態(tài)。
正常情況下,SlaveIORunning 和 SlaveSQLRunning 都是No,因?yàn)槲覀冞€沒(méi)有開(kāi)啟主從復(fù)制過(guò)程。使用start slave開(kāi)啟主從復(fù)制過(guò)程,然后再次查詢(xún)主從同步狀態(tài)show slave status \G;。
SlaveIORunning 和 SlaveSQLRunning 都是Yes,說(shuō)明主從復(fù)制已經(jīng)開(kāi)啟。此時(shí)可以測(cè)試數(shù)據(jù)同步是否成功。
主從復(fù)制排錯(cuò):
使用start slave開(kāi)啟主從復(fù)制過(guò)程后,如果SlaveIORunning一直是Connecting,則說(shuō)明主從復(fù)制一直處于連接狀態(tài),這種情況一般是下面幾種原因造成的,我們可以根據(jù) Last_IO_Error提示予以排除。
測(cè)試主從復(fù)制方式就十分多了,最簡(jiǎn)單的是在Master創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),然后檢查Slave是否存在此數(shù)據(jù)庫(kù)。
Master:
Slave:
最后讓我們來(lái)看一下,一個(gè) update 語(yǔ)句在節(jié)點(diǎn) A 執(zhí)行,然后同步到節(jié)點(diǎn) B的完整流程圖。
可以看到:主庫(kù)接收到客戶(hù)端的更新請(qǐng)求后,執(zhí)行內(nèi)部事務(wù)的更新邏輯,同時(shí)寫(xiě)入binlog。
備庫(kù)B跟主庫(kù)A之間維持了一個(gè)長(zhǎng)連接。主庫(kù)A內(nèi)部有一個(gè)線程,專(zhuān)門(mén)用于服務(wù)備庫(kù)B的這個(gè)長(zhǎng)連接。
一個(gè)事務(wù)日志同步的完整過(guò)程是這樣的:
對(duì)于以上關(guān)于如何搭建基于Docker的MySQL主從復(fù)制,大家是不是覺(jué)得非常有幫助。如果需要了解更多內(nèi)容,請(qǐng)繼續(xù)關(guān)注我們的行業(yè)資訊,相信你會(huì)喜歡上這些內(nèi)容的。
分享名稱(chēng):如何搭建基于Docker的MySQL主從復(fù)制
URL地址:http://chinadenli.net/article42/joeiec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、小程序開(kāi)發(fā)、網(wǎng)站排名、響應(yīng)式網(wǎng)站、定制開(kāi)發(fā)、App開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)