提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
@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
SHOW MASTER STATUS;#查看二进制日志文件
最后,重启主机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 ## 设置为只读
apt-get update
apt-get install vim -y
到此从机配置已经完成,重启一下MysqL容器
sudo docker container stop 容器名或容器id
sudo docker container start 容器名或容器id
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啦,希望对大家有帮助!