MySQL的备份策略有不少,主要取决于MySQL拓扑中的服务器的数量。我们现在以最小功能性备份作为讨论的背景:只有1台服务器,需要确定一个备份策略。
关于MySQL的备份,有两种方法是适用于所有的场景:
1 把MySQL实例停掉,然后进行冷备份,但是这样做的缺陷是不言而喻的——系统在一段不能确定的时间里不可使用,同时,也要求能够正确而完整的拷贝了所有的信息,包括:数据、可用的事务、二进制日志数据和当前的MySQL配置。
2 使用工具,标准的MySQL安装包中已经包含了的客户端工具——mysqldump,使用这个命令可以不必停掉MySQL实例,在执行命令选择参数的时候,就需要考虑几个问题以确定出最佳的方案,包括:备份数据库的规模、锁策略如何保证一致性、备份时长等。
接下来,我们就来详细讨论一下mysqldump执行时确定最佳方案的这几个考虑因素。
Part1 数据库大小
为啥要先考虑这个呢?因为必须确保备份的文件能够有足够的存储空间来存放。我们通过执行SQL语句来查询当前数据的大小:
mysql>SELECT ROUND(SUM(data_length+index_length)/1024/1024)
<span style="white-space:pre"> </span>-><span style="white-space:pre"> </span>As tatal_mb,
<span style="white-space:pre"> </span>-><span style="white-space:pre"> </span>ROUND(SUM(data_length)/1024/1024)AS data_mb,
<span style="white-space:pre"> </span>-><span style="white-space:pre"> </span>ROUND(SUM(index_length)/1024/1024)AS index_mb
<span style="white-space:pre"> </span>->FROM<span style="white-space:pre"> </span>INFORMATION_SCHEMA.tables;
一般执行mysqldump所得到的备份文件与原数据是大致相同的大小,但是为了安全考虑,会留出10%-15%的冗余,这种计算方法是不精确的,而且,备份会产生一个数据的基于文本的输出。
PART2 锁策略选择
锁策略是决定在执行备份的期间,能不能对数据库进行写操作。mysqldump在默认情况下是用LOCK TABLES来锁住表,以保障数据的一致性,主要取决于--lock tables命令行选项,这一个选项在默认情况下是disabled的,是--opt选项的一部分,--opt选项本来在默认情况就是enabled的。
PART3 运行时间
确定备份耗时是最重要的需求,但是没有什么计算方法可以给出精准的答案。有很多决定因素:数据库规模、系统的RAM容量、存储引擎的类型、MySQL配置、硬盘的速度和当前工作负载等。所以在执行备份时要采集信息,运行时间很重要的原因是因为它是维护数据库的窗口,而且备份期间有很多功能限制、性能开销的问题。