11.1  备份与还原概述

  备份与恢复概述

    一些因素会使数据库中的数据部分或全部丢失,这些因素可能是:

      计算机硬件故障、计算机软件故障、自然灾害、盗窃、病毒、人为误操作

    数据库备份是指通过导出数据或者拷贝表文件的方式来制作数据库的副本。

 数据库的恢复(也称为数据库的还原)是将数据库从某一种“错误”状态(如硬件故障、操作失误、数据丢失、数据不一致等状态)恢复到某一已知的“正确”状态。

    在MySQL数据库中具体实现备份数据库可以分为以下几种:

      完全备份

        完全备份就是将数据库中的数据及所有对象全部备份。完全备份最简单也最快速的方式就是复制数据库文件,在复制时对MySQL数据库会有些要求。

      表备份

        表备份就是仅将一张或多张表中的数据进行备份,可以使用select into …outfile 或backup table语句,只提取数据库中的数据,而不备份表的结构和定义。

      增量备份

      增量备份就是在某次完全备份的基础上,只备份其后数据的变化。可用于定期备份和自动恢复。

11.2 通过文件备份还原

  通过文件备份和还原

    通过复制文件实现数据还原,除了保证存储类型为MyISAM ,还必须保证MySQL数据库的主版本号一致,因为只有MySQL数据库主版本号相同,才能保证两个MySQL数据库的文件类型是相同的。

11.3通过命令备份还原

  1. 备份

    mysqldump程序可以备份数据库表的结构,还可以备份一个数据库,甚至整个数据库系统,只需在mysql客户端实用程序的运行界面中输入mysqldump --help命令,即可查看到mysqldump程序对应的命令。

    (1)备份表

      语法格式: 

mysqldump [options] database [tables] > filename

      【例1】使用mysqldump备份数据库mysql_test中的表customers。

mysqldump -hlocalhost -uroot -p153456 mysql_test customers > c:\backup\file.sql ;

    (2)备份数据库

      mysqldump程序还可以将一个或多个数据库备份到一个文件中

      语法格式: 

mysqldump[ options ]—databases [options] db1 [db2 db3 ...] > filename

      【例2】备份数据库mysql_test和数据库MySQL到C盘backup目录下。

mysqldump -hlocalhost–uroot -p153456 –databases mysql_test MySQL > c:\backup\data.Sql ;

    (3)备份整个数据库系统

      语法格式:

mysqldump[options] - -all-databases[options] > filename ;

      【例3】将数据库 mysql_test中所有表的表的结构和数据分别备份到c盘的backup 目录下

mysqldump –u root –p153456—tab=c:/backup/mysql_test ;

  2. 还原

    (1) 使用MySQL命令将mysqldump程序备份的文件中全部的SQL语句还原到MySQL中

      【例4】假设数据库mysql_test遭遇损坏,试用该数据库的备份文件mysql_test.sql将其恢复。

mysql –u root –p153456 mysql_test< mysql_test.sql ;

      【例5】假设数据库mysql_test中表customers的表结构被损坏,试将存储表customers结构的备份文件customers.Sql恢复到服务器中,其中该备份文件存放在C盘的backup目录中。

mysql –u root –p153456 customers < c: \backup\customers.Sql ;

    (2) 使用mysqlimport程序恢复数据

      倘若只是为了恢复数据表中的数据,可以使用mysqlimport客户端实用程序来完成。

      语法格式:

mysqlimport[options]database textfile... ;

    【例6】 使用存放在c盘backup目录下的备份数据文件customers.txt,恢复数据库mysql_test中表customers的数据。

mysqlimport –hlocalhost -uroot -p153456 –low-priority –replace mysql_test c :\backup\customers.Txt ;

 

11.4  表的导入和导出

  1. 导出备份语句select into...outfile

select into…outfile语句把表数据导出到一个文本文件中进行备份,并可使用load data...infile语句来恢复先前备份的数据。

这种方法有一点不足,就是只能导出或导人数据的内容,而不包括表的结构,若表的结构文件损坏,则必须先设法恢复原来表的结构。

    语法格式:

select *  
into outfile’file_name’[character set charset_name] export_options| 
into dumpfile’file_name’

export_options的格式为:

[fields 
   [terminated by’string’] 
   [[optionally] enclosed by’char’] 
   [escaped by’char’] 
 ]  
 [linesterminated by’string’]

  2. load data...infile语句

    导入恢复语句load data...infile的语法格式为:

load data [low_priority | concurrent] [local] infile’file_name.txt’  
[replace | ignore] 
into table tbl_name  
[fields  
  [terminated by 'string']  
  [[optionally] enclosed by 'char']  
  [escaped by 'char' ]  
]  
[lines  
  [starting by 'string']  
  [terminated by 'string']  
]  
[ignore number lines]  
[(col_name_or_user_var,...)]  
[set col_name = expr,...)]

  【例7】备份数据库mysql_test中表customers的全部数据到c盘的backup目录下一个名为backupfile.txt的文件中,要求字段值如果是字符则用双引号标注,字段值之间用逗号隔开,每行以问号为结束标志。然后,将备份后的数据导入到一个和customers表结构相同的空表cus-tomers_copy中。

    首先,使用下面语句导出数据:

select * from mysql_test.customers 
into outfile ‘c :/backup/backupfile.txt’
fields terminated by ‘.’  
optionally enclosed by “”  
lines terminated by ‘?’;

    然后,使用下面的语句将备份数据导人数据库mysql_test中一个和customers表结构相同的空表customers_copy中:

load data infile ‘c :/backup/backupfile.txt’  
into table mysql_test.customers_copy  
fields terminated by ‘,’  
optionally enclosed by’“’  
lines terminated by ‘?’;