搭建主从复制mysql(docker中)

1、搭建主库

#创建目录
mkdir /data/mysql/master01
如果不存在:mkdir /data/mysql/master01 -p
#进入master01目录
cd /data/mysql/master01

#创建conf和data文件夹 用来存放配置和数据
mkdir conf data

#给文件夹授权
chmod 777 * -R

#创建配置文件
cd /data/mysql/master01/conf
vim my.cnf

#输入如下内容
[mysqld]
#开启二进制日志

log-bin=mysql-bin
#服务id,不可重复
server-id=1
#创建并运行容器
docker run --name=mysql-master01 -v /data/mysql/master01/data:/var/lib/mysql -v /data/mysql/master01/conf:/etc/my.cnf.d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
#创建同步账户以及授权 账户wlwpass 密码wlwpass

 create user 'wlwpass'@'%' identified by 'wlwpass';






flush privileges;


 解决错误:

修改my.conf文件

vim /data/mysql/master01/conf/my.conf

文件后添加:

sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO ,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

#重启mysql服务并打印日志

docker restart mysql-master01 && docker logs -f mysql-master01

再重新flush privileges;

但是我还是报错,于是:

show variables like '%sql_mode%';
set sql_mode=(select replace(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

 

 show master status;

 发现File和Position为空值

 发现日志没打开

vim /data/mysql/master01/conf/my.conf

log-bin配置项表示binlog的base name,产生的日志文件名称类似,mysql-bin.00001,mysql-bin.00002,mysql-bin.00003。

重启mysql

如果使用了GTID(global transaction ID),Executed_Gtid_Set表示已经在这个master上执行的GTID集合,与这个server上的系统变量gtid_executed 含义相同。

如果该server是slave,则执行show slave status中是输出的对应列Executed_Gtid_Set,含义也相同。


以上还是解决不了打开不了日志,用下面方法

docker exec mysql-master01 bash -c "echo 'log-bin=/var/lib/mysql/mysql-bin' >> /etc/mysql/mysql.conf.d/mysqld.cnf"
docker exec mysql-master01 bash -c "echo 'server-id=1' >> /etc/mysql/mysql.conf.d/mysqld.cnf"

 成功!!!!!!!

#查看二进制日志相关的配置项 show global variables like 'binlog%';

 #查看server相关的配置项 show global variables like 'server%';

 主库配置结束


搭建从库
#创建目录
mkdir /data/mysql/slave01
cd /data/mysql/slave01
mkdir conf data
chmod 777 * -R

#创建配置文件
cd /data/mysql/slave01/conf
vim my.cnf
#输入如下内容
[mysqld]
server-id=2 #服务id,不可重复
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO ,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

docker run --name=mysql-slave01 -v /data/mysql/slave01/data:/var/lib/mysql -v
/data/mysql/slave01/conf:/etc/my.cnf.d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=iot@2020
mysql:5.7

主的配置:

 在从中配置映射:

CHANGE MASTER TO
master_host='10.2.10.67',
master_user='wlwpass',
master_password='wlwpass',
master_port=3306,
master_log_file='mysql-bin.000001',
master_log_pos=154;

原文地址:https://www.cnblogs.com/su-ke/p/13805110.html