MySQL入门到精通(十八)

                                            备份和恢复


18.1 数据备份

备份数据是数据库管理员最常用的操作。为了保证数据库中的数据的安全,数据管理员需要定期进行数据备份。一旦数据遭到破坏,即通过备份的文件来还原数据库。

可能造成数据损坏的原因很多,大多数可以归纳为以下几个方面:

(1)存储介质故障:保存数据文件的磁盘设备损坏,同时又没有对数据备份,从而导致数据彻底丢失。

(2)服务器彻底瘫痪:数据库服务器彻底瘫痪,系统需要重建。

(3)用户的误操作:在删除数据库时,不小心删除了某些重要的数据,或者是整个数据库。

(4)黑客破坏:系统遭到黑客的恶意攻击,数据或者数据表被删除。

18.1.1 使用mysqldump命令备份

mysqldump命令可以将数据库中的数据备份成一个文本文件。表的结构和表中的数据将存储在生成的文本文件中。

mysqldump命令的工作原理:它先查出需要备份的表结构,再在文本文件中生成一条CREATE语句。然后,将表中的所有记录转换成一条INSERT语句。这些CREATE语句和INSERT语句都是还原时使用的。还原数据时就可以使用其中的CREATE语句来创建表。使用其中的INSERT语句来还愿数据。

在使用mysqldump命令进行数据备份时,经常分为以下3种形式:

1.备份一个数据库

使用mysqldump命令备份一个数据库的基本语法:

扫描二维码关注公众号,回复: 2298639 查看本文章

mysqldump -u username -p dbname table1 table2 ... > BackupName.sql 

其中,dbname参数标识数据库的名称;table1和table2参数表示表的名称,没有该参数时将备份整个数据库;BackupName.sql参数表示备份文件的名称,文件名前面可以加上一个绝对路径。通常将数据库备份成一个后缀名为.sql的文件。

2.备份多个数据库

使用mysqldump命令备份多个数据库的基本语法:

mysqldump -u username -p --database dbname1 dbname2 > BackupName.sql 

3.备份所有数据库

使用mysqldump命令备份所有数据库的基本语法:

mysqldump -u username -p --all -database > BackupName.sql 

18.1.2  直接复制整个数据库目录

MySQL有一种最简单的备份方法,就是将MySQL中的数据库文件直接复制出来。这种方法最简单,速度也最快。使用这种方法时,最好将服务器先停止。这样,可以保证在复制期间数据库中的数据不会发生变化。如果在复制期间还有数据写入,就会造成数据不一致。

说明:为保证所备份数据的完整性,在停止MySQL服务器之前,需要先执行FLUSH TABLES语句将所有数据写入到数据文件的文本文件里。

这种方法虽然简单快捷,但不是最好的备份方法。因此,在实际情况可能不允许停止MySQL服务器。而且,这种方法对InnoDB存储引擎的表不适用。对于MyISAM存储引擎的表,这样备份和还原很方便。但是还原时最好是相同版本的MySQL数据库,否则可能会存储文件类型不同的情况。

18.1.3 使用mysqlhotcopy工具快速备份

mysqlhotcopy使用lock tables、flush tables和cp或scp来快速备份数据库.它是备份数据库或单个表最快的途径,完全属于物理备份,但只能用于备份MyISAM存储引擎和ARCHIVE引擎,并且是一个服务器命令,只能运行在数据库目录所在的机器上.与mysqldump备份不同,mysqldump属于逻辑备份,备份时是执行的sql语句。使用mysqlhotcopy命令前需要要安装相应的软件依赖包,因为这个功能很弱,我们只简单的介绍一个怎么用:
备份一个库:mysqlhotcopy db_name [/path/to/new_directory]
备份一张表:mysqlhotcopy db_name./table_name/ /path/to/new_directory

18.2 数据恢复

18.2.1 使用mysql命令还原

通常使用mysqldump命令将数据库的数据备份成一个文本文件。通常这个文件的后缀名是.sql。需要还原时,可以使用mysql命令来还原备份的数据。数据库备份文件大于2M,用phpmyadmin没办法还原数据库,这时命令行备份/还原数据库就派上用场了。       

mysql命令的基本语法:mysql -u root -p dbname < backup.sql  

注意:如果使用--all-databases参数备份了所有的数据库,那么还原时不需要指定数据库。因为,其对应的.sql文件包含CREATE DATABASE语句,可以通过该语句创建数据库。创建数据库之后,可以执行.sql文件中的USE语句选择数据库,然后在数据库中创建表并且插入记录。

18.2.2 直接复制到数据库目录

之前介绍过一种直接复制数据的备份方法。通过这种方式备份的数据,可以直接复制到MySQL的数据库目录下。通过这种方式还原时,必须保证两个MySQL数据库的主版本号是相同的。而且,这种方式对MyISAM类型的表比较有效。对于InnoDB类型的表则不可用。因为InnoDB表的表空间不能直接复制。

使用mysqlhotcopy命令备份的数据也是通过这种方式来还原的。在Linux操作系统下,复制到数据库目录后,一定要将数据库的用户和组变成mysql,命令如下:

chown -R mysql.mysql dataDir

其中,两个mysql分别表示组合用户;-R参数可以改变文件夹下的所有子文件的用户和组;dataDir参数表示数据库目录。

注意:Linux操作系统下的权限设置非常严格。通常情况下,MySQL数据库只有root用户和mysql用户组下的mysql用户可以访问。因此,将数据库目录复制到指定文件夹后,一定要使用chown命令将文件夹的用户组变为mysql,将用户变为mysql。

猜你喜欢

转载自blog.csdn.net/weixin_42257895/article/details/80988376