提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
@TOC
最近学习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
sudo docker image pull mysql:8.0.28 #我的mysql是8.0.28的后面这个根据你的版本修改
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。
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称 or 容器id
mysql -uroot -ppassword -h 容器ip
如果能够进入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
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;
到此就配置完成了。
# 展示从机服务状态 $ show slave status \G
验证成功!
Slave_IO_Running: Yes Slave_SQL_Running: Yes
以上就是全过程啦,亲测有效!如果 最后的Slave_IO_Running,Slave_SQL_Running不全是YES的话就是连接失败了。解决方法的话…只能通过一一排查来解决问题,我的话是直接重新配置mysql从机,就ok啦,希望对大家有帮助!