docker run -d -p 3307:3306 --privileged=true -v /app/mysql-01/log:/var/log/mysql -v /app/mysql-01/data/:/var/lib/mysql -v /app/mysql-01/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql00001 mysql:5.7
在/app/mysql-01/conf下新建my.cnf并且重启容器01
[mysqld]
# 设置server_id,同一局域网中需要唯一
server_id=101
#指定不需要同步的数据库名称
binlog-ignore-db=mysql
# 开启二进制日志功能
log-bin=mall-mysql-bin
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
slave_skip_errors=1062
进入数据库新建用户,并且赋权。用户slave,密码123456
create user 'slave'@'%' identified by '123456';
grant replication slave, replication client on . to 'slave'@'%';
docker run -d -p 3308:3306 --privileged=true -v /app/mysql-02/log:/var/log/mysql -v /app/mysql-02/data/:/var/lib/mysql -v /app/mysql-02/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql00002 mysql:5.7
在/app/mysql-01/conf下新建my.cnf并且重启容器02
[mysqld]
server_id=102
binlog-ignore-db=mysql
# 开启二进制日志功能,以备slave成为其他数据库的master时使用。
log-bin=mall-mysql-slave1-bin
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
slave_skip_errors=1062
# relay_log配置中继日志
relay_log=mall=mysql-relay-bin
#表示slave将复制时间写进自己的二进制日志
log_slave_updates=1
#slave设置只读
read_only=1
然后在从数据库配置主从复制
master_log_file和master_log_pos值获取方法
进入从数据库
show master status;
取前两个字段的值
change master to master_host='主数据库ip' , master_user='在主数据库创建的用于同步的用户', master_password='在主数据库创建的用于同步的用户', master_port=主数据库的运行端口, master_log_file='File的值',master_log_pos=Position的值,master_connect_retry=连接失败重试的时间,单位秒;
从数据库检查同步状态
show slave status \G;
检查这两个状态。
Slave_IO_Running: No
Slave_SQL_Running: No
从数据库开始同步
start slave;
检查这两个状态,如果是yes表示配置主从成功。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
(如果以上几步配置错误,可以执行一下清除 然后重新执行以上步骤。
STOP SLAVE; -- 如果复制已启动则停止
RESET SLAVE ALL; -- 清除所有复制配置(包括连接信息)
验证是否清除成功:
SHOW SLAVE STATUS\G)
评论区