环境
docker pull mysql:8.0
docker network create mysql_net
docker run -d \
--name master \
--network mysql_net \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_DATABASE=masterdb \
-p 3307:3306 \
-v /mysql_master_data:/var/lib/mysql \
mysql:8.0 \
--server-id=1 \
--log-bin=mysql-bin \
--binlog-format=ROW \
--gtid-mode=ON \
--enforce-gtid-consistency=ON
参数说明
docker exec -it mysql-master mysql -uroot -p
创建用户repl并赋权,这个用户单纯用来拉取binlog,不做任何业务
CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'repl123';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
docker run -d \
--name slave \
--network mysql_net \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /mysql_slave_data:/var/lib/mysql \
mysql:8.0 \
--server-id=2 \
--relay-log=relay-bin \
--log-bin=mysql-bin \
--binlog-format=ROW \
--gtid-mode=ON \
--enforce-gtid-consistency=ON
参数说明
把主表所有的数据都导到从表里去
mysqldump -uroot -p123456 --all-databases代表导出所有的数据库和表数据
docker exec mysql-master mysqldump -uroot -p123456 --all-databases --master-data=2 > dump.sql
docker cp dump.sql slave:/dump.sql
docker exec -it slave sh -c 'mysql -uroot -p123456 < /dump.sql'
docker exec -it slave mysql -uroot -p
CHANGE MASTER TO
MASTER_HOST='mysql-master',
MASTER_USER='repl',
MASTER_PASSWORD='repl123',
MASTER_AUTO_POSITION=1; -- 使用 GTID
START SLAVE; -- 开始复制
SHOW SLAVE STATUS\G -- 检查状态
完成。使用SHOW SLAVE STATUS\G看到如下状态时代表从库已连接成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes