实战项目——mysql主从架构的实现 (2)

2)测试只读属性  
  我们在从服务器上设置了只读,所以我们来试试看能不能插入数据:

实战项目——mysql主从架构的实现


  这就很尴尬了,为什么我们设置只读还是可以插入数据呢?这要如何解决呢?
  因为我们登录的时候使用的是root超级用户,这个大变态是不受只读设置影响的,所以,我们还是可以往里面去插入数据,当然,如果我们换成其他的普通用户就不会出现这样的问题了。
  解决方式也很简单,我们只需要把表锁起来就可以了:

MariaDB [keer]> flush tables with read lock;

  进行锁表操作以后,我们再来插入一条数据:

实战项目——mysql主从架构的实现


  这样的话,即使我们是超级用户登录进来的,也不能再插入数据了。这样会安全很多。但是,有利就有弊,这样的话,我们的主从就不能实时同步了,因为我们的主从同步是通过把主上的 sql 语句放在从上再执行一遍来实现的,可是我们锁表的话,sql 语句就不能执行了。想要同步方法也很简单,直接把表解锁就可以了。
  我们在主上插入一条数据:

实战项目——mysql主从架构的实现


  此时,我们的从上就要解表以后才能实现同步:

实战项目——mysql主从架构的实现

1.4 扩展——实现一主多从 1.4.1 需求分析

  当我们的服务器运行一段时间后,流量变得越来越多,这时,一主一从能够实现的高可用性和负载均衡不能满足我们的需求,我们就要选择再添加一台从服务器。
  可是现在我们的 master 已经运行很久了,我们也需要对新安装的 slave 进行数据同步,甚至它没有 master 的数据。
  此时,有几种方法可以使 slave 从另一个服务开始,例如,从 master 拷贝数据,从另一个 slave 克隆,从最近的备份开始一个 slave 。为了加快 slave 与 master 同步,可用以下方式先进行数据同步:

(1)master的某个时刻的数据快照;
(2)数据库的备份数据;
(3)master的二进制日志文件。

  架构图:

实战项目——mysql主从架构的实现

  接下来,我们就来实现一下这个过程:

1.4.2 具体实现过程

1)对 master 进行完全备份

[root@master ~]# mkdir /backup [root@master ~]# mysqldump --all-database > /backup/mysql-backup-`date +%F-%T`-all.sql

照例查看一下主的二进制日志状态及位置号。

实战项目——mysql主从架构的实现

2)把完全备份的数据发到新增的从上

[root@master ~]# scp /backup/mysql-backup-2017-11-21-10\:28\:29-all.sql @192.168.37.133:~ root@192.168.37.133's password: mysql-backup-2017-11-21-10:28:29-all.sql 100% 504KB 503.9KB/s 00:00

3)把这个完全备份导入从的数据库:

实战项目——mysql主从架构的实现

4)查看从是否恢复成功:

实战项目——mysql主从架构的实现


实战项目——mysql主从架构的实现


  我们来查看一下从的二进制日志状态及位置号:

实战项目——mysql主从架构的实现


  我们的数据已经恢复成功

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyxjzx.html