1 拉取镜像
1 | docker pull mysql:5.7.42 |
简单跑起来一下,成功之后,再删除它
1 | docker run -d --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.42 |
在执行docker run的时候如果添加–rm参数,则容器终止后会立刻删除。–rm参数和-d参数不能同时使用。
2 创建master
执行
1 | docker run -d --name mysql-master -v /root/mysql/master/conf:/etc/mysql/conf.d -v /root/mysql/master/data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.42 |
编辑配置文件
vim /root/mysql/master/conf/my.cnf
1 | [mysqld] |
进入master容器
1 | docker exec -it mysql-master /bin/bash |
添加从库权限
1 | alter user 'slave1'@'%' identified with mysql_native_password by '123456'; |
使用命令做一下验证:
1 select user, repl_slave_priv from mysql.user;
运行命令,记录参数,用于slave
1 | show master status; |
3 创建slave
1 | docker run -d --name mysql-slave1 -v /root/mysql/slave1/conf:/etc/mysql/conf.d -v /root/mysql/slave1/data:/var/lib/mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.42 |
其配置文件my.cnf中,要更改server-id为唯一的id
进入slave容器,并运行mysql。而后配置master
1 | change master to master_host='172.16.189.129',master_user='slave1',master_password='123456',master_port=3306,master_log_file='mysqlbin.000001',master_log_pos=154,master_connect_retry=30; |
如显示如下情况:
Slave_IO_Running: Yes
Slave_SQL_Running: No
表示slave不同步
解决方法(忽略错误,继续同步):
1、先停掉slave
1 | mysql> stop slave; |
2、跳过错误步数,后面步数可变
1 | mysql> set global sql_slave_skip_counter=1; |
3、再启动slave
1 | mysql> start slave; |
4、查看同步状态
1 | mysql> show slave status\G; |
4 测试
主库建库,然后查看从库是否自动也建库了。
5 注意
mysql8,应该要先创建slave账号
alter user ‘root‘@’%’ identified with mysql_native_password by ‘123456’;
创建slave账号
create user 'slave1'@'%';