使用Docker实现MySql主从同步(一主一从)

1.首先利用Docker拉取MySql最新镜像

Docker pull mysql

2.在linux中根目录下创建文件/home/username/tmp/mysql/conf/hmy.cnf、/home/username/tmp/mysql/data(也可以自己指定其他路径),而后利用运行mysql主服务器容器

docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -v /home/username/tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf -v /home/username/tmp/mysql/data:/var/lib/mysql -d mysql

3.以同样方式,在linux中根目录下创建文件/home/username/tmp/mysql2/conf/hmy.cnf、/home/username/tmp/mysql2/data(也可以自己指定其他路径),而后利用运行mysql从服务器容器。注意此时容器name为mysql2,-p端口指定3306:3307,意味liunx端口3307对应本容器mysql端口3306.

docker run --name mysql2 -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3307 -v /home/username/tmp/mysql2/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf -v /home/username/tmp/mysql2/data:/var/lib/mysql -d mysql

4.主库配置 

将挂载的hmy.cnf修改:

[mysqld]
skip-name-resolve
character_set_server=utf8
datadir=/var/lib/mysql
#指定服务id。在主从集群中,每个mysql该id不能相同
server-id=1
read-only=0
#指定开启远程连接
bind-address=0.0.0.0

重启MySQL服务器:systemctl restart mysqld

查看二进制日志坐标  show master status ;

其中file : 从哪个日志文件开始推送日志文件 position : 从哪个位置开始推送日志

binlog_ignore_db : 指定不需要同步的数据库

5.从库配置

修改配置文件hmy.cnf修改和主库类似,注意server-id要在整个集群中唯一

登录mysql,设置主库配置(8.0.23版本之后使用如下指令)

CHANGE MASTER TO MASTER_HOST='192.168.2.220', MASTER_PORT=3306,
MASTER_USER='root',MASTER_PASSWORD='123', 
MASTER_LOG_FILE='binlog.000009 ',MASTER_LOG_POS= 156 ;
#其中 MASTER_HOST为主机ip,MASTER_PORT为该容器对应的liunx端口,MASTER_USER为具有主从复制权限的主服务器用户,MASTER_LOG_FILE为之前在主服务器中查询的二进制文件,MASTER_LOG_POS代表目前二进制文件写到了那里,并从此处读(同步)

开启同步操作

start replica ; #8.0.22之后                                  start slave ; #8.0.22之前

查看主从同步状态

show replica status ; #8.0.22之后

如查询结果如下代表启动成功:

注:stop slave  停止主从同步服务               reset slave all; 重置主从同步服务

CHANGE MASTER TO MASTER_LOG_FILE='binlog.000002',MASTER_LOG_POS=984;修改二进制文件追踪位置。

后面我使用navicat进行连接mysql,报错:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon runnin

后面直接将navciat11更新到了16,成功连接,这个错误是该软件版本和mysql版本问题。

连接时可以主机输入该mysql容器的ip,以及liunx下对应端口以及均有主从复制权限的用户、密码即可。

若无法连接可以尝试使用SSH进行连接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值