Mysql数据库备份与恢复
数据库备份对于业务型系统是非常必要的,像系统崩溃、硬盘损坏、硬盘坏道、人为的误删、误改数据库等,都会造成灾难性的后果,所以,数据库备份是非常必要的。
Mysql自身提供了一系列的数据库备份策略,方便我们根据需要选择适合系统的备份策略
Mysql 5.7.20-log ,win10
1.使用MySQL Enterprise Backup进行热备份,这是Mysql为Mysql企业版进行开发的专门用于备份的产品,他可以备份整个mysql实例,也可以根据选择的备份特定的数据库,或者数据库中的特定表,其原理即物理的复写数据库的所有数据文件,速度快,此处不便演示,需要购买mysql相关服务才可使用。
2.使用mysqldump进行热备份,对于Myisam引擎,可配合lock-all-tables(锁表)来保证数据库的数据的准确性,生成对应的sql文件,下面分别进行演示
截图分别演示了MyISAM的数据备份
1>第一条sql是对整个Mysql实例的全量备份
2>第二条sql是对test数据库的全量备份
3>第二条sql是对test数据库中user表的全量备份
同样的,对于InnoDB,把参数lock-all-tables 替换为single-transaction即可在热备份的时候保证数据库的事务性
3.制作分隔的文本文件备份(热备份,针对表中的数据)
导出表中的数据到文件中,目前支持.txt,.xls,.xlsx,csv
注意:mysql 5.7以后,配置文件添加了参数secure-file-priv,若为NULL,则不允许文件的导入导出,若制定了文件目录,则会导入到制定的文件夹下。若设置为/,可导入到任意目录,' '同 / . 一定要确保当前用户拥有制定文件夹的写的权限,否则导出失败。
4.使用Binlog进行增量备份
前提是binlog必须先开启,即修改mysql的配置文件,为log-bin指定目录即可。
例如:log-bin=C:/ProgramDataMySQLMySQL Server 5.7mysql-bin
使用binlog备份,同样是copy指定目录下的所有binlog 文件即可,这样你就可以根据时间点或者log文件进行选择性的恢复。
使用FLUSH LOGS即更新日志,mysql会自动创建一个新的binlog文件
mysqldump --flush-logs同FLUSH LOGS
5.使用主从复制从服务器的master.info和relay log备份
6.除此之外,针对MySIAM引擎,mysql本身提供了修复崩溃table的能力,在你使用备份进行数据库恢复之前,不防先使用 REPAIR TABLE 或者 myisamchk -r ,它能解决99.9%的case.
总结:一般大企业都会选择Mysql 企业版的备份产品,但也不排除有些公司在2,3,4进行的加强以支持定制化。数据库备份无非文件备份(binlog方式)和逻辑备份(2,3热备份)。大部分公司都会写一个或多个定时脚本,对重要的数据库文件和热点数据进行定期的备份。
本文部分资料来自于Mysql官方5.7参考文档,链接:
https://dev.mysql.com/doc/refman/5.7/en/backup-methods.html。
下一篇:MySQL数据库备份与恢复策略:Java实践指南