MySQL学习(十四) 备份和还原

备份

1.逻辑备份方法

使用MYSQLDUMP命令备份

MYSQLDUMP是MYSQL提供的一个非常有用的数据库备份工具。mysqldump命令执行时将数据库备份成一个文本文件,

该文件中实际上包含了多个CREATE 和INSERT语句,使用这些语句可以重新创建表和插入数据

MYSQLDUMP的语法和选项


mysqldump -u user -p pwd -h host dbname[tbname,[tbname...]]>filename.sql

user表示用户名称;

host表示登录用户的主机名称;

pwd为登录密码;

dbname为需要备份的数据库名称;

tbname为dbname数据库中需要备份的数据表,可以指定多个需要备份的表;

右箭头“>”告诉mysqldump将备份数据库表定义和数据写入备份文件;

filename为备份文件的名称


如果要使用mysqldump备份多个数据库,需要使用--databases参数。

使用--databases参数之后,必须指定至少一个数据库的名称,多个数据库名称之间用空格隔开

使用mysqldump备份school库和test库

 备份文件里的内容,基本上跟第一个例子一样,但是指明了里面的内容那一部分属于test库,哪一部分属于school库

使用--all-databases不需要指定数据库名称

执行完毕之后会产生all_2014-7-10.sql的备份文件,里面会包含了所有数据库的备份信息



2.物理备份方法

1、直接复制整个数据库目录

因为MYSQL表保存为文件方式,所以可以直接复制MYSQL数据库的存储目录以及文件进行备份。

MYSQL的数据库目录位置不一定相同,在Windows平台下,MYSQL5.6存放数据库的目录通常默认为

C:\Documents and Settings\All User\Application Data\MySQL\MYSQL Server 5.6\data

或者其他用户自定义的目录;

在Linux平台下,数据库目录位置通常为/var/lib/mysql/,不同Linux版本下目录会有不同

 

这是一种简单、快速、有效的备份方式。要想保持备份一致,备份前需要对相关表执行LOCK TABLES操作,然后对表执行

FLUSH TABLES。这样当复制数据库目录中的文件时,允许其他客户继续查询表。需要FLUSH TABLES语句来确保开始

备份前将所有激活的索引页写入磁盘。

当然,也可以停止MYSQL服务再进行备份操作

 

这种方法虽然简单,但并不是最好的方法。因为这种方法对INNODB存储引擎的表不适用。使用这种方法备份的数据最好还原

到相同版本的服务器中,不同的版本可能不兼容。

 

注意:在mysql版本中,第一个数字表示主版本号,主版本号相同的MYSQL数据库文件格式相同


还原

物理备份方法

1、直接复制整个数据库目录

因为MYSQL表保存为文件方式,所以可以直接复制MYSQL数据库的存储目录以及文件进行备份。

MYSQL的数据库目录位置不一定相同,在Windows平台下,MYSQL5.6存放数据库的目录通常默认为

C:\Documents and Settings\All User\Application Data\MySQL\MYSQL Server 5.6\data

或者其他用户自定义的目录;

在Linux平台下,数据库目录位置通常为/var/lib/mysql/,不同Linux版本下目录会有不同

 

这是一种简单、快速、有效的备份方式。要想保持备份一致,备份前需要对相关表执行LOCK TABLES操作,然后对表执行

FLUSH TABLES。这样当复制数据库目录中的文件时,允许其他客户继续查询表。需要FLUSH TABLES语句来确保开始

备份前将所有激活的索引页写入磁盘。

当然,也可以停止MYSQL服务再进行备份操作

 

这种方法虽然简单,但并不是最好的方法。因为这种方法对INNODB存储引擎的表不适用。使用这种方法备份的数据最好还原

到相同版本的服务器中,不同的版本可能不兼容。

 

注意:在mysql版本中,第一个数字表示主版本号,主版本号相同的MYSQL数据库文件格式相同

还原


逻辑还原

1、使用mysql命令进行还原

对于已经备份的包含CREATE、INSERT语句的文本文件,可以使用myslq命令导入数据库中

 

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

其语法如下:

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

user是执行backup.sql中语句的用户名;-p表示输入用户密码;dbname是数据库名

如果filename.sql文件为mysqldump工具创建的包含创建数据库语句的文件,执行的时候不需要指定数据库名

用mysql命令将school_2014-7-10.sql文件中的备份导入到数据库中

mysql -u root -h 127.0.0.1 -p school<c:\school_2014-7-10.sql

执行语句之前我们必须建好school数据库,如果不存在恢复过程将会出错。

可以看到表数据都已经导入到数据库了

 

如果已经登录mysql,那么可以使用source命令导入备份文件

使用source命令导入备份文件school_2014-7-10.sql

执行source命令前必须使用use 语句选择好数据库,不然会出现ERROR 1046(3D000):NO DATABASE SELECTED 的错误

还有一点要注意的是只能在cmd界面下执行,不能在mysql工具里面执行source命令,否则会报错

因为cmd是直接调用mysql.exe来执行命令的

而这些mysql 编辑工具只是利用mysql connector连接mysql,来管理mysql并不是直接调用mysql.exe,所以执行source会报错


物理还原

2、直接复制到数据库目录

如果数据库通过复制数据库文件备份,可以直接复制备份文件到MYSQL数据目录下实现还原。通过这种方式还原时,

必须保证备份数据的数据库和待还原的数据库服务器的主版本号相同。

而且这种方式只对MYISAM引擎有效,对于innodb引擎的表不可用

 

执行还原以前关闭mysql服务,将备份的文件或目录覆盖mysql的data目录,启动mysql服务。

对于Linux操作系统来说,复制完文件需要将文件的用户和组更改为mysql运行的用户和组,通常用户是mysql,组也是mysql


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章