MySQL主从复制的原理及使用分析
作者:Pseudo…
怎么理解主从复制呢?
主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。 前者称为主节点 (master),后者称为从节点 (slave); 数据的复制是单向的,只能由主节点到从节点。 默认情况下,每台Redis服务器都是主节点,且一个主节点可以有多个从节点 (或没有从节点),但一个从节点只能有一个主节点。
一台主 MySQL 服务器带两台从 MySQL 服务器做数据复制前端应用在进行数据库写操作时,对主服务器进行操作,在进行数据库读操作时对两台从服务器进行操作,这样大量减轻了对主服务器的压力。
一. MySQL 主从复制原理
MySQL 的主从复制和 MySQL的读写分离两者有着紧密联系,首先要部署主从复制,只有主从复制完成了,才能在此基础上进行数据的读写分离。
1. MySQL 支持的复制类型
①基于语句的复制。在主服务器上执行的 SQL 语句,在从服务器上执行同样的语句,MySQL 默认采用基于语句的复制,效率比较高。
②基于行的复制。把改变的内容复制过去,而不是把命令在从服务器上执行一遍
③混合类型的复制。默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制。
2. 复制的工作过程
①在每个事务更新数据完成之前,Master 将这些改变记录进二进制日志。写入二进制日志完成后,Master 通知存储引擎提交事务。
②Slave 将 Master 的 Binary log 复制到其中继日志(Relay log)。首先,Slave 开始一个工作线程--I/0 线程,I/0 线程在 Master 上打开一个普通的连接,然后开始 Binlog dump process。Binlog dump process 从 Master 的二进制日志中读取事件,如果已经跟上 Master,它会睡眠并等待 Master 产生新的事件。I/0 线程将这些事件写入中继日志。
③ SQL slave thread(SQL 从线程)处理该过程的最后一步。SQL 线程从中继日志读取事件,并重放其中的事件而更新 Slave 数据,使其与 Master 中的数据保持一致。只要该线程与 I/0 线程保持一致,中继日志通常会位于0S 的缓存中,所以中继日志的开销很小。复制过程有一个很重要的限制,即复制在 S1ave 上是串行化的,也就是说 Master 上的并行更新操作不能在 Slave 上并行操作。
二. 案例实施
1. 搭建MySQL主从复制在所有节点进行时间同步
关闭防火墙
安装数据库参考前面的文章
这个用的是脚本安装的mysql
直接用bash执行脚本
设置配置文件
2. 配置master主服务器登录MySQL程序
给从服务器授权
在show命令前用flush privileges;更新一下
其中 File 列显示日志名,Position 列显示偏移量,这两个值在后面配置从服务器的时候需要。Slave 应从该点上进行新的更新。
3. 配置Slave 从服务器在/etc/my.cnf 中修改或者增加下面内容
这里要注意 server-id 不能相同。
重启服务器
登录到mysql,配置同步
4. 验证主从复制效果在主从服务器登录查看库
两台数据库执行结果应该相同
- 主:
- 从:
在主服务器创建数据库 aaa 然后在主从服务器查看
- 主 :
- 从:
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。