上篇文章咱们大体介绍了什么是MySQL
主从复制,主从复制的几种集群架构
图大概都有哪几种,今天咱们就来说讲如何实现MySQL集群
的搭建。主从复制有两种方式能够实现,binlog
和GTID
,这期咱们先经过binlog
方式来实现,下篇咱们来说binlog
的原理,和注意事项。mysql
大赞
点起来,在看
刷起来。若是你以为经过老哥的文章能学到一些知识,请把老哥推荐
给你的朋友。分享是一件快乐的事,咱们一块儿来玩Java
。程序员
Mysql
中有一个binlog
二进制日志,这个日志会记录下主服务器
全部修改了的SQL
语句,从服务器
把主服务器上的binlog
二进制日志,在指定的位置开始复制主服务器
全部修改的语句,在从服务器
上执行一遍。web
简而言之就是,主服务器
会把create、update、delete
语句都记录到一个二进制文件中(binlog),从服务器
读取这个文件,执行一遍文件中记录的create、update、delete
语句。从而实现主从数据同步。spring
my.ini是Windows系统的,my.cnf是Linux系统的
,咱们这期主要以 Windows 系统为例sql
server-id = 惟一ID
:主服务器惟一 ID,通常设置为机器 IP 地址后三位log-bin = 二进制日志文件存放路径
:这个是启动并记录 binlog 日志log-err = 错误日志路径
(可选):启动错误日志read-only = 0
:0是读写都行(主库),1是只读(从库)binlog-lgnore-db= 数据库名
(可选):设置不要主从复制的数据库binlog-do-db = 数据库名
(可选):须要复制的数据库名
当主库和从库都配置完 my.ini 文件以后,还须要主库创建一个受权用户,让从库能经过这个用户登陆到主库上。数据库
111主库执行:
GRANT REPLICATION SLAVE ON *.* TO '用户名'@'从机IP' IDENTIFIED BY '密码';(创建受权用户) FLUSH PRIVILEGES;(刷新MySQL的系统权限相关表) 复制代码
222从库执行: mysql -h 主机IP -usally -pilovesally 复制代码
show master status;
复制代码
这里主要看
File
和Position
两个参数,File
表明从哪一个日志文件里同步数据,Position
表明从这个文件的什么位置开始同步数据,binlog-do-db 和 binlog-lgnore-db 意思为同步哪几个数据库和不一样步哪几个数据库。服务器
若是以前作过同步数据,那么请先中止(stop slave;),不然会报错。微信
222执行: MASTER_HOST='主机IP', MASTER_USER='主机用户名', MASTER_PASSWORD='主机密码', MASTER_LOG_FILE='File名字', MASTER_LOG_POS=Position数字; 复制代码
start slave;
复制代码
show slave status\G;
复制代码
这两个参数都是 YES,说明同步成功!这时候能够插入一些新数据,试试从库能不能同步这些数据!架构
上面介绍了主从复制的实现方法,咱们在主从复制的基础上介绍主主复制(只须要把 111 也变成 222 的从机),把上面讲的222
从库改为主库,实现111
和222
两个库互为主从,不懂的同窗能够看看上篇文章的主主复制架构图。编辑器
222
从库变成主库,在222上执行以下语句,注意此次的从机 IP 是
111
的 IP,由于要互为主备
GRANT REPLICATION SLAVE ON *.* TO '用户名'@'从机IP' IDENTIFIED BY '密码';(创建受权用户)
FLUSH PRIVILEGES;(刷新MySQL的系统权限相关表) 复制代码
auto_increment_increment=2 #步长值auto_imcrement。通常有n台主MySQL就填n
auto_increment_offset=1 #起始值。通常填第n台主MySQL 复制代码
show master status;
复制代码
111
设置同步
222
数据文件
若是以前作过同步数据,那么请先中止(stop slave;),不然会报错。
MASTER_HOST='主机IP', MASTER_USER='主机用户名', MASTER_PASSWORD='主机密码', MASTER_LOG_FILE='File名字', MASTER_LOG_POS=Position数字; 复制代码
111
库同步状态
show slave status\G;
复制代码
这两个参数都是 YES,说明同步成功!这时候能够插入一些新数据,看看111
和222
两个库能不能互相同步数据。
咱们在上面双主集群的基础上,建立双主多从集群,这时候333
机器就该上场了。由于111
和222
机器都是主,那么333
机器做为从机,随便挂靠在其中一个主机上即可。咱们这里选111
吧。
步骤和第一个主从复制集群搭建的同样,按照上面的操做便可。
当咱们作好全部操做以后,在111
主机上新增数据进行测试,发现222
和333
均已同步数据。可是在222
新增数据测试时,会发现111
同步了,可是333
并无同步。由于333
是挂在111
下的从库,全部222
主机新增数据的时候,333
并无同步222
的数据,这显然是不行的。解决方案很简单,在两台主机 111 和 222 的配置文件里都加上以下配置,重启便可。
log-slave-updates=on
复制代码
从库做为其余从库的主库时,必须添加这个参数才能生效。111
和222
互为对方的从库,333
是111
的从库,因此111
和222
要加上这个参数,你们好好理解一下这个逻辑。
MySQL
主从复制,是实现高性能,高可用MySQL
的基石,因此必定要会这个知识,才能进一步往下深刻学习MySQL
,跟紧老哥的脚步,咱们下篇文章讲讲主从复制的原理。
一个在大厂作高级Java开发的程序猿
关注微信公众号:IT 老哥
回复:Java 全套教程,便可领取:Java 基础、Java web、JavaEE 所有的教程,包括 spring boot 等
回复:简历模板,便可获取 100 份精美简历
回复:Java 学习路线,便可获取最新最全的一份学习路线图
回复:Java 电子书,便可领取 13 本顶级程序员必读书籍
本文使用 mdnice 排版