1月阅读周·MySQL数据库入门:数据备份与还原之数据的备份篇
背景
去年下半年,我在微信书架里加入了许多技术书籍,各种类别的都有,断断续续的读了一部分。
没有计划的阅读,收效甚微。
新年伊始,我准备尝试一下其他方式,比如阅读周。每月抽出1~2个非连续周,完整阅读一本书籍。
这个“玩法”虽然常见且板正,但是有效,已经坚持阅读十二个月。
已读完书籍:《架构简洁之道》、《深入浅出的Node.js》、《你不知道的JavaScript(上卷)》、《你不知道的JavaScript(中卷)》、《你不知道的JavaScript(下卷)》、《数据结构与算法JavaScript描述》、《WebKit技术内幕》、《前端架构:从入门到微前端》、《秒懂算法:用常识解读数据结构与算法》、《JavaScript权威指南》、《JavaScript异步编程设计快速响应的网络应用》、《编写可测试的JavaScript代码》。
当前阅读周书籍:《MySQL数据库入门》。
数据的备份
日常生活中,人们经常需要为自己家的房门多配几把钥匙,为自己的爱车准备一个备胎,这些事情其实都是在做备份。在数据库的维护过程中,数据也经常需要备份,以便在系统遭到破坏或其他情况下重新加以利用,为了完成这种功能,MySQL提供了一个mysqldump命令,它可以实现数据的备份。
mysqldump命令可以备份单个数据库、多个数据库和所有数据库,由于这三种备份方式比较类似,所以本节就以备份单个数据库为例来讲解mysqldump命令,其他方式只列举语法格式,具体如下。
1.备份单个数据库
mysqldump命令备份数据库的语法格式如下:
mysqldump -uusername -ppassword dbname [tbname1 [tbname2…]]>filename.sql
上述语法格式中,-u后面的参数username表示用户名,-p后面的参数password表示登录密码,dbname表示需要备份的数据库名称,tbname表示数据库中的表名,可以指定一个或多个表,多个表名之间用空格分隔,如果不指定则备份整个数据库,filename.sql表示备份文件的名称,文件名前可以加上绝对路径。
需要注意的是,在使用mysqldump命令备份数据库时,直接在DOS命令行窗口中执行该命令即可,不需要登录到MySQL数据库。
为了让初学者更好地掌握mysqldump命令如何使用,接下来通过具体的案例来演示,在演示之前创建一个名称为chapter08的数据库,并在数据库中创建表student,插入相应数据,SQL语句如下:
CREATE DATABASE chapter08;
USE chapter08;
CREATE TABLE student(
id int primary key auto_increment,
name varchar(20),
age int
);
INSERT INTO student(name,age) VALUES ('Tom',20);
INSERT INTO student(name,age) VALUES ('Jack',16);
INSERT INTO student(name,age) VALUES ('Lucy',18);
上述SQL语句执行成功后。为了验证数据是否添加成功,使用SELECT语句查询表student,查询结果如下:
mysql>SELECT * FROM student;
+----+------+------+
| id | name | age |
+----+------+------+
| 1 | Tom | 20 |
| 2 | Jack | 16 |
| 3 | Lucy | 18 |
+----+------+------+
3 rows in set (0.00 sec)
从上述查询结果可以看出,数据添加成功了。
【例1-1】首先在C盘创建一个名为backup的文件夹用于存放备份好的文件,然后重新开启一个DOS命令行窗口(不用登录到MySQL数据库),使用mysqldump命令备份chapter08数据库,mysqldump语句如下:
mysqldump -uroot -pitcast chapter08>C:/backup/chapter08_20140305.sql
上述语句执行成功后,会在backup文件夹中生成一个名为chapter08_20140305.sql的备份文件,使用记事本打开该文件,可以看到如下所示的内容:
--MySQL dump 10.13 Distrib 5.5.27, for Win32 (x86)
--
--Host: localhost Database: chapter08
--------------------------------------------------------
--Server version5.5.27
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
…
省略部分信息
…
--
-- 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(11) NOT NULL AUTO_INCREMENT,
'name' varchar(20) DEFAULT NULL,
'age' int(11) DEFAULT NULL,
PRIMARY KEY ('id')
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=gbk;
/*!40101 SET character_set_client = @saved_cs_client */;
…
省略部分信息
…
--Dump completed on 2014-03-05 18:15:39
从上述文件可以看出,备份文件中会包含mysqldump的版本号、MySQL的版本号、主机名称、备份的数据库名称,以及一些SET语句、CREATE语句、INSERT语句、注释信息等。其中以“--”字符开头的都是SQL的注释;以“/*!”开头、“*/”结尾的语句都是可执行的MySQL注释,这些语句可以被MySQL执行,但在其他数据库管理系统中将被作为注释忽略,这可以提高数据库的可移植性。
需要注意的是,以“/*!40101”开头、“*/”结尾的注释语句中,40101是MySQL数据库的版本号,相当于MySQL 4.1.1,在还原数据时,如果当前MySQL的版本比MySQL 4.1.1高,“/*!40101”和“*/”之间的内容就被当作SQL命令来执行,如果比当前版本低,“/*!40101”和“*/”之间的内容就被当作注释。
2.备份多个数据库
mysqldump命令不仅可以备份一个数据,还同时可以备份多个数据库,其语法格式如下:
mysqldump -uusername -ppassword --database dbname1 [dbname2 dbname3…]>
filename.sql
上述语法格式中,“--database”参数后面至少应指定一个数据库名称,如果有多个数据库,则名称之间用空格隔开。
3.备份所有数据库
使用mysqldump命令备份所有数据库时,只需在该命令后使用“--all-databases”参数即可,其语法格式如下:
mysqldump -uusername -ppassword --all-databases>filename.sql
需要注意的是,如果使用“--all-databases”参数备份了所有的数据库,那么在还原数据库时,不需要创建数据库并指定要操作的数据库,因为对应的备份文件中包含CREATE DATABASE语句和USE语句。
总结
在操作数据库时,难免会发生一些意外造成数据丢失。例如,突然停电、管理员的操作失误都可能导致数据的丢失。为了确保数据的安全,需要定期对数据库进行备份,这样,当遇到数据库中数据丢失或者出错的情况,就可以将数据进行还原,从而最大限度地降低损失。
在数据库的维护过程中,数据也经常需要备份,以便在系统遭到破坏或其他情况下重新加以利用,为了完成这种功能,MySQL提供了一个mysqldump命令,它可以实现数据的备份。
作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏⭐️ | 留言📝。
- 点赞
- 收藏
- 关注作者
评论(0)