下载MySQL镜像
docker pull mysql:5.7
启动MySQL
docker run -p 3339:3306 --name mysqlmaster -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
docker run -p 3340:3306 --name mysqlsalve -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
数据配置
docker exec -it 627a2368c865 /bin/bash
在编辑配置文件的时候需要现在容器中下载vim,否则无法使用编辑功能。
apt-get update
apt-get install vim
先进入 主数据库 /etc/mysql文件夹,使用vim my.cnf添加配置信息
[mysqld]
# 在一个局域网内需要唯一
server-id=1
# 开启二进制日志功能
log-bin=mysql-bin
重启mysql service mysql restart,重启mysql会导致Docker容器也重启, docker start mysqlmaster
在Master数据库需要创建一个同步的用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
再修改 从数据库
[mysqld]
server-id=2
# 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
# relay_log配置中继日志
relay_log=edu-mysql-relay-bin
链接Master和Slave
在Master数据库输入 show master status;
在Slave数据库中需要使用到File和Position的值,在这一步之后,如果操作了Master数据库,会导致这两个字段变更。
在Slave执行连接操作。
change master to master_host='ip', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000002', master_log_pos= 5577, master_connect_retry=30;
开启主从同步过程
start slave
在正常情况下,就可以进行主从复制了。
无法同步问题排查
在从库查询同步状态 show slave status
Slave_SQL_Running和Slave_IO_Running为no导致无法同步
如果 Slave_SQL_Running:no
stop slave;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;
start slave;
使用show slave status 查看是否变为 yes
如果Slave_IO_Running:no
查询助数据库状态 show master status查看File
在Slave上
slave stop;
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=0;
slave start;
show slave status;