数据库
首页 > 数据库> > 实现ubuntu中的mysql8和docker部署的mysql8主从同步

实现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容器

  1. 以守护进程的方式运行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。
  1. 查看创建的mysql容器的ip地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称 or 容器id
  1. 测试从机是否创建成功
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
  1. 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的值

获取主机ip地址
最后,开启从机服务

# 开启从机服务
$ 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