Mysql教程

16.1 数据备份

备份数据是数据库管理中最常用的操作。为了保证数据库中数据的安全,数据库管理员需要定期的进行数据库备份。一旦数据库遭到破坏,即通过备份的文件来还原数据库。 因此,数据备份是很重要的工作。本节将为读者介绍数据备份的方法。

16.1.1 使用阳mysqldump命令备份

mysqldump命令可以将数据库中的数据备份成一个文本文件。表的结构和表中的数据将存储在生成的文本文件中。本小节将为读者介绍mysqldump命令的工作原理和使用方法。

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

1.备份一个数据库

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

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

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

技巧:mysqldump命令备份的文件并非一定要求后缀名为sql,备份成其他格式的文件也是可以的,例如,后缀名为.txt的文件。但是,通常情况下是备份成后缀名为.sql的文件。因为,后缀名为.sql的文件给人第一感觉就是与数据库有关的文件。

【示例16-1】下面使用root用户备份test数据库下的student表。命令如下:

 mysqldump -u root -p test student > C:\student.sql

命令执行完后,可以在C:\下找到student.sql文件。student.sql文件中的部分内容如下:

-MySQL dump 10.13 Distrib 5.1.40, for Win32 (ia32)
-Host: localhost Database: test
-Server version 5.1.4C^community
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*_01 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
-此处删除了部分内容
~ Table structure for table 'student'
DROP TABLE IF EXISTS student、;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE 'student' (
'id' int(10) NOT NULL, name、varchar(20) NOT NULL,
'sex' varchar(4) DEFAULT NULL,
*birth' year(4) DEFAULT NULL, department' varchar(20) DEFAULT NULL,
'address、varchar(50) DEFAULT NULL,
PRIMARY KEY ('id'),
UNIQUE KEY 'id' ('id')
)ENGINE=MylSAM DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
桪umping data for table 'student'
LOCK TABLES 'student' WRITE;
/*!40000 ALTER TABLE 'student' DISABLE KEYS */;
INSERT INTO 'student' VALUES (901,'张老大','男',1985,'计算机系','北京市海淀区'),(902,'张老二', '男',1986,'中文系','北京市昌平区’),(903,张三, '女',1990,'中文系','湖南省永州市'),(904,'李四','男',1990,'英语系','辽宁省阜新市'),(905,'王五','女’,1991,'英语系','福建省厦门市’),(906,'王六' ,'男',1998,'计算机系','湖南省衡阳市')
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
--此处删除了部分内容
--Dump completed on 2009-11-18 22:09:40

文件开头记录了MySQL的版本、备份的主机名和数据库名。文件中,以“--”开头的都是SQL语言的注释。以“/*!40101”等形式开头的是与MySQL有关的注释。40101是 MySQL数据库的版本号,这里就表示MySQL4.1.。如果还原数据时,MySQL的版本比 4.1.1高,“/*!40101”和“*/”之间的内容被当作SQL命令来执行。如果比4.1.1低,“/*!40101” 和“*/”之间的内容被当作注释。

后面的DROP语句、CERATE语句和INSERT语句都是还原时使用的;“DROP TABLE IF EXISTS 'student'”语句用来判断数据库中是否还有名为student的表;如果存在,就删除这个表;CREATE语句用来创建student表;INSERT语句用来还原所有数据。文件的最后记录了备份的时间。

注意:上面student.sql文件中没有创建数据库的语句,因此,student.sql文件中的所有表和记录必须还原到一个已经存在的数据库中。还原数据时,CREATE TABLE 语句会在数据库中创建表,然后执行INSERT语句向表中插入记录。

2. 备份多个数据库

mysqldump命令备份多个数据库的语法如下:

mysqldump -u usemame -p --databases dbname1 dbname2 ... > BackupName.sql

这里要加上“--databases”这个选项,然后后面跟多个数据库的名称。

【示例16-2】下面使用root用户备份test数据库和mysql数据库。命令如下:

mysqldump -u root -p --databases test mysql > C:\backup.sql

执行完后,可以在C:\下面看到名为backup.sql的文件,这个文件中存储着这两个数据库的所有信息。

3. 备份所有数据库

mysqldump命令备份所有数据库的语法如下:

mysqldump -u usemame -p -all-databases > BackupName.sql

使用“--all-databases”选项就可以备份所有数据库了。

【示例16-3】下面使用root用户备份所有数据库。命令如下:

mysqldump -u root -p -all-databases > C:\all.sql

执行完后,可以在C:\下面看到名为all.sql的文件。这个文件中存储着所有数据库的所有信息。

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

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

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

说明:第1章介绍过,在MySQL的版本号中,第一个数字表示主版本号。主版本号相同的MySQL数据库的文件类型会相同。例如,MySQL 5.1.39 和MySQL 5.1.40 这两个版本的主版本号都是5。那么这两个数据库的数据文件拥有相同的文件格式。

16.1.3 使用mysqlhotcopy工具快速备份

如果备份时不能停止MySQL服务器,可以采用mysqlhotcopy工具。mysqlhotcopy工具的备份方式比mysqldump命令快。下面为读者介绍mysqlhotcopy工具的工作原理和使用方法。

mysqlhotcopy工具是一个Perl脚本,主要在Linux操作系统使用。mysqlhotcopy工具使用LOCK TABLES、FLUSH TABLES和cp来进行快速备份。其工作原理是,先将需要备份的数据库加上一个读操作锁,然后,用FLUSH TABLES将内存中的数据写回到硬盘上的数据库中,最后,把需要备份的数据库文件复制到目标目录。使用mysqlhotcopy命令如下:

[root@localhost ~]# mysqlhotcopy [option] dbname1 dbname2 ... backupDir/

其中,dbname1等表示需要备份的数据库的名称;baCkUpDir参数指出备份到哪个文件夹下。这个命令的含义就是将dbnamel、dbname2等数据库备份到backDir目录下。mysqlhotcopy工具有一些常用的选项,这些选项的介绍如下:

  • --help:用来查看mysqlhotcopy的帮助

  • --allowold:如果备份目录下存在相同的备份文件,将旧的备份文件名加上old

  • --keepold:如果备份目录下存在相同的备份文件,不删除旧的备份文件,而是将旧文件更名

  • --flushlog:本次备份之后,将对数据库的更新记录到日志中

  • --noindices:只备份数据文件,不备份索引文件

  • --user=用户名:用来指定用户名,可以用-u代替

  • --password=密码:用来指定密码,可以用-p代替。使用-p时,密码与-p紧挨着。或者只使用-p,然后用交换的方式输入密码。这与登录数据库时的情况是一样的

  • --port=端口号:用来指定访问端口,可以用-P代替

  • --socket=socket文件:用来指定socket文件,可以用-s代替

注意:mysqlhotcopy工具不是MySQL自带的,需要安装Perl的数据库接口包。Perl数据库接口包可以在MySQL官方网站下载,网址是 http://dev.mysql.com/downloads/dbi.htmL

注意:mysqlhotcopy工具虽然速度快,使用起来很方便。但是,mysqlhotcopy工具需要安装Perl的数据库接口包。mysqlhotcopy工具的工作原理是将数据库文件拷贝到目标目录。因此mysqlhotcopy工具只能备份MyISAM类型的表,不能用来备份lnnoDB类型的表。


关注微信获取最新动态