10分钟搭建MySQL主从同步(基于docker)
一 主从配置原理
![image-20191104214516600]()
mysql主从配置的流程大体如图:
1)master会将变动记录到二进制日志里面;
2)master有一个I/O线程将二进制日志发送到slave;
3) slave有一个I/O线程把master发送的二进制写入到relay日志里面;
4)slave有一个SQL线程,按照relay日志处理slave的数据;
二 操作步骤
2.1我们准备两台装好mysql的服务器(我在此用docker模拟了两台机器)
环境 | mysql版本 | ip地址:端口号 |
主库(master) |
5.7 |
172.16.209.100:33307 |
从库(slave) |
5.7 |
172.16.209.100:33306 |
用docker拉起两个mysql容器,步骤如下(对docker不熟悉的同学可以查看docker快速入门章节):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
docker pull mysql:5.7
mkdir /home/mysql mkdir /home/mysql/conf.d mkdir /home/mysql/data/
创建my.cnf配置文件 touch /home/mysql/my.cnf
mkdir /home/mysql2 mkdir /home/mysql2/conf.d mkdir /home/mysql2/data/ touch /home/mysql2/my.cnf my.cnf添加如下内容: [mysqld] user=mysql character-set-server=utf8 default_authentication_plugin=mysql_native_password secure_file_priv=/var/lib/mysql expire_logs_days=7 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION max_connections=1000
server-id=100
log-bin=mysql-bin
server-id=101
log-bin=mysql-slave-bin
relay_log=edu-mysql-relay-bin
[client] default-character-set=utf8
[mysql] default-character-set=utf8
docker run -di -v /home/mysql/data/:/var/lib/mysql -v /home/mysql/conf.d:/etc/mysql/conf.d -v /home/mysql/my.cnf:/etc/mysql/my.cnf -p 33307:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
docker run -di -v /home/mysql2/data/:/var/lib/mysql -v /home/mysql2/conf.d:/etc/mysql/conf.d -v /home/mysql2/my.cnf:/etc/mysql/my.cnf -p 33306:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
|
2.2 远程连接入主库和从库
1 2 3 4 5 6 7 8 9 10 11
|
#连接主库 mysql -h 172.16.209.100 -P 33307 -u root -p123456
|
![image-20191105085514111]()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
#连接从库 mysql -h 172.16.209.100 -P 33306 -u root -p123456
|
![image-20191105090050611]()
##2.3 测试主从同步
1 2 3 4 5 6 7
|
#在主库上创建数据库test1 create database test1; use test1;
|
可以看到大功告成