轉(zhuǎn)~基于 Docker 搭建 MySQL 主從復(fù)制

作者:秋田君

鏈接:https://my.oschina.net/u/3773384/blog/1810111

摘要: 本篇博文相對簡單,因?yàn)槭浅醮问褂肈ocker,MySQL的主從復(fù)制之前也在Centos環(huán)境下搭建過,但是也忘的也差不多了,因此本次嘗試在Docker中搭建。

本篇博文相對簡單,因?yàn)槭浅醮问褂肈ocker,MySQL的主從復(fù)制之前也在Centos環(huán)境下搭建過,但是也忘的也差不多了,因此本次嘗試在Docker中搭建。根據(jù)網(wǎng)上教程走還是踩了一些坑,不過所幸最終搭建成功,因此記錄下來,避免以后踩了重復(fù)的坑。

搭建環(huán)境

Centos 7.2 64位

MySQL 5.7.13

Docker 1.13.1

接下來,我們將會在一臺服務(wù)器上安裝docker,并使用docker運(yùn)行三個MySQL容器,分別為一主兩從。

安裝docker

執(zhí)行命令

如果有提示,一路y下去

安裝成功啟動Docker后,查看版本

出現(xiàn)版本信息,則安裝成功

啟動Docker

啟動Docker并設(shè)置為開機(jī)自啟動

安裝MySQL

使用Docker拉取MySQL鏡像

運(yùn)行主容器

--name 為容器指定名稱,這里是master

-p 將容器的指定端口映射到主機(jī)的指定端口,這里是將容器的3306端口映射到主機(jī)的3306端口

-e 設(shè)置環(huán)境變量,這里是指定root賬號的密碼為root

-d 后臺運(yùn)行容器,并返回容器ID

mysql:5.7.13 指定運(yùn)行的mysql版本

檢驗(yàn)是否啟動成功

docker ps -a 顯示所有的容器,包括未運(yùn)行的

[root@VM_0_17_centos ~]# docker ps -a

ee86c19336f8? ? ? ? mysql:5.7.13? ? ? ? "docker-entrypoint..."? About an hour ago? Up About an hour? ? 0.0.0.0:3306->3306/tcp? master

注意,是UP狀態(tài),表示正在運(yùn)行中

開放3306端口

--permanent 永久開啟,避免下次開機(jī)需要再次手動開啟端口

使用Navicat連接測試

MySQL主容器已經(jīng)啟動成功

創(chuàng)建主容器的復(fù)制賬號

使用Navicat友好的圖像化界面執(zhí)行SQL

出現(xiàn)如下信息表示授權(quán)成功

修改MySQL配置環(huán)境

創(chuàng)建配置文件目錄

目錄結(jié)構(gòu)如下

/usr/local/mysql/master

/usr/local/mysql/slave1

/usr/local/mysql/slave2

拷貝一份MySQL配置文件

進(jìn)到master目錄下,已存在拷貝的my.cnf

修改my.cnf,在 [mysqld] 節(jié)點(diǎn)最后加上后保存

log-bin=mysql-bin 使用binary logging,mysql-bin是log文件名的前綴

server-id=1 唯一服務(wù)器ID,非0整數(shù),不能和其他服務(wù)器的server-id重復(fù)

將修改后的文件覆蓋Docker中MySQL中的配置文件

重啟 mysql 的docker , 讓配置生效

啟動后,重新測試連接,連接成功表示主容器配置成功

運(yùn)行MySQL從容器

首先運(yùn)行從容器

與主容器相似,拷貝配置文件至slave1目錄修改后覆蓋回Docker中

別忘記,重啟slave1容器,使配置生效

配置主從復(fù)制

使用Navicat連接slave1后新建查詢,執(zhí)行以下SQL

MASTER_HOST 填Navicat連接配置中的ip應(yīng)該就可以

MASTER_PORT 主容器的端口

MASTER_USER 同步賬號的用戶名

MASTER_PASSWORD 同步賬號的密碼

檢查是否配置成功

Slave_IO_State 如果是Waiting for master to send event,那么就成功一半了,如果是Connecting to master,基本就是配置失敗了,建議重新檢查下配置,具體失敗的原因可以查看日志追蹤

我遇到的是MASTER_USER和MASTER_PASSWORD是否手打輸錯了,貼出錯誤日志

2018-05-10T02:57:00.688887Z 11 [ERROR] Slave I/O for channel '': error connecting to master 'bakcup@ip:3306' - retry-time: 60? retries: 2, Error_code: 1045

2018-05-10T02:58:00.690476Z 11 [ERROR] Slave I/O for channel '': error connecting to master 'bakcup@ip:3306' - retry-time: 60? retries: 3, Error_code: 1045

注意看日志中的bakcup,解決方法如下

接著上文,我們說成功一半,并沒有說成功了,那么另一半在于Slave_IO_Running與Slave_SQL_Running

如果都是Yes,那么恭喜你,可以測試主從復(fù)制的效果了,如果有一個不是Yes,一半是重啟從容器后,事務(wù)回滾引起的,那么給出解決方法如下

執(zhí)行后,再次觀察三個關(guān)鍵字段應(yīng)該就都沒問題了

至此,一主一從已經(jīng)搭建完成,再添加從實(shí)例的方式與上文一致,這里就不在贅述了。

測試主從復(fù)制

首先,在主實(shí)例中創(chuàng)建一個測試數(shù)據(jù)庫

打開(刷新)從實(shí)例,可見test庫已存在

在test庫中創(chuàng)建一個表t_test,添加一個id測試字段

向表中添加幾個數(shù)據(jù)

刷新從庫,可見t_test表及其中1、2、3、4數(shù)據(jù)已存在

至此,一個具備主從復(fù)制的一主兩從的MySQL就已搭建完成。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 做微商以來,總會時不時有人問我,有沒有賺到錢???賺了多少啦? 我會說,還好,還好。 和什么群體接觸,你就會慢慢成為...
    米修_b10e閱讀 415評論 0 0
  • 1、我們經(jīng)歷著生活中突然降臨的一切,毫無防備,就像演員進(jìn)入初排。如果生活中的第一次彩排便是生活本身,那生活有什么價...
    楊一說閱讀 295評論 0 1
  • 說實(shí)話,這種片子一點(diǎn)都不討喜——生活有那么多光鮮的美好的,一定要把人華麗袍子的發(fā)霉的、長斑的、發(fā)臭的里子翻出來給眾...
    YuanYuan_SH閱讀 986評論 0 0
  • 第三組 肖閆閆 對于一個缺乏毅力的人,真的沒有想到,我走過了90天的踐行,雖然其中有很多不完美,例如很...
    tigerchow閱讀 231評論 0 0

友情鏈接更多精彩內(nèi)容