标签:bin 容器 主从复制 slave Mysql master mysql Docker docker
利用Docker搭建主从服务器
首先拉取docker镜像,我们这里使用5.7版本的mysql:
docker pull mysql:5.7
然后使用此镜像启动容器,这里需要分别启动主从两个容器
Master(主):
docker run -p 3311:3306 --name mysql3311 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
Slave(从):
docker run -p 3312:3306 --name mysql3312 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
使用docker ps命令查看正在运行的容器:
接下来进入mysql3311(主服务器)容器中给mysql设置用户、赋权限、对外访问等
docker exec -it f08b1269478f /bin/bash
进入mysql
mysql -uroot -p 密码为刚才初始设置的root
然后设置对外访问权限,和创建一个用于备份的用户slave,并赋予相关的权限(CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON . TO 'slave'@'%';)。
执行exit退出mysql,执行cd /etc/mysql切换到/etc/mysql目录下,然后vim my.cnf对my.cnf进行编辑,如果碰到报出bash: vim: command not found可以执行apt-get update和apt-get install vim来安装vim命令,接着可以修改my.cnf文件了,在文件中添加
[mysqld]
## 同一局域网内注意要唯一
server-id=100
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
保存退出,配置完成之后,需要重启mysql服务使配置生效。使用service mysql restart完成重启。重启mysql服务时会使得docker容器停止,我们还需要docker start mysql3311启动容器。再次进入mysql3311容器中进入mysql,执行show master status;看到图中File和Position字段的记下,后面从服务器会用到。
以上主服务已经配置好了,还有一个就要查看下主服务的ip(docker inspect 容器ID | grep IPAddress)
从服务配置,mysql的配置都可以参考主服务里的配置,只是my.cnf配置文件不一样,在Slave配置文件my.cnf中添加如下配置:
[mysqld]
## 设置server_id,注意要唯一
server-id=101
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=slave-mysql-relay-bin
保存退出并重启服务及容器。
再次进入mysql3312(从服务),进入mysql执行:
change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 775, master_connect_retry=30;
使用start slave开启主从复制过程,然后查询主从同步状态show slave status \G;
,这2个值都为YES则说明已经配置成功了,如果其中一个为no可以往下查看 ,
使用start slave开启主从复制过程后,如果SlaveIORunning一直是Connecting,则说明主从复制一直处于连接状态,这种情况一般是下面几种原因造成的,我们可以根据 Last_IO_Error提示予以排除。
1.网络不通
检查ip,端口
2.密码不对
检查是否创建用于同步的用户和用户密码是否正确
3.pos不对
检查Master的 Position
标签:bin,容器,主从复制,slave,Mysql,master,mysql,Docker,docker 来源: https://blog.51cto.com/dking/2543043
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。