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
2
3
4
[mysqld]                                                                                                                                                                         
server-id = 1
binlog_format = STATEMENT
log_bin = mysql_bin #没有会报错

进入master容器

1
2
docker exec -it mysql-master /bin/bash
mysql -uroot -p

添加从库权限

1
2
3
alter user 'slave1'@'%' identified with mysql_native_password by '123456';   
grant replication slave on *.* to 'slave1'@'%';
flush privileges;

使用命令做一下验证:

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
2
3
4
5
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;

start slave;

Show slave status\G;

如显示如下情况:

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'@'%';