实现ubuntu中的mysql8和docker部署的mysql8主从同步
作者:互联网
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
@TOC
前言(MySQL版本8.0.28)
最近学习mysql主从搭建,看了好多教程都是在docker容器中创建mysql主机和从机的,但是我自己的主数据库是在ubuntu里面的不想再迁移到docker的容器中,所以把ubuntu中的mysql作为主机,把docker中的作为从机。
其中也是踩了很多坑,希望这篇文章对大家有用~~~
提示:以下是本篇文章正文内容,下面案例可供参考
一、配置主机
配置ubuntu中的mysql
cd /etc/mysql/
vim my.cnf
##在my.cnf中添加如下配置
[mysqld]
server-id=1 ## 同一局域网内要唯一
log-bin=master-bin ##二进制文件名称 【mysql8默认开启binlong】
binlog-format=ROW ##二进制日志格式 row,statement,mixed
配置好了之后,进入mysql查看日志文件。
SHOW MASTER STATUS;#查看二进制日志文件
查看文件日志文件之后记录file和position字段的值
此时一定一定一定不要再操作数据库了!!否则日志文件会更新会导致后面主从连接建立失败!!!!
最后,重启主机mysql服务
sudo service mysql restart
二、配置mysql从机
1.在docker中拉取mysql镜像,版本保持和你的主机mysql一致
sudo docker image pull mysql:8.0.28 #我的mysql是8.0.28的后面这个根据你的版本修改
2.创建mysql容器
- 以守护进程的方式运行mysql从机
docker run -d -i --name mysql-slave -e MYSQL_ROOT_PASSWORD=password -p 3306:3306 mysql:8.0.28 #密码为初始root账户的密码,设置之后请务必记住。
因为这里我的mysql主机是在ubuntu中,从机是在docker容器中,ip地址不一样所以端口号可以都设置成3306。
- 查看创建的mysql容器的ip地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称 or 容器id
- 测试从机是否创建成功
mysql -uroot -ppassword -h 容器ip
如果能够进入mysql则说明创建成功
3.配置mysql从机
docker exec -it mysql-slave bash
vim /etc/mysql/my.cnf
[mysqld]
server-id=2
log-bin=mysql-slave-bin
## 配置中继日志
relay_log=mysql-relay-bin
read_only=1 ## 设置为只读
这里如果提示bash: vim: command not found,则我们需要在docker内部安装vim工具,执行如下两行命令,然后进行上述操作。
apt-get update
apt-get install vim -y
到此从机配置已经完成,重启一下mysql容器
sudo docker container stop 容器名或容器id
sudo docker container start 容器名或容器id
- Docker中MySQL从机连接ubuntu中MySQL主机
mysql -uroot -ppassword -h 容器ip
之后执行
change master to master_host='主机ip', master_user='root', master_password='主机mysql密码', master_port=3306, master_log_file='主机的日志文件名称', master_log_pos=主机日志文件的position, master_connect_retry=30;
master_host :主机p,即是ubuntu的ip地址,利用命令ifconfig可得
master_user:写主机root用户就好,因为root权限多,操作方便
master_password:就是主机用户的密码,master_user用户写的谁,就是谁的密码
master_log_file:主机中查出来的File字段的值
master_log_pos:主机中查出来的Position的值
最后,开启从机服务
# 开启从机服务
$ start slave;
到此就配置完成了。
4.验证是否主从连接成功
# 展示从机服务状态
$ show slave status \G
验证成功!
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
总结
以上就是全过程啦,亲测有效!如果 最后的Slave_IO_Running,Slave_SQL_Running不全是YES的话就是连接失败了。解决方法的话…只能通过一一排查来解决问题,我的话是直接重新配置mysql从机,就ok啦,希望对大家有帮助!
标签:容器,mysql8,主机,ubuntu,从机,master,mysql,docker 来源: https://blog.csdn.net/weixin_50393852/article/details/123240282