拉取mysql:5.7镜像到本地
docker pull mysql:5.7
docker images # 查看是否拉取成功
这是系统内一个正常的可数据持久化存储的文件夹
cd /home #进入到home目录
mkdir docker #创建docker文件夹,存放后续所有要在docker中启动项目
cd docker
mkdir mysql #创建mysql文件夹,存放在docker中启动mysql时需要用到文件
cd mysql
mkdir master slave
在master文件夹下新建文件my.cnf
cd master
vi my.cnf
然后写入以下内容:
[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
在slave文件夹下新建文件my.cnf
cd ../slave # 返回上级并进入slave目录
vi my.cnf
然后写入以下内容:
[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
id要修改成不一致的
配置文件挂载到容器
docker mysql主从复制
cd ../ # 返回到mysql目录
docker run -p 3315:3306 --restart always --name mysqlmaster -v $PWD/master:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
docker run -p 3316:3306 --restart always --name mysqlslave -v $PWD/slave:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
配置主从之前需要关闭防火墙或者把主节点端口号开放出来
永久开放主节点端口的命令:
参考文章
https://blog.csdn.net/zx110503/article/details/78787483
firewall-cmd --get-active-zones #运行完成之后,可以看到zone名称
firewall-cmd --zone=public --add-port=3315/tcp --permanent #永久开发端口的命令
firewall-cmd --reload # 重启防火墙
firewall-cmd --query-port=3315/tcp #查看是否开启成功
然后就可用navicat等可视化工具连接mysql进行下一步的操作
下一步在Master数据库创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,
用于在主从库之间同步数据。
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';
在Master进入mysql,执行show master status;
File和Position字段的值后面将会用到,在后面的操作完成之前,需要保证Master库不能做任何操作,
否则将会引起状态变化,File和Position字段的值变化
在slave节点输入以下命令,把它连到master节点:
change master to master_host='192.168.1.97',
master_port=3315,
master_user='slave',
master_password='123456',
master_log_file='mysql-bin.000003',
master_log_pos=696;
开启复制状态
start slave
查看是否成功
show slave status