多主一从,也称为多源复制,数据流向:
主库1 -> 从库s主库2 -> 从库s主库n -> 从库s应用场景
数据汇总,可将多个主数据库同步汇总到一个从数据库中,方便数据统计分析。读写分离,从库只用于查询,提高数据库整体性能。部署环境
注:使用docker部署mysql实例,方便快速搭建演示环境。但本文重点是讲解主从配置,因此简略描述docker环境构建mysql容器实例。
数据库:MySQL 5.7.x (相比5.5,5.6而言,5.7同步性能更好,支持多源复制,可实现多主一从,主从库版本应保证一致)操作系统:CentOS 7.x容器:Docker 17.09.0-ce镜像:mysql:5.7主库300:IP=192.168.10.212; PORT=4300; server-id=300; database=test3; table=user主库400:IP=192.168.10.212; PORT=4400; server-id=400; database=test4; table=user主库500:IP=192.168.10.212; PORT=4500; server-id=500; database=test5; table=user从库10345:IP=192.168.10.212; PORT=4345; server-id=10345; database=test3,test4,test5; table=user配置约束
主从库必须保证网络畅通可访问主库必须开启binlog日志主从库的server-id必须不同【主库300】操作及配置
配置my.cnf
![](https://i-blog.csdnimg.cn/blog_migrate/4648a8087dfbb09033f1586aa2cff077.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/22344be9cf3d2b259d1eef307b56198d.jpeg)
安装启动
![](https://i-blog.csdnimg.cn/blog_migrate/53c40991398c5aac82416fa17082c6ca.jpeg)
注:若不熟悉docker,可使用传统方式安装mysql,效果相同。
创建授权用户
连接mysql主数据库,键入命令mysql -u root -p,输入密码后登录数据库。创建用户用于从库同步复制,授予复制、同步访问的权限
![](https://i-blog.csdnimg.cn/blog_migrate/a7f01d7e07af68a63eda1c7fa109f511.jpeg)
log_bin是否开启
![](https://i-blog.csdnimg.cn/blog_migrate/fb81db9f784063d36cb978b3a5d85862.jpeg)
查看master状态
![](https://i-blog.csdnimg.cn/blog_migrate/2959f65545ada740cb07cd785406e55c.jpeg)
【主库400】配置及操作
配置my.cnf
![](https://i-blog.csdnimg.cn/blog_migrate/858948ee4d991b49ade032700e5c20d4.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/8dc870f7c2350d2192eaddf01b931036.jpeg)
安装启动
![](https://i-blog.csdnimg.cn/blog_migrate/19e713bc74f8d38d87fc8a01774a6657.jpeg)
创建授权用户
创建用户用于从库同步复制,授予复制、同步访问的权限
![](https://i-blog.csdnimg.cn/blog_migrate/eb96e7ec43047849ee939818fc61ad01.jpeg)
log_bin是否开启
![](https://i-blog.csdnimg.cn/blog_migrate/e15415737e9193d746977134748b9e34.jpeg)
查看master状态
![](https://i-blog.csdnimg.cn/blog_migrate/9e41c11d3d65b0afbc6c50cca10fb3cd.jpeg)
【主库500】配置及操作
配置my.cnf
![](https://i-blog.csdnimg.cn/blog_migrate/c4bb28a2cd6e1158d4ddf0375999eed9.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/12ffa5326e2872579ad85f1ed44c0205.jpeg)
安装启动
![](https://i-blog.csdnimg.cn/blog_migrate/c907af7f3230b8e3a4144972e0c7e429.jpeg)
创建授权用户
创建用户用于从库同步复制,授予复制、同步访问的权限
![](https://i-blog.csdnimg.cn/blog_migrate/d602f5af3397f49dc84c66401ffb883b.jpeg)
log_bin是否开启
![](https://i-blog.csdnimg.cn/blog_migrate/40c793b5c3a07859fc55882b1a845f35.jpeg)
查看master状态
![](https://i-blog.csdnimg.cn/blog_migrate/73f6df4f5c7c328d612f5bda6ce4448b.jpeg)
【从库10345】配置及操作
配置my.cnf
![](https://i-blog.csdnimg.cn/blog_migrate/95986b5e31962b168b77156eef6c79d8.jpeg)
安装启动
![](https://i-blog.csdnimg.cn/blog_migrate/06c747d834825db8a03b6add1878f278.jpeg)
设置【主库】信息
登录【从库10345】,进入mysql命令行。
![](https://i-blog.csdnimg.cn/blog_migrate/532ca5caaf55e07c05ec7f365c3ccd1c.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/ed72d323a8c3ee50db0011780fddad8d.jpeg)
stop slave; //停止同步start slave; //开始同步 //必须和【主库】的信息匹配。 CHANGE MASTER TO MASTER_HOST='192.168.10.212', //主库IP MASTER_PORT=4300, //主库端口 MASTER_USER='slave', //访问主库且有同步复制权限的用户 MASTER_PASSWORD='123456', //登录密码//【关键处】从主库的该log_bin文件开始读取同步信息,主库show master status返回结果 MASTER_LOG_FILE='mysql-bin.000003',//【关键处】从文件中指定位置开始读取,主库show master status返回结果 MASTER_LOG_POS=438 for channel '300'; //定义通道名称
查看同步状态
![](https://i-blog.csdnimg.cn/blog_migrate/fc4e28b32a7bb3ee1e754a0060fe5899.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/3524d05209a36f541ea391f6eb8c7e6e.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/b132eddafcd9f904e0a81b7977d8d23b.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/6d769366797d356bc8b6f4439227e8ce.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/8086b4678696e58c330901f7ea4f68aa.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/5e04397aaeab9b4369299f0196d52d3b.jpeg)
可以看见设置三个的主从同步通道的所有状态信息。只有【Slave_IO_Running】和【Slave_SQL_Running】都是Yes,则同步是正常的。 如果是No或者Connecting都不行,可查看mysql-error.log,以排查问题。
![](https://i-blog.csdnimg.cn/blog_migrate/2a72f36bd7649fc43878085db71f3b22.jpeg)
配置完成,则【从库10345】开始自动同步。
若需要单独启动或停止某个同步通道,可使用如下命令:start slave for channel '300'; //启动名称为300的同步通道 stop slave for channel '300'; //停止名称为300的同步通道
验证数据同步
建库
使用root账号登录【主库300】,创建test3数据库
![](https://i-blog.csdnimg.cn/blog_migrate/228bf77f02a8c364cea6d9385cefab4b.jpeg)
建表
在【主库300】中创建user表
![](https://i-blog.csdnimg.cn/blog_migrate/944220e569c67b3869b73eb217ee36bc.jpeg)
新增
在【主库300】中向user表插入一条数据:
![](https://i-blog.csdnimg.cn/blog_migrate/32492b563d59734b6954e8e151882990.jpeg)
在【从库10345】中查询user表数据:
![](https://i-blog.csdnimg.cn/blog_migrate/d34fee879da263e4d4dd6392cc5c1ccc.jpeg)
新增记录同步成功。
更新
在【主库300】中修改刚才插入的数据:
![](https://i-blog.csdnimg.cn/blog_migrate/ca1ccf54cbfb4b9f76a19d96feace52e.jpeg)
在【从库10345】中查询user表数据:
![](https://i-blog.csdnimg.cn/blog_migrate/0dcecd9944e4a855b83596750443545b.jpeg)
更新记录同步成功。
删除
在【主库300】中删除刚才更新的数据:
![](https://i-blog.csdnimg.cn/blog_migrate/5cb061bdcb09fc9f0506215fb5cd4681.jpeg)
在【从库10345】中查询user表数据:
![](https://i-blog.csdnimg.cn/blog_migrate/67d6822fc847dcc9d8cb47a6a6a28a25.jpeg)
删除记录同步成功。注:【主库400】、【主库500】的验证操作与上述类似。
补充:
如果【主服务器】重启mysql服务,【从服务器】会等待与【主服务器】重连。当主服务器恢复正常后,从服务器会自动重新连接上主服务器,并正常同步数据。如果某段时间内,【从数据库】服务器异常导致同步中断(可能是同步点位置不匹配),可以尝试以下恢复方法:进入【主数据库】服务器(正常),在bin-log中找到【从数据库】出错前的position,然后在【从数据库】上执行change master,将master_log_file和master_log_pos重新指定后,开始同步。