机器两台
ip: 192.168.18.200 master
ip: 192.168.18.201 slave
1master 1slave
master
docker exec -ti mysql8_master /bin/bash
mysql -uroot -p
# 创建用户,设置主从同步的账户名
create user 'syncuser'@'%' identified with mysql_native_password by '123456';
# 授权
grant replication slave on *.* to 'syncuser'@'%';
# 刷新权限
flush privileges;
show variables like 'server_id';
# 查询 Master 状态,并记录 File 和 Position 的值,这两个值用于和下边的从数据库中的 change 那条 sql 中的 master_log_file,master_log_pos 参数对齐使用
show master status;
# 重置下 master 的 binlog 位点
reset master;
show master status;
slave
docker exec -ti mysql8_slave /bin/bash
mysql -uroot -p
# 这里master_host就是刚刚看到的master的ip,master_user就是我们创建用于同步的账号,master_log_file和master_log_pos就是通过show master status获得到的
CHANGE MASTER TO MASTER_HOST='192.168.18.200', MASTER=3306, MASTER_USER='syncuser', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=156;
#开启同步
START SLAVE;
#查看slave同步状态
SHOW SLAVE STATUS\G;
# 最后需要查看是否配置成功
# 查看参数 Slave_IO_Running 和 Slave_SQL_Running 是否都为 yes,则证明配置成功。若为 no,则需要查看对应的 Last_IO_Error 或 Last_SQL_Error 的异 常值。
docker-compose.yml见:
version: "3"
services:
mysql8_master:
image: mysql:8.0.27
container_name: mysql8_master
restart: always
ports:
- "3306:3306"
command:
--server-id=200
--character-set-server=utf8mb4
--collation-server=utf8mb4_unicode_ci
--log-bin=mysql-bin
--sync_binlog=1
--binlog-ignore-db="mysql,information_schema,performance_schema,sys"
--max_allowed_packet=128M
--lower_case_table_names=1
--performance_schema=off
--innodb_buffer_pool_size=64M
--expire_logs_days=7
--sql_mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_BACKSLASH_ESCAPES"
environment:
- TZ=Asia/Shanghai
- LANG=en_US.utf8
- MYSQL_ROOT_PASSWORD=123456
- MYSQL_DATABASE=db0
# - MYSQL_USER=abcdweg
# - MYSQL_PASSWORD=123456
volumes:
- /opt/docker_data/mysql8/var_lib_mysql:/var/lib/mysql
version: "3"
services:
mysql8_slave:
image: mysql:8.0.27
container_name: mysql8_slave
restart: always
ports:
- "3306:3306"
command:
--server-id=201
--log-bin=mysql-slave-bin
--relay-log=mysql-slave-relay-bin
--read-only=1
--binlog-ignore-db="mysql,information_schema,performance_schema,sys"
--character-set-server=utf8mb4
--collation-server=utf8mb4_unicode_ci
--max_allowed_packet=128M
--lower_case_table_names=1
--performance_schema=off
--innodb_buffer_pool_size=64M
--expire_logs_days=7
--sql_mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_BACKSLASH_ESCAPES"
environment:
- TZ=Asia/Shanghai
- LANG=en_US.utf8
- MYSQL_ROOT_PASSWORD=123456
- MYSQL_DATABASE=db0
# - MYSQL_USER=abcdweg
# - MYSQL_PASSWORD=123456
volumes:
- /opt/docker_data/mysql8/var_lib_mysql:/var/lib/mysql
作者:张三 创建时间:2025-03-21 22:52
最后编辑:张三 更新时间:2025-03-22 09:27
最后编辑:张三 更新时间:2025-03-22 09:27