通过复制建立的从服务器可以实现故障转移,但是仅仅通过复制来备份是不够的。假设一个系统采用了主从的复制架构,从服务器用来作备份,这时程序中Bug或人为误操作执行了Delete操作,那么从服务器也跟着运行了Delete操作,这时候备份机制就起不到作用了,那么又应该怎样来进行数据恢复呢?
我们可以通过采用延时复制的方法,即从服务器间歇的进行同步操作,譬如每两个小时进行一次同步。这种方式的缺点是数据库在高峰期间和非高峰期间产生的二进制日志量是不同的,不能精准的控制,也不能完全的防范误操作。
一般较好的做法是采用快照和复制技术的结合,实现一个异步实时的在线MySQL备份方案。通过对从服务器上的数据库所在的分区做快照备份,可以避免误操作对复制造成影响。当主服务器上误操作是,这时只需要降从服务器上的快照进行恢复,然后再根据二进制日志进行point-in-time的恢复即可。常用的备份工具有mysqldump、xtrabackup。
此外,在从服务器上一般都要启用read-only选项,可以保证从服务器上的数据仅与主服务器进行同步,避免修改从库数据带来的影响:
1
2
[mysqld]
read-only
启用read-only选项后,操作从服务器的用户若没有SUPER权限而对数据进行任何修改操作就会抛出错误,这样就防止了普通用户对从库进行插入、修改、删除等操作带来的影响。