赞
踩
docker pull mysql:5.6.43
# 主 docker run -itd --name mysql_master --restart=always \ -p 28002:3306 \ -e mysqld \ -e MYSQL_ROOT_PASSWORD=cloud \ -e MYSQL_USER=cloud \ -e MYSQL_PASSWORD=cloud \ -v /opt/mysql_master/data:/var/lib/mysql \ -d mysql:5.6.43 # 从 docker run -itd --name mysql_slave --restart=always \ -p 28003:3306 \ -e mysqld \ -e MYSQL_ROOT_PASSWORD=cloud \ -e MYSQL_USER=slave \ -e MYSQL_PASSWORD=slave \ -v /opt/mysql_slave/data:/var/lib/mysql \ -d mysql:5.6.43 # /opt/mysql_master/data 在当前服务器上传创建文件夹 # /opt/mysql_slave/data 在当前服务器上传创建文件夹
# 进入 master终端 docker exec -it mysql_master /bin/bash # 进入etc/mysql/文件目录下 cd etc/mysql/ # 更新命令 apt-get update apt-get install vim # vim 修改 my.cnf vim my.cnf # 修改内容 ## 同一局域网内注意要唯一 ## 开启二进制日志功能,可以随便取(关键) [mysqld] server_id=100 log-bin=mysql-bin # 重启mysql服务 service mysql restart # 重启容器 docker restart mysql_master # 进入容器 docker exec -it mysql_master /bin/bash # 连接mysql mysql -u root -p cloud # 创建用户 # 如果出现ERROR 1396 (HY000): Operation CREATE USER failed for 'slave'@'%' drop user 'slave'@'%'; flush privileges; #否则就直接执行 CREATE USER 'slave'@'%' IDENTIFIED BY 'slave'; GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
# 进入 slave终端 docker exec -it mysql_slave /bin/bash # 进入etc/mysql/文件目录下 cd etc/mysql/ # vim 修改 my.cnf apt-get update apt-get install vim vim my.cnf [mysqld] ## 设置server_id,注意要唯一 ## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用 ## relay_log配置中继日志 server-id=101 log-bin=mysql-slave-bin relay_log=edu-mysql-relay-bin # 重启mysql服务 service mysql restart # 重启容器 docker restart mysql_slave # 进入容器 docker exec -it mysql_slave /bin/bash # 连接mysql mysql -u root -p cloud
show master status;
# 查看容器的固定ip docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql_master docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql_slave # master_port:Master的端口号,指的是容器的端口号 用的外网IP # master_user:用于数据同步的用户 # master_password:用于同步的用户的密码 # master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值 # master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值 # master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒 change master to master_host='47.104.152.19', master_user='slave', master_password='slave', master_port=28002, master_log_file='mysql-bin.000002', master_log_pos= 512, master_connect_retry=30; # 在Slave 中的mysql终端执行show slave status \G;用于查看主从同步状态 show slave status \G; # 开启主从复制 start slave; # 如果出现ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository reset slave;
# master
root: slave
password: slave
# slave
root:root
password: cloud
使用start slave开启主从复制过程后,如果SlaveIORunning一直是Connecting,则说明主从复制一直处于连接状态,这种情况一般是下面几种原因造成的,我们可以根据 Last_IO_Error提示予以排除。
网络不通
检查ip,端口
密码不对
检查是否创建用于同步的用户和用户密码是否正确
pos不对
检查Master的 Position
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。