上篇文章我们大致介绍了什么是MySQL
主从复制,主从复制的几种集群架构
图大概都有哪几种,今天我们就来讲讲如何实现MySQL集群
的搭建。主从复制有两种方式可以实现,binlog
和GTID
,这期我们先通过binlog
方式来实现,下篇我们来讲binlog
的原理,和注意事项。
大赞
点起来,在看
刷起来。如果你觉得通过老哥的文章能学到一些知识,请把老哥推荐
给你的朋友。分享是一件快乐的事,我们一起来玩Java
。
Mysql
中有一个binlog
二进制日志,这个日志会记录下主服务器
所有修改了的SQL
语句,从服务器
把主服务器上的binlog
二进制日志,在指定的位置开始复制主服务器
所有修改的语句,在从服务器
上执行一遍。
简而言之就是,主服务器
会把create、update、delete
语句都记录到一个二进制文件中(binlog),从服务器
读取这个文件,执行一遍文件中记录的create、update、delete
语句。从而实现主从数据同步。
my.ini是Windows系统的,my.cnf是Linux系统的
,我们这期主要以 Windows 系统为例
- 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 本顶级程序员必读书籍