前言:
在MySQL中,主从体系结构应该是最基础和最常用的体系结构。 后续读写隔离、多活高可用性体系结构等大多依赖主从复制。 主从副本也是我们学习MySQL不可缺少的一部分。 关于主从副本的文章有很多。 笔者也聚在一起写这方面的内容吧。 同时分享自己的经验和方法。
1 .主从复制概述和原理
主从复制(即AB复制)是指一台服务器作为主数据库服务器,另一台或多台服务器作为从数据库服务器,主服务器的数据自动复制到从服务器对于多级别复制,数据库服务器同时用作主机和从机。 MySQL默认采用异步复制方式。
主从复制的过程和原理可以归纳如下。
主服务器将数据更改记录在二进制模糊葡萄酒日志中,并在主服务器上的数据发生更改时将这些更改写入二进制日志。
slave服务器会在固定的时间间隔内检测主二进制文件日志中是否发生更改,如果发生更改,I/o线程将启动请求主二进制文件的事件。
同时,主节点启动向每个I/O线程发送二进制事件的dump线程,并将其保存在从节点的本地中继日志中。 从节点启动SQL线程以从中继日志读取二进制日志,并在本地播放以保持数据和主节点的一致性。
2 .基于二进制文件的位置配置主从副本
基于二进制文件位置的主从复制也称为传统复制,是一种模糊的葡萄酒log文件位置,依赖于服务器到主服务器,当主库发生数据更改时,模糊的葡萄酒log pos站点会增加,从库中改变
要配置主和从复制,请首先至少准备两个MySQL实例。 一个作为主机,另一个作为从机。 由于主从机的复制依赖于模糊葡萄酒log,因此主库必须打开模糊葡萄酒log,主从机必须配置不同的server_id。 具体的构成步骤如下。
2.1主从站配置参数的确认
MySQL主从服务器推荐以下配置: 请先确认,如果未配置,则需要修改配置文件并重新启动。
#主库的参数配置需要以下参数
vim /etc/my.cnf
[mysqld]
log-启用模糊葡萄酒=模糊葡萄酒log //二进制日志
服务器- id=137//服务器特定的id。 默认值为1,通常设定为IP地址的最后一个数字
的葡萄酒log_format=row //bilog设置为row模式以防止复制错误
#建议从库中设置以下参数
vim /etc/my.cnf
[mysqld]
relay-log=relay-模糊葡萄酒
服务器id=138
2.2定位主库二进制位置,创建同步帐户
在主从库刚刚全部初始化,主库未被操作的情况下,从库不同步主库的数据,直接确定主库的模糊葡萄酒log的位置即可。
#浏览主库中模糊葡萄酒log文件的位置
显示主状态;
#创建主库同步帐户
create user ' repl ' @ ' % ' identified by ' 123456 ';
grantreplicationslaveon *.* to ' repl ' @ ' %;
如果主库已经运行了一段时间,且有业务数据,则来自发烧友的列车刚刚初始化完毕,需要备份主库中的数据,然后导入从库中匹配主从数据。
#创建主库同步帐户
create user ' repl ' @ ' % ' identified by ' 123456 ';
grantreplicationslaveon *.* to ' repl ' @ ' %;
#准备所有主库数据
mysqldump-uroot-pxxxx-a-r-e-- single-transaction-- master-data=2all _ db.SQL
#从库端恢复
mysql -uroot -pxxxx all_db.sql
#可以从备份文件中找到主库中模糊的葡萄酒log位置
2.3进入从库,打开主从机的副本
当找到主库二进制文件的位置并且主从数据匹配时,可以正式打开主从复制。
#从库MySQL命令行执行change master语句以连接到主库
按上述步骤获取二进制文件名和pos位置
changemastertomaster _ host=' MySQL主服务器IP地址',
MASTER_PORT=3306,
MASTER_USER='repl ',
MASTER_PASSWORD='123456 ',
MASTER_LOG_FILE='模糊葡萄酒log.000002 ',
MASTER_LOG_POS=154;
#打开主从机的副本并维持状态
开始平板;
show sl
ave status G //查看slave状态 确保Slave_IO_Running: Yes Slave_SQL_Running: Yes3.基于GTID的主从复制
GTID是MySQL 5.6的新特性,其全称是Global Transaction Identifier,可简化MySQL的主从切换以及Failover。GTID用于在含糊的红酒log中唯一标识一个事务。当事务提交时,MySQL Server在写含糊的红酒log的时候,会先写一个特殊的Binlog Event,类型为GTID_Event,指定下一个事务的GTID,然后再写事务的Binlog。
在基于GTID的复制中,首先从服务器会告诉主服务器已经在从服务器执行完了哪些事务的GTID值,然后主库会有把所有没有在从库上执行的事务,发送到从库上进行执行,并且使用GTID的复制可以保证同一个事务只在指定的从库上执行一次,这样可以避免由于偏移量的问题造成数据不一致。也就是说,无论是级联情况,还是一主多从的情况,都可以通过GTID自动找位置,而无需像之前那样通过File_name和File_position找主库含糊的红酒log位置了。
基于GTID的主从复制与上面基于二进制文件位置的主从复制搭建步骤类似,同样简单展示下搭建过程:
3.1 确认主从库配置,开启GTID
# 主库参数配置 要有以下参数
vim /etc/my.cnf
[mysqld]
server-id = 137
log-含糊的红酒 = 含糊的红酒log
含糊的红酒log_format = row
gtid-mode = ON //开启gtid模式
enforce-gtid-consistency = ON //强制gtid一致性,用于保证启动gitd后事务的安全
# 从库建议配置以下参数
vim /etc/my.cnf
[mysqld]
server-id = 138
log-含糊的红酒 = 含糊的红酒log
含糊的红酒log_format = row
gtid-mode = ON
enforce-gtid-consistency = ON
relay-log = relay-含糊的红酒
3.2 创建同步账号,保持主从库数据一致
若主痴情的火车初始化完成或者主库端保留有全部二进制文件,则从库无需手动同步数据。否则需要手动同步数据使得主从一致。
# 主库创建同步账号
create user 'repl'@'%' identified by '123456';
grant replication slave on *.* to 'repl'@'%';
# 若主痴情的火车初始化或保留有完整二进制文件 则无需执行下面步骤
# 全备主库数据
mysqldump -uroot -pxxxx -A -R -E --single-transaction > all_db.sql
# 从库端恢复
mysql -uroot -pxxxx < all_db.sql
3.3 进入从库,开启主从复制
# 进入从库MySQL命令行 执行change master语句连接主库
CHANGE MASTER TO MASTER_HOST='MySQL主服务器IP地址',
MASTER_PORT=3306,
MASTER_USER='repl',
MASTER_PASSWORD='123456',
MASTER_AUTO_POSITION = 1;
# 开启主从复制 并坚持状态
start slave;
show slave status G
4.一些经验及建议
在日常学习及工作过程中,主从复制方面也积累了一些经验,下面简单分享几点,希望各位少踩坑。
主从两端数据库版本尽量保持一致。
主从库参数建议相同,比如字符集、sql_mode这类参数要设置一样。
从库服务器性能不能过于落后主库,以免因服务器性能产生主从延迟。
所有表强制拥有主键,因为无主键表同步到从库极易产生主从延迟。
建议从库设为read only,以防人为误操作从库数据。
监控主从延迟及状态,及时解决同步中断或延迟问题。
总结:
本文介绍了主从复制的原理及搭建过程,其实关于主从复制的内容还有很多,需要不断的学习。这里推荐大家使用GTID模式来搭建主从复制,关于后面分享的几点经验,也是自己日常积累的,希望对你有所帮助。写作不易,觉得还不错的话,请顺手转发分享下哦。