拉取 docker 镜像
docker pull mysql/mysql-server:8.0
创建 docker 网络
docker network create mysql_network
运行 MySQL 主节点
docker run -p 3306:3306 --name mysql_master -h mysql_master --net=mysql_network --restart=always \-v ~/docker/mysql/mysql_master/log:/var/log/mysql \-v ~/docker/mysql/mysql_master/data:/var/lib/mysql \-v ~/docker/mysql/mysql_master/conf:/etc/mysql \-e lower_case_table_names=1\-e MYSQL_ROOT_PASSWORD=root \-d mysql/mysql-server:8.0
编辑主节点配置文件
vi ~/docker/mysql/mysql_master/conf/my.cnf
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
init_connect='set collation_connection=utf8mb4_unicode_ci; set names utf8mb4;'character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
server-id=1log-bin=mysql-bin
#binlog-do-db=test_db
binlog-ignore-db=mysql
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
mysql_master/conf/my.cnf
重启 MySQL 主节点
docker restart mysql_master
在主节点创建用户,用于复制主节点数据到从节点
docker exec -it mysql_master mysql -uroot -proot
create user'mysql_slave'@'%' identified with mysql_native_password by '123456';
grant replication slave, replication client on*.* to 'mysql_slave'@'%';
运行 MySQL 从节点
docker run -p 3307:3306 --name mysql_slave -h mysql_slave --net=mysql_network --restart=always \-v ~/docker/mysql/mysql_slave/log:/var/log/mysql \-v ~/docker/mysql/mysql_slave/data:/var/lib/mysql \-v ~/docker/mysql/mysql_slave/conf:/etc/mysql \-e lower_case_table_names=1\-e MYSQL_ROOT_PASSWORD=root \-d mysql/mysql-server:8.0
编辑从节点配置文件
vi ~/docker/mysql/mysql_slave/conf/my.cnf
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
init_connect='set collation_connection=utf8mb4_unicode_ci; set names utf8mb4;'character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
server-id=2log-bin=mysql-slave-bin
#binlog-do-db=test_db
binlog-ignore-db=mysql
relay_log=mysql-relay-bin
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7slave_skip_errors=1062read_only=1log_slave_updates=1
mysql_slave/conf/my.cnf
重启 MySQL 从节点
docker restart mysql_slave
查看主节点日志文件和位置。可以看到文件名为 mysql-bin.000002,位置在693。
docker exec -it mysql_master mysql -uroot -proot
show master status;
登录从节点,与主节点之间建立关联
docker exec -it mysql_slave mysql -uroot -proot
change master to master_host='mysql_master', master_user='mysql_slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000002', master_log_pos=693, master_connect_retry=30;
查看从节点状态
show slave status\G;
启动主从复制
start slave;
再次查看,可以看到 Slave_IO_Running 和 Slave_SQL_Running 两个进程已经启动了。
主从复制测试
在主节点创建一个数据库 'test_db'。
在从节点上立即就可以看到这个数据库。