bash
复制编辑
docker pull mysql:8.0.26
bash复制编辑mkdir -p /root/mysql/master/conf
mkdir -p /root/mysql/master/data
mkdir -p /root/mysql/master/mysql-files
mkdir -p /root/mysql/slave/conf
mkdir -p /root/mysql/slave/data
mkdir -p /root/mysql/slave/mysql-files
yaml复制编辑version: '3.8'
services:
mysql-master:
image: mysql:8.0.26
container_name: mysql-master
restart: always
ports:
- "3307:3306"
environment:
MYSQL_ROOT_PASSWORD: 123456
volumes:
- /root/mysql/master/conf/:/etc/mysql/
- /root/mysql/master/mysql-files:/var/lib/mysql-files
- master-data:/var/lib/mysql
networks:
- mysql-net
mysql-slave:
image: mysql:8.0.26
container_name: mysql-slave
restart: always
ports:
- "3308:3306"
environment:
MYSQL_ROOT_PASSWORD: 123456
depends_on:
- mysql-master
volumes:
- /root/mysql/slave/conf/:/etc/mysql/
- /root/mysql/slave/mysql-files:/var/lib/mysql-files
- slave-data:/var/lib/mysql
networks:
- mysql-net
volumes:
master-data:
slave-data:
networks:
mysql-net:
driver: bridge
/root/mysql/master/conf/my.cnf
)ini复制编辑[mysqld]
# 唯一的server_id
server-id=1
# 开启二进制日志功能
log-bin=mysql-bin
# 二进制日志缓存大小
binlog_cache_size=1M
# 二进制日志过期天数
expire_logs_days=7
# 二进制日志格式(mixed/statement/row)
binlog_format=STATEMENT
# 忽略复制以下数据库
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
# 只复制指定数据库
binlog-do-db=testdb
# 允许 LOAD DATA / SELECT INTO OUTFILE 操作的目录(必须存在)
secure_file_priv=/var/lib/mysql-files
/root/mysql/slave/conf/my.cnf
)ini复制编辑[mysqld]
# 唯一的server_id,不能和主库相同
server-id=2
# 中继日志文件名
relay-log=relay-log
# 设置只读,防止手动写入破坏复制
read_only=1
# 允许 LOAD DATA / SELECT INTO OUTFILE 操作的目录(必须存在)
secure_file_priv=/var/lib/mysql-files
bash
复制编辑
docker compose up -d
bash复制编辑docker exec -it mysql-master bash
mysql -uroot -p123456
server_id
:sql
复制编辑
SHOW VARIABLES LIKE 'server_id';
sql复制编辑GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;
bash复制编辑docker exec -it mysql-slave bash
mysql -uroot -p123456
sql复制编辑GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;
bash复制编辑docker exec -it mysql-master bash
mysql -uroot -p123456
sql复制编辑-- 创建复制用户
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
-- 授权复制权限
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';
FLUSH PRIVILEGES;
File
和 Position
sql
复制编辑
SHOW MASTER STATUS;
示例输出:
File | Position | … |
---|---|---|
mysql-bin.000004 | 156 | … |
bash复制编辑docker exec -it mysql-slave bash
mysql -uroot -p123456
sql复制编辑CHANGE MASTER TO
MASTER_HOST='172.17.180.75',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_PORT=3307,
MASTER_LOG_FILE='mysql-bin.000004',
MASTER_LOG_POS=156;
注意:
如果遇到错误,先执行:
sql复制编辑STOP SLAVE;
RESET SLAVE;
然后重新执行 CHANGE MASTER TO
命令。
sql
复制编辑
START SLAVE;
sql
复制编辑
SHOW SLAVE STATUS\G;
确认 Slave_IO_Running
和 Slave_SQL_Running
都为 Yes
。
sql复制编辑CREATE DATABASE testdb;
USE testdb;
CREATE TABLE test_table (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50)
);
INSERT INTO test_table (name) VALUES ('test1'), ('test2');
testdb
数据库和数据。