1.安装主从mysql服务
docker run -p 3339:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 docker run -p 3340:3306 --name mysql-slave1 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
2.配置master主机
(1)docker exec -it mysql-master /bin/bash
(2)vim /etc/mysql/my.cnf配置如下 内容
[mysqld] ## 同一局域网内注意要唯一 server-id=100 ## 开启二进制日志功能,可以随便取(关键) log-bin=mysql-bin (3)重启mysql服务使配置生效:service mysql restart (4)重启容器:docker start mysql-master (5)数据库创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据 mysql -uroot -p123456 CREATE USER 'slave'@'%' IDENTIFIED BY '123456'; GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%'; flush privileges;
3.配置slave从机
(1)docker exec -it mysql-slave1 /bin/bash (2)vim /etc/mysql/my.cnf配置如下 内容 [mysqld] ## 同一局域网内注意要唯一 server-id=101 ## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用 log-bin=mysql-slave-bin ## relay_log配置中继日志 relay_log=mysql-relay-bin (3)重启mysql服务使配置生效:service mysql restart (4)重启容器:docker start mysql-slave1
4.链接mater和slave
(1)在Master进入mysql,执行show master status; (2)在Slave进入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=617, master_connect_retry=30; 命令分析: master_host='172.17.0.2':主机容器ip地址,通过docker inspect mysql-master查看 master_user='slave':主机数据同步用户账号 master_password='123456':主机数据同步用户密码 master_port=3306:主机容器内端口,非映射到宿主机的端口 master_log_file='mysql-bin.000001':指定 Slave 从哪个日志文件开始复制数据,通过在master执行show master status查看 master_log_pos=617:从哪个 Position 开始读,通过在master执行show master status查看 master_connect_retry=30:如果连接失败,重试的时间间隔,单位是秒,默认是60秒 (3)开启主从复制,SlaveIORunning 和 SlaveSQLRunning 都是No,因为我们还没有开启主从复制过程。使用start slave;开启主从复制过程,然后再次查询主从同步状态show slave status G; (4)show slave status G;查看Last_IO_Errno、Last_IO_Error、Last_SQL_Errno、Last_SQL_Error、SlaveIORunning 、SlaveSQLRunning等指标,查看主从复制是否配置成功 (5)主从复制排错: 网络不通(检查ip,端口) 密码不对(检查是否创建用于同步的用户和用户密码是否正确) pos不对(检查Master的 Position)
5.测试主从复制功能,测试主从数据库是否同步,简单的可以用navicat测试
注意:
1.docker容器安装vim
apt-get update
apt-get install -y vim
2.这里只配置一个从机,如若需要可以配置多个从机,配置与mysql-slave1一致