MySQL 数据库管理系统通常会采用有效的措施来维护数据库的可靠性和完整性。但是在数据库的实际使用过程当中,仍存在着一些不可预估的因素,会造成数据库运行事务的异常中断,从而影响数据的正确性,甚至会破坏数据库,导致数据库中的数据部分或全部丢失。
数据库系统提供了备份和恢复策略来保证数据库中数据的可靠性和完整性。
数据库备份
数据库备份是指通过导出数据或者复制表文件的方式来制作数据库的副本。当数据库出现故障或遭到破坏时,将备份的数据库加载到系统,从而使数据库从错误状态恢复到备份时的正确状态。
可以使用 SELECT INTO OUTFILE 语句把表数据导出到一个文本文件中进行备份。
注意:这种方法只能导出或导入数据的内容,而不包括表的结构。若表的结构文件损坏,则必须先设法恢复原来表的结构。
【实例】将数据库 test_db 的表 tb_students_info 的全部数据备份到 C 盘的数据备份目录下文件名为 file.txt 的文件中,要求每个字段用逗号分开,并且字符用双引号标注,每行以问号结束。
输入的SQL语句和执行结果如下所示。
mysql> SELECT * FROM test_db.tb_students_info -> INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/file.txt' -> FIELDS TERMINATED BY '"' -> LINES TERMINATED BY '?'; Query OK, 10 rows affected (0.06 sec)
数据库恢复
数据库恢复是指以备份为基础,与备份相对应的系统维护和管理操作。
系统进行恢复操作时,先执行一些系统安全性的检查,包括检查所要恢复的数据库是否存在、数据库是否变化及数据库文件是否兼容等,然后根据所采用的数据库备份类型采取相应的恢复措施。
数据库恢复机制设计的两个关键问题是:第一,如何建立冗余数据;第二,如何利用这些冗余数据实施数据库恢复。
建立冗余数据最常用的技术是数据转储和登录日志文件。通常在一个数据库系统中,这两种方法是一起使用的。
数据转储是 DBA 定期地将整个数据库复制到磁带或另一个磁盘上保存起来的过程。这些备用的版本成为后备副本或后援副本。
可使用 LOAD DATA…INFILE 语句来恢复先前备份的数据。
【实例】将之前导出的数据备份文件 file.txt 导入数据库 test_db 的表 tb_students_copy 中,其中 tb_students_copy 的表结构和 tb_students_info 相同。
首先创建表 tb_students_copy,输入的 SQL 语句和执行结果如下所示。
mysql> CREATE TABLE tb_students_copy -> LIKE tb_students_info; Query OK, 0 rows affected (0.52 sec) mysql> SELECT * FROM tb_students_copy; Empty set (0.00 sec)
导入数据与查询表 tb_students_copy 的过程如下所示。
mysql> LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 5.7/ Uploads/file.txt' -> INTO TABLE test_db.tb_students_copy -> FIELDS TERMINATED BY ',' -> OPTIONALLY ENCLOSED BY '"' -> LINES TERMINATED BY '?'; Query OK, 10 rows affected (0.14 sec) Records: 10 Deleted: 0 Skipped: 0 Warnings: 0 mysql> SELECT * FROM test_db.tb_students_copy; +----+--------+---------+------+------+--------+------------+ | id | name | dept_id | age | sex | height | login_date | +----+--------+---------+------+------+--------+------------+ | 1 | Dany | 1 | 25 | F | 160 | 2015-09-10 | | 2 | Green | 3 | 23 | F | 158 | 2016-10-22 | | 3 | Henry | 2 | 23 | M | 185 | 2015-05-31 | | 4 | Jane | 1 | 22 | F | 162 | 2016-12-20 | | 5 | Jim | 1 | 24 | M | 175 | 2016-01-15 | | 6 | John | 2 | 21 | M | 172 | 2015-11-11 | | 7 | Lily | 6 | 22 | F | 165 | 2016-02-26 | | 8 | Susan | 4 | 23 | F | 170 | 2015-10-01 | | 9 | Thomas | 3 | 22 | M | 178 | 2016-06-07 | | 10 | Tom | 4 | 23 | M | 165 | 2016-08-05 | +----+--------+---------+------+------+--------+------------+ 10 rows in set (0.00 sec)