欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

docker下MySQL的主从复制

程序员文章站 2022-05-03 12:07:55
MySql的主从复制 sudo docker pull MySQL:5.7 拉取MySQL的镜像文件(版本号为 5.7) sudo docker run -p 3339:3306 --name master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 主数据 ......

mysql的主从复制

sudo docker pull mysql:5.7 拉取mysql的镜像文件(版本号为 5.7)

sudo docker run -p 3339:3306 --name master -e mysql_root_password=123456 -d mysql:5.7 主数据库

sudo docker run -p 3340:3306 --name slave -e mysql_root_password=123456 -d mysql:5.7 从数据库


执行完 俩个命令 创建的容器默认启动

docker ps 查看当前正在运行的 容器

docker exec -it master bash 进入master容器

cd etc/mysql 切换到 mysql所在的路径

vi my.cnf 对my.cnf 进行编辑 可能会报错 原因是 没有 容器本身没有安装 vim

安装 vim

apt-get update

apt-get install vim


安装成功后 vim my.cnf


对文件进行编辑

[mysqld]
## 同一局域网内注意要唯一
server-id=100
## 开启二进制日志功能
log-bin=mysql-bin


配置完成后需要重新启动容器 service mysql restart
重启mysql服务时会使得docker容器停止,我们还需要docker start master启动容器。
重启之后 再次进入容器
mysql -uroot -p123456
进入数据库服务

mysql> create user 'slave'@'%' identified by '123456';

mysql> grant replication slave, replication client on *.* to 'slave'@'%';

创建用来同步的用户,并且给用户添加俩个权限 用来主从库之间的同步

mysql> show master status; 查看 master的状态

记住 file 下的文件名字 position 位置

退出 master 容器

docker exec -it slave bash 进入slave所组织容器
cd etc/mysql 切换到 mysql所在的路径

vi my.cnf 对my.cnf 进行编辑 可能会报错 原因是 没有 容器本身没有安装 vim

安装 vim

apt-get update

apt-get install vim


安装成功后 vim my.cnf


对文件进行编辑

[mysqld]
## 设置server_id,注意要唯一
server-id=101
## 开启二进制日志功能,以备slave作为其它slave的master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin


配置完成后需要重新启动容器 service mysql restart
重启mysql服务时会使得docker容器停止,我们还需要docker start master启动容器。
重启之后 再次进入容器
mysql -uroot -p123456

mysql> change master to master_host='master容器的ip', master_user='master容器中创建的用于主从同步的用户', master_password='账户的密码', master_port=3306, master_log_file='master下查看的file', master_log_pos= position文件位置, master_connect_retry=30;

执行完之后
mysql>show slave status \g; 查看主从同步状态
slave_io_running:no
slave_sql_running:no
还未开启主从复制状态

mysql> start slave;

再次查看状态
mysql>show slave status \g;

slave_io_running:yes
slave_sql_running:yes

即为开启主从复制 成功

若依然为no 可尝试 先exit 退出mysql服务 然后 mysql -uslave -p123456 -h127.17.0.2
先使用master中设置的,用于主从同步的用户
启动mysql服务后 exit
再次 使用默认用户 mysql -uroot -p123456 启动mysql服务

mysql>stop slave;
mysql>start slave;
mysql>show slave status \g; 再次查看状态

俩个全为yes 主从复制即为成功