怎么理解主从复制呢?
主从复制,是指将一台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 然后在主从服务器查看
- 主 :
- 从:
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论