前言
mysql 主从原理是通过binlog文件来传递主库的修改的
操作
下载mysql镜像
1
docker pull mysql:5.7.18
准备一份my.cnf,这个版本的镜像里的mysql配置文件在 /etc/mysql/mysql.conf.d/mysqld.cnf,可以从容器中使用docker cp复制出来修改, 复制出两个文件 mysqld.master.cnf,mysqld.slave.cnf
1
2
3
4
5
6文件 mysqld.master.cnf 添加内容
.... 省略内容
[mysqld]
log-bin = mysql-bin # master一定要开启binlog
server-id = 1 # 实例唯一的id,跟从库不一样就行
.... 省略内容1
2
3
4
5
6文件 mysqld.slave.cnf 添加内容
.... 省略内容
[mysqld]
log-bin = mysql-bin # 开启binlog
server-id = 2 # 实例唯一的id,跟主库不一样就行
.... 省略内容创建容器
1
2
3
4启动master
docker run -d -p 3306:3306 -v /Users/所在文件夹/mysqld.master.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -e MYSQL_ROOT_PASSWORD=123456 --name mysql-master mysql:5.7.18
启动从库 从库在宿舍既可以换个端口,也可以是用 -p 3306 让宿主机随机一个端口
docker run -d -p 3307:3306 -v /Users/所在文件夹/mysqld.slave.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -e MYSQL_ROOT_PASSWORD=123456 --name mysql-slave mysql:5.7.18进入mysql主从配置
1
2
3
4
5
6进入容器命令
docker exec -it mysql-master bash
docker exec -it mysql-slave bash
进入mysql
mysql -uroot -p1234561
2
3
4
5
6
7
8
9
10
11-- master登录进入容器内mysql,添加用户用于主从复制
GRANT REPLICATION SLAVE ON *.* TO 'follow'@'%' identified by 'follow';
-- 刷新权限
FLUSH PRIVILEGES;
-- 查看binlog的文件名和位置,用于从库配置连接时指定文件和位置时使用
show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 | 439 | | | |
+------------------+----------+--------------+------------------+-------------------+master的ip地址可以在master机器上使用
ip addr,也可以使用docker inspect 容器id查看1
2
3
4
5
6
7
8
9
10
11
12
13-- 从库 进入容器内,连接主库
change master to
master_host = '172.17.0.2',
master_user = 'follow',
master_log_file = 'mysql-bin.000003',
master_log_pos = 439,
master_port = 3306,
master_password = 'follow';
-- 启动
start slave;
-- 查看状态
show slave status;
-- 重点查看 Slave_IO_Running与Slave_SQL_Running 是否为YES