11.2 binary备份 vs 文本备份
当备份数据库时,你有两种备份格式可选:
二进制(binary)备份是一种对数据库中存储的内容文件的拷贝。这种拷贝实际上使得备份文件格式和MySQL在磁盘上存储的数据库文件格式保持了完全一致。因此此类数据库恢复则涉及将这些文件拷贝回它原有的位置。建立binary备份的技术包括使用文件拷贝命令(如cp或tar),mysqlhotcopy以及InnoDB Hot Backup**。
** 需要注意的是mysqlhotcopy从MySQL 5.7及其之后就被去除了,相关功能被融合到了其企业版MySQL Enterprise Backup工具mysqlbackup中。而InnoDB Hot Backup原先是商用软件的一部分,在MySQL Enterprise Backup 3.9之后其相应工具也被融合入mysqlbackup中。
文本备份则是将数据库内容导出(dump)至文件文件中。恢复则涉及到通过处理这些文件的内容将数据返回到数据库中。生成文本备份的技术包括了使用SELECT … INTO OUTFILE 的SQL语句,mysqldump工具等。
这两种备份格式有其不同的优缺点。通常选择使用何种备份的考虑因素是对速度和便携性之间的权衡。
由于二进制备份仅是对文件进行拷贝操作,它不需要了解文件中的内部结构,因此在速度上这种备份速度会更快。然而,如果需要将这种备份传输到另一个使用不同架构的机器上,那么文件就需要更多考虑二进制的便携性。意思就是这些文件需要平台无关化才行,这样你才能直接拷贝它们,从一个MySQL服务端传输到另一个处于不同服务器上的数据库中,而且这第二个服务端需要能够没有任何问题地访问这些文件的内容。使用二进制备份方法,你还需要确保在进行备份的时候,服务端不会对在被拷贝的文件进行修改。
文本备份则相对要慢很多,因为服务端必须读取这些表(这涉及到对文件内容的”翻译“开销)且之后要么将内容写出到磁盘文件,要么直接将内容发送给表写入的客户端程序。例如我们之后会更多了解的mysqldump客户端,它会从服务端接收表内容并以INSERT语句的形式输出数据,这些数据语句可以用于重新被导入并建立表。文本备份都是便携的,因此一份在某服务器上的文本备份可以被用于另一台机器上的MySQL服务端导入,而不需要关心两个服务器是否具有相同架构。使用文本备份方法时,服务端必须处于运行状态,因为其需要读取要被备份的文件。
制作二进制备份的步骤取决于数据库使用哪种来建立的表,且通常仅可用于本地的MySQL服务端。文本备份步骤则更为通用,且不受到任何存储引擎的影响。一些方法也可用于本地或远程的MySQL服务端。