目标:通过docker部署两个mysql容器,进行主主互备
准备:Centos7
第一步:安装docker
# yum install docker
# service docker start
# chkconfig docker on
第二步:检查mysql的镜像,并下载
# docker search mysql:5.7
# docker pull mysql:5.7
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/mysql 5.7 ae6b78bedf88 4 weeks ago 372 MB
第三步:开启两个mysql的容器
建立自定义的网络,用于两个容易互相通信
# docker network create --subnet=172.18.0.0/16
mynetwork
开启master01
# docker run -p 3308:3306 -p 22002:22 --name master01 -e MYSQL_ROOT_PASSWORD=123456 --net mynetwork --ip 172.18.0.2
-d mysql:5.7
开启master02
# docker run -p 3309:3306 -p 22003:22 --name master02 -e MYSQL_ROOT_PASSWORD=123456 --net mynetwork --ip 172.18.0.3
-d mysql:5.7
第三步:安装软件及修改配置
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a2e76f0faae1 mysql:5.7 "docker-entrypoint..." 26 hours ago Up 25 hours 33060/tcp, 0.0.0.0:22004->22/tcp, 0.0.0.0:3309->3306/tcp master02
1b6773fc8c3d mysql:5.7 "docker-entrypoint..." 26 hours ago Up 25 hours 33060/tcp, 0.0.0.0:22003->22/tcp, 0.0.0.0:3308->3306/tcp master01
进入master01容器
# docker exec -it 1b6773fc8c3d /bin/bash
root@1b6773fc8c3d:/# apt-get update
root@1b6773fc8c3d:/# apt-get install vim
root@1b6773fc8c3d:/# cd /etc/mysql/mysql.conf.d
root@1b6773fc8c3d:/# ls
mysqld.cnf
修改配置文件
root@1b6773fc8c3d:/# vi mysqld.cnf
添加的内容如下:
server-id=31
auto-increment-increment=2
auto-increment-offset=1
log-bin=/var/log/mysql/mysql-bin.log
binlog_format=mixed
relay-log=relay-bin
log-slave-updates
保存并重启mysql服务,这是容器会停止,再启动即可,命令 docker restart 容器id
同样的方法,进入master02容器,配置文件修改为
server-id=32
auto-increment-increment=2
auto-increment-offset=2 ### 这里要注意 offset是偏移量,保证不同的mysql主机生成的主键是不同的,避免主键冲突
log-bin=/var/log/mysql/mysql-bin.log
binlog_format=mixed
relay-log=relay-bin
log-slave-updates
保存并重启mysql服务。
第四步:创建同步账户,开启slave
1、进入master01容器
# mysql -u root -p
2、创建同步账户
mysql>grant replication slave,replication client on *.* to 'slave'@'%' identified by '123456';
mysql> flush privileges;
mysql> flush tables with read lock;
3、查看binlog的状态
mysql>show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 433 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.01 sec)
4、进入master02容器
# mysql -u root -p
5、创建同步账户
mysql>grant replication slave,replication client on *.* to 'slave'@'%' identified by '123456';
mysql> flush privileges;
mysql> CHANGE MASTER TO MASTER_HOST='172.18.0.2',MASTER_PORT=3308,MASTER_USER='slave',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=433;
mysql> start slave;
mysql> show slave status \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.18.0.2
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 3184
Relay_Log_File: relay-bin.000002
Relay_Log_Pos: 1346
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
看到 Slave_IO_Running: Yes Slave_SQL_Running: Yes 表示成功
7、查看master02 binlog的状态
mysql>show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 521 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.01 sec)
8、回到master01 并进入mysql控制台,创建同步账户
mysql> CHANGE MASTER TO MASTER_HOST='172.18.0.3',MASTER_PORT=3309,MASTER_USER='slave',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=521;
mysql> start slave;
mysql> show slave status \G
结束
笔者在实际操作过程中,一直互相通信不成功,主要原因是一开始没有指定IP,重新制定IP后就成功了,希望这篇文章对大家会有所帮助,谢谢