浅谈MySQL数据库有关数据备份的几种方法
2020-01-02段震
段 震
(太原师范学院,山西 太原 030619)
MYSQL数据库系统将每一个数据库的数据以文件的形式保存,因此可以通过复制文件的方式对数据库进行备份。但是,复制文件时确保在复制期间不使用表。如果不满足此条件,复制的文件中可能存在数据不一致,复制操作将失败。因此可以在复制以前关闭MYSQL服务,复制完成后再重新启动服务。
数据的备份根据其具体用途的不同而执行不同的操作。有为了防止数据丢失而进行的定期备份、有数据转移的备份、有数据丢失而需要找回的数据还原等。在MYSQL中实现备份数据库的方法有很多,主要有以下几种:
1 完全备份、全备份
进行完全备份的最简单和最快的方法是复制数据库文件夹。当然,复制时需要MySQL。您还可以使用mysqldump程序或mysqlhotcopy脚本在SQL语句级备份数据库。它们稍微慢一点,但是它们有很强的通用性[1]。
使用复制的方法直接将数据表文件备份,也属于完全备份。只要服务器不再进行更新,可以复制所有表文件(.frm、*.myd和*.myi文件)。所有表文件(.frm、*.myd和*.myi文件)只要服务器不再更新,就可以复制这些文件。对于Innodb表,可以过行在线备份,不对表进行锁定。
可以在MySQL安装目录中找到Mysqldump,它用于转储或收集数据库,以便备份或将数据传输到支持SQL语句的服务器(不一定是MySQL服务器)。备份后生成的备份是一个文本文件。该文件的内容是用于创建表并将数据插入表的SQL语句。
下面我们来详细介绍Mysqldump的一些选项,对数据表和数据库的备份。
1.1 备份一个数据库或一张表
对指定的数据库或指定的表进行备份,可提供其所生成的备份文件的名称和地址,也可以不提供。若不提供所备份的文件路径或名称,那么所备份的内容将直接显示在系统终端;否则其备份内容被记录在备份文件中。
1) 备份数据库或表,但不提供备份地址。语法如下:
Mysqldump[选项]数据库名[表名]数据库名[表名]
2) 备份一个数据库或一张表,指明备份文件的名称和地址,语法如下:
Mysqldump[选项]数据库名[表名]>文件路径(文件名称)
例如:对jxgl数据库中的work表进行备份,使用root用户名,123456密码,不提供备份文件的地址,其代码如下:
mysqldump-u root-p123456 jxgl work
例如:对jxgl数据库中的work表进行备份,指定其备份文件路径为:“d:work.sql”,使用root用户名,123456为密码,其代码如下:
mysqldump-u root-p123456 jxgl work>d:work.sql
1.2 同时备份多个数据库
对指定的数据库列表进行备份,可提供其所生成的备份文件的名称和址,也可以不提供。若不提供所备份的文件路径或名称,那么备份的内容将直接显示在系统终端;否则其备份内容被记录在备份文件中[2]。
同时备份多个数据库,语法如下:
Mysqldump[选项]--database数据库名1[数据库名2数据库3…]
同时备份多个数据库,指定备份文件路径,语法如下:
Mysqldump[选项]--database数据库名1[数据库名2数据库3…]>文件路径(文件名称)
1.3 备份服务器上所有的数据库
语法如下:
Mysqldump[选项]—all-database
而mysqldump用于备份一个完整的数据库,基本语法如下:
Mysqldump-opt数据库名>备份文件名.sql
Mysqldump[选项]-所有数据库
Mysqldump用于备份完整的数据库。基本语法如下:
选择数据库名>备份文件名.sql
除了将数据库的备份显示在终端,还可使用数据表备份的方法,将上述备份保存在文件中,代码如下:
Mysqldump-u root-p-all-database>d:databases.sql
2 表备份
如果只想备份数据库的某些表,可以使用select into outfile或backup table语句只提取数据表中的数据,而不备份表的结构和定义。
其用法如下:
从表名[其他Select子句]中选择列名列表到输出文件| dumpfile’filename'output选项
例如:备份jxgl.work表中除了w_no字段以外的数据,创建“d:work.txt”文件并将数据导入文件中,代码如下:
Select w_name,w_sex into outfile“d:work.txt”from jxgl.work;
在代码中,由于反斜杠被编译为转义字符,因此需要使用双反斜杠。
Load data infile语句是select into…outfile语句的反执行,能够将select into…outfile语句所备份的文件重新放回表中。
3 增量备份
增量备份是在完全备份后仅备份数据更改。增量备份可用于常规备份和自动备份。
MySQL支持增量备份。启动服务器时包含—log bin选项启用二进制日志功能。二进制文件记载了自某一次备份以来所有的数据更新操作。生成一份增量备份时,需要使用FLUSH LOGS或者mysqldump--flush-logs生成一份新的日志文件,执行完成之后,将自某一次备份之后到最新的二进制日志文件复制到备份位置,即增量备份文件。恢复时,重新执行这些增量备份文件。
shell>mysqlbinlog binlog_files|mysql-u root-p
通过增量备份,当出现在操作系统崩溃或断电的情况下,InnoDB可以自己完成所有的数据恢复工作。
4 小结
数据库的安全是系统安全的重要组成部分,故必须设计一个完善的数据库备份和恢复方案。MySQL提供了多种工具,可以一起使用,使数据库备份和恢复变得容易。在实际的MySQL数据库备份和恢复中,会出现很多无法通过和复杂的情况。根据不同的情况,需要大量的实践和经验来恢复数据库,使数据具有最大的可恢复性和最短的恢复时间。