拉取mysql:5.7镜像到本地
docker pull mysql:5.7
docker images # 查看是否拉取成功,成功的话在列表内会看到mysql相关内容
注意事项
使用下面的操作内容前需要了解,必须使用提供的命令创建相同的文件夹结构,
才能确保以下每条命令的正确执行。如果自己需要修改文件夹名称,请自行修改相关命令。
创建文件夹
创建文件夹存放启动容器时需要用到的配置文件
mkdir -p /home/test/mysql #进入到home目录
mkdir -p /home/test/mysql/master
mkdir -p /home/test/mysql/slave
创建配置文件
使用tee命令配合EOF可以直接创建文件并写入内容。
主节点配置文件:
tee /home/test/mysql/master/my.cnf <<-'EOF'
[mysqld]
server-id=1
log-bin = mysql-bin
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=information_schema
max_connections=1024
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
EOF
从节点配置文件:
tee /home/test/mysql/slave/my.cnf <<-'EOF'
[mysqld]
server-id=2
max_connections=1024
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
EOF
准备好了配置文件,开始启动容器
docker run -p 3317:3306 --restart always --name mysqlmaster-t \
-v /home/test/mysql/master:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
docker run -p 3318:3306 --restart always --name mysqlslave-t \
-v /home/test/mysql/slave:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
解释:
使用 -v 命令可以把宿主机的文件夹挂载到容器内,例:
-v /home/test/mysql/master:/etc/mysql/conf.d
意思是将主机/home/test/mysql/master文件夹挂载到容器的 /etc/mysql/conf.d文件夹
这样你修改/home/test/mysql/master文件内的相关文件时,
容器内/etc/mysql/conf.d文件夹内的相关文件也会同时修改。
可以把宿主机的/home/test/mysql/master文件夹和容器内/etc/mysql/conf.d文件夹看成同一个文件夹
我们的目的是把刚才创建的主节点、从节点的配置文件挂载到容器内。
使启动容器时mysql读取的配置文件是我们准备好的,而不是默认的。
而我们拉取的mysql:5.7镜像的mysql配置文件就是容器内/etc/mysql/conf.d文件夹下的my.cnf文件
启动完容器,开始配置主从复制
用navicat等可视化工具连接mysql进行主从复制的相关操作
1、在Master数据库创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';
2、在Master节点执行命令:
show master status; # 查看主节点的状态
记录查询到数据中File和Position字段的值后面将会用到,
在后面的操作完成之前,需要保证Master节点不能做任何数据操作,
否则将会引起状态变化,File和Position字段的值变化
4、在slave节点输入以下命令,把它连到master节点:
change master to master_host='172.17.0.12',
master_port=3306,
master_user='slave',
master_password='123456',
master_log_file='mysql-bin.000003',
master_log_pos=696;
解释:
这里需要使用mysql主节点容器的真是ip和端口号
如果要使用主机ip进行配置需要在防火墙中开放端口号
5、开启从节点的主从复制状态:
start slave
6、查看是否开启成功:
show slave status; # 查看从节点的状态
Slave_IO_Running、Slave_SQL_Running 两个字段全部为yes,即为成功
如果两个没有全部yes。那么需要查看报错信息。
Last_IO_Error、Last_SQL_Error 这两个字段,或者与error相关的字段内会有报错信息。