一、使用MySQL Enterprise Backup进行热备份

   MySQL企业版的用户可以使用MySQL Enterprise Backup整个数据库实例的备份或者只是选定的数据库、表。该产品包括增量备份和压缩备份功能。备份数据库物理文件要比逻辑备份技术(比如mysqldump)更快。InnoDB表的复制采用热备份机制。(理想情况下,InnoDB表应该表现出相当多的数据。)从其他存储引擎复制表也使用热备份机制。

二、使用mysqldump备份

   Mysqldump程序也可以用来备份。它能备份所有种类的表,对于InnoDB表,可以使用—single-transaction选项不用给表加锁定执行联机备份。。

三、通过复制表文件备份

   对于每张表都有自己存储文件的存储引擎,可以通过复制这些文件备份。比如MyISAM 表就使用文件存储,因此,很方面就能通过复制文件(*.frm,*.MYD,*.MYI)备份.为了能够获取一致性备份,我们需要关闭服务器或者锁定刷新有关表。

FLUSH TABLES tbl_list WITH READ LOCK;

你只需要一个读锁,它允许其他客户端继续查询数据当在你数据库目录复制文件的时候。刷新是必要的,确保在你备份之前所有活跃的索引页面写入磁盘。

你还可以通过复制所有的表文件创建一个二进制备份在服务器不更新任何东西的时候。(但是请注意,这种方法不会生效当你的数据库包含InnoDB表的时候。另外,即便服务器没有活跃的更新数据,InnoDB仍然可能有修改的数据在内存而没有刷新到磁盘。

四、文本文件备份

   你可以使用SELECT * INTO OUTFILE ‘file_name’ FROM tbl_name创建一个包含表数据的文本文件。该文件爱你在MySQL服务器主机上创建,而不是在客户端主机。这个语句使用的时候输出文件不能已经存在,因为允许文件覆盖会造成安全风险。此方法用于任何类型的数据文件,但只保存表数据,而不保存表结构。

另一种创建文本数据文件的方法是使用mysqldump的—tab选项(这种方法包含CREATE语句,即可以备份表结构。)

还原文本文件数据,使用LOAD DATA INFILE 或者mysqlimport。

五、通过启用二进制进行增量备份

   MySQL支持增量备份,但是你必须在启动服务的时候开启—log-bin选项启用二进制日志。二进制日志给你提供你需要复制的数据库中你想要备份的时间点中那些改变的信息。此刻你想做一个增量备份(包含上次增量备份或者全量备份之后数据库所有的改变),你需要使用FLUSH LOGS反转二进制日志。这样做你需要将那些在上一次全量备份或者增量备份范围之内的所有的二进制日志文件复制到备份位置,这些二进制文件是增量备份,下一次你做完整的备份,也需要使用FLUSH LOGS或者mysqldump –flush-logs反转二进制文件,参考5.5.4mysqldump,一个数据库备份程序

六、使用从服务备份

   如果你的服务器备份的同时出现性能问题,这有一个策略可以帮助你,你可以在从服务器上备份而不是在主服务器上备份。

如果你在备份一个主从复制服务器,那么你需要备份它的主服务器信息和中继日志信息库。当你在备份从服务器数据库的时候,不管你采用什么样的备份方法。这些信息在你恢复从机数据后需要重新开始复制。如果你的从服务器采用LOAD DATA INFILE语句复制,你需要备份存在这些文件夹的从服务器因为这个目的而使用的任何 SQL_LOAD_*文件。从服务器需要这些文件重新复制任何中断的LOAD DATA INFILE 操作。这个目录的位置可以使用 –slave-load-tmpdir选项指定,如果服务器没有使用这个选项开始备份,那么目录的位置是tmpdir系统变量的值。

 

七、恢复损坏的表

   如果你不得不恢复被损坏的MyISAM表,可以首先尝试使用REPAIR TABLE或者myisamchk –r恢复。它们应该99.9%的可能有作用。如果myisamchk失败,

八、使用文件系统快照备份

   如果你使用的是Veritas文件系统,你可以使用下面的步骤进行备份

   1. 在客户端执行FLUSH TABLES WITH READ LOCK.

   2.在另一个Shell內执行安装vxfs快照

   3.在第一个客户端执行解锁表

   4.从快照复制文件

   5.卸载快照

   类似的快照功能也可能在其他文件系统使用像LVM,ZFS。

    本篇博客参照mysql5.7官方文档翻译,详情可以参考http://dev.mysql.com/doc/refman/5.7/en/backup-methods.html