docker 实现 mysql 主从复制 请参考
一 使用docker拉取镜像,创建两个容器
1.docker命令:docker pull mysql:5.7.25
2.创建容器,并且指定mysql的配置文件(注意两个的配置文件不一样)
docker run --name mysql_01 -v /root/docker/mysql01:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d -p3306:3306 mysql:5.7.25
docker run --name mysql_02 -v /root/docker/mysql02:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d -p3307:3306 mysql:5.7.25
参数说明:
--name 给容器取名字,不要重复就可以了
-v 将宿主机的文件夹挂载给容器 这里可以查看文档
地址:https://hub.docker.com/_/mysql
-e 设置环境变量
-d 后台运行
-p 端口映射,前面的是宿主机的端口
两个配置文件内容如下:
主机:
[mysqld]
log-bin=mysql-bin #开启二进制日志
server-id=1 #设置server-id
character_set_server=utf8
init_connect='SET NAMES utf8'
从机:
[mysqld]
# log-bin=mysql-bin #开启二进制日志
server-id=2 #设置server-id
character_set_server=utf8
init_connect='SET NAMES utf8'
如果配置文件是后面写的就需要重新启动mysql
3.就可以看到两个mysql容器已经启动
4.使用数据库工具连接可以看到,全部正常
二 配置主从机器
1.主机:
1)创建用户给从机用于登录主机
CREATE USER '用户名'@'从机ip' IDENTIFIED BY '指定密码'; GRANT REPLICATION SLAVE ON *.* TO '用户名'@'从机ip'; FLUSH PRIVILEGES; // 写入刚刚的设置
2)查看主机的二进制文件名字和位置
2从机:登录mysql执行下面的语句
mysql> CHANGE MASTER TO
-> MASTER_HOST='', # 主服务器ip
-> MASTER_USER='', # 主服务器登陆名
-> MASTER_PASSWORD='YourPassword9#', # 主服务器登陆密码
-> MASTER_LOG_FILE='mysql-bin.000001', # 二进制文件的名称
-> MASTER_LOG_POS=2034; # 二进制文件的位置 注意这里不要写错 要和主机的位置保持一致
- 启动 slave 同步进程
- start slave;
- 查看状态 show slave status\G;
这两个都是yes 就说名ok了,就可以试试了。
如果是不是YES的解决办法:
1.Slave_SQL_Runing:NO;
1)stop slave;
2)SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
3)start slave;
2.Slave_IO_Running:NO;
1)stop slave;
2)检查主机和从机的二进制文件相关信息是否正确【1】主机show master status\G; 【2】从机show slave status\G;
3)CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000026', MASTER_LOG_POS=0; 修改从机信息和主机一样
4)start slave