文章教程

17.2数据还原

9/17/2020 9:40:31 PM 人评论 次浏览

17.2 数据还原

当数据丢失或意外破坏时,可以通过还原已经备份的数据尽量减少数据丢失和破坏造成的损失。本节将介绍数据还原的方法。

17.2.1 使用mysql命令还原

对于已经备份的包含CREATE、INSERT语句的文本文件,可以使用mysql命令导入到数据库中。本小节将介绍使用mysql命令导入sql文件方法。

备份的sql文件中包含CREATE、INSERT语句(有时也会有DROP语句)。mysql命令可以直接执行文件中的这些语句,语法如下:

  mysql -u user -p [dbname] < filename.sql

user是执行backup.sql中语句的用户名;-p表示输入用户密码;dbname是数据库名。如果filename.sql文件为mysqldump工具创建的包含创建数据库语句的文件,执行的时候不需要指定数据库名。

【例17.6】使用mysql命令将C:\backup\booksdb_20110101.sql文件中的备份导入到数据库中,输入语句如下:

  mysql -u root -p booksDB < C:/backup/booksdb_20110101.sql

执行该语句前,必须先在MySQL服务器中创建booksDB数据库,如果不存在恢复过程将会出错。命令执行成功之后booksdb_20110101.sql文件中的语句就会在指定的数据库中恢复以前的表。

如果已经登录MySQL服务器,还可以使用source命令导入sql文件。source语句语法如下:

  source filename

【例17.7】使用root用户登录到服务器,然后使用source导入本地的备份文件booksdb_ 20110101.sql,输入语句如下:

  --选择要恢复到的数据库
  mysql> use booksdb;
  Database changed
  --使用source命令导入备份文件
  mysql> source C:/backup/booksdb_20110101.sql

命令执行后,会列出备份文件booksdb_20110101.sql中每一条语句的执行结果。source命令执行成功后,booksdb_20110101.sql中的语句会全部导入到现有数据库中。

提 示

执行source命令前,必须使用use语句选择数据库。不然,恢复过程中会出现“ERROR 1046 (3D000): No database selected”的错误。

17.2.2 直接复制到数据库目录

如果数据库通过复制数据库文件备份,可以直接复制备份的文件到MySQL数据目录下实现还原。通过这种方式还原时,必须保证备份数据的数据库和待还原的数据库服务器的主版本号相同。而且这种方式只对MyISAM引擎的表有效。对于InnoDB引擎的表不可用。

执行还原以前关闭MySQL服务,将备份的文件或目录覆盖MySQL的data目录,启动mysql服务。对于Linux/UNIX操作系统来说,复制完文件需要将文件的用户和组更改为MySQL运行的用户和组,通常用户是mysql,组也是mysql。

17.2.3 mysqlhotcopy快速恢复

mysqlhotcopy备份后的文件也可以用来恢复数据库,在MySQL服务器停止运行时,将备份的数据库文件拷贝到MySQL存放数据的位置(MySQL的data文件夹),重新启动MySQL服务即可。如果以根用户执行该操作,必须指定数据库文件的所有者,输入语句如下:

  chown -R mysql.mysql /var/lib/mysql/dbname

【例17.8】从mysqlhotcopy拷贝的备份恢复数据库,输入语句如下:

  cp –R /usr/backup/test usr/local/mysql/data

执行完该语句,重启服务器,MySQL将恢复到备份状态。

提 示

如果需要恢复的数据库已经存在,则需要使用DROP语句删除已经存在的数据库之后,恢复才能成功。另外,MySQL不同版本之间必须兼容,恢复之后的数据才可以使用。

教程类别