Docker搭建MySQL主從復(fù)制

環(huán)境準(zhǔn)備

OS:CentOS7.5
Docker:18.06.1-ce
MySQL鏡像:5.7
在服務(wù)器上安裝docker,運(yùn)行兩個MySQL容器,實(shí)現(xiàn)主從復(fù)制

安裝Docker

詳見Docker部署

安裝MySQL

拉取鏡像

[root@doc ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
fc7181108d40: Pull complete 
787a24c80112: Pull complete 
a08cb039d3cd: Pull complete 
4f7d35eb5394: Pull complete 
5aa21f895d95: Pull complete 
a742e211b7a2: Pull complete 
0163805ad937: Pull complete 
62d0ebcbfc71: Pull complete 
559856d01c93: Downloading  45.67MB/83.75MB
c849d5f46e83: Download complete 
f114c210789a: Download complete 

運(yùn)行master節(jié)點(diǎn)

[root@doc ~]# docker run -d --name master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /root/data/mysql/master:/var/lib/mysql mysql:5.7
fea899e5c07c39ea251abe97ceb21aac71a138c8a4009bc1170eff9ed5df8b79
[root@doc ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
fea899e5c07c        mysql:5.7           "docker-entrypoint.s…"   4 seconds ago       Up 3 seconds        0.0.0.0:3306->3306/tcp, 33060/tcp   master

使用navicat連接,創(chuàng)建主容器的復(fù)制賬號

GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' identified by 'backup';
show grants for 'backup'@'%';

拷貝容器的配置文件到宿主機(jī)

[root@doc ~]# docker cp master:/etc/mysql/mysql.conf.d/mysqld.cnf /root/conf/mysql/master/

在配置文件[mysqld]節(jié)點(diǎn)最后添加

log-bin=mysql-bin
server-id=1
# log-bin=mysql-bin 使用binary logging,mysql-bin是log文件名的前綴
# server-id=1 唯一服務(wù)器ID,非0整數(shù),不能和其他服務(wù)器的server-id重復(fù)

將修改后的文件覆蓋docker中master的配置文件,并重啟生效

[root@doc master]# docker cp /root/conf/mysql/master/mysqld.cnf master:/etc/mysql/mysql.conf.d/mysqld.cnf
[root@doc master]# docker restart master
master
[root@doc master]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
c852713a7701        mysql:5.7           "docker-entrypoint.s…"   About an hour ago   Up 2 seconds        0.0.0.0:3306->3306/tcp, 33060/tcp   master

運(yùn)行slave節(jié)點(diǎn)

  • 啟動salve容器
[root@doc ~]# docker run -d --name slave -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /root/data/mysql/slave:/var/lib/mysql mysql:5.7
e1f4cd6cdf4b091cd730c800d2802632b708f6a7aedc35af185d5f0e8ae408da
[root@doc ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
e1f4cd6cdf4b        mysql:5.7           "docker-entrypoint.s…"   4 seconds ago       Up 3 seconds        33060/tcp, 0.0.0.0:3307->3306/tcp   slave
c852713a7701        mysql:5.7           "docker-entrypoint.s…"   About an hour ago   Up 8 minutes        0.0.0.0:3306->3306/tcp, 33060/tcp   master
  • 拷貝slave節(jié)點(diǎn)配置文件,修改后覆蓋到docker,重啟生效
[root@doc ~]# docker cp slave:/etc/mysql/mysql.conf.d/mysqld.cnf /root/conf/mysql/slave/
[root@doc slave]# vi mysqld.cnf 
最后添加
log-bin=mysql-bin
server-id=2
覆蓋到docker中的slave容器
[root@doc ~]# docker cp /root/conf/mysql/slave/mysqld.cnf slave:/etc/mysql/mysql.conf.d/mysqld.cnf
[root@doc ~]# docker restart slave
slave
[root@doc ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
e1f4cd6cdf4b        mysql:5.7           "docker-entrypoint.s…"   13 minutes ago      Up 3 seconds        33060/tcp, 0.0.0.0:3307->3306/tcp   slave
c852713a7701        mysql:5.7           "docker-entrypoint.s…"   About an hour ago   Up 21 minutes       0.0.0.0:3306->3306/tcp, 33060/tcp   master
  • 配置主從復(fù)制
    使用navticat連接slave后執(zhí)行如下SQL
CHANGE MASTER TO 
MASTER_HOST='39.100.43.154',  #填Navicat連接配置中的ip應(yīng)該就可以
MASTER_PORT=3306, #master容器端口
MASTER_USER='backup',  #同步賬號的用戶名
MASTER_PASSWORD='backup';  #同步賬號的密碼
START SLAVE;

檢查配置是否成功

show slave status;
image.png

看到上圖所示,表示主從復(fù)制已成功,測試功能
現(xiàn)在master容器新建數(shù)據(jù)庫


image.png

然后到slave容器中刷新下,即可看到新建的庫


image.png
?著作權(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)容

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