MySQL备份和恢复总结

2019年12月09日 阅读数:189
这篇文章主要向大家介绍MySQL备份和恢复总结,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。
MYSQL里的备份分为逻辑备份和物理备份,还原的时候一样分逻辑还原和物理还原

备份html

逻辑备份方法mysql

使用MYSQLDUMP命令备份sql

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

该文件中实际上包含了多个CREATE 和INSERT语句,使用这些语句能够从新建立表和插入数据express

MYSQLDUMP的语法和选项服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
mysqldump -u user -p pwd -h host dbname[tbname,[tbname...]]>filename.sql
 
选项/ Option 做用/ Action Performed
--add-drop-table
这个选项将会在每个表的前面加上 DROP TABLE IF EXISTS语句,这样能够保证导回MySQL数据库的时候不会出错,由于每次导回的时候,都会首先检查表是否存在,存在就删除
--add-locks
这个选项会在 INSERT 语句中捆上一个LOCK TABLE 和UNLOCK TABLE 语句。这就防止在这些记录被再次导入数据库时其余用户对表进行的操做
-c or - complete_insert
这个选项使得mysqldump命令给每个产生 INSERT 语句加上列(field)的名字。当把数据导出导另一个数据库时这个选项颇有用。
--delayed-insert 在INSERT命令中加入DELAY选项
-F or -flush-logs 使用这个选项,在执行导出以前将会刷新MySQL服务器的log.
-f or - force 使用这个选项,即便有错误发生,仍然继续导出
--full 这个选项把附加信息也加到CREATE TABLE的语句中
-l or -lock-tables 使用这个选项,导出表的时候服务器将会给表加锁。
-t or - no - create - info
这个选项使的mysqldump命令不建立 CREATE TABLE 语句,这个选项在您只须要数据而不须要DDL(数据库定义语句)时很方便。
-d or - no -data 这个选项使的mysqldump命令不建立 INSERT 语句。
在您只须要DDL语句时,可使用这个选项。
--opt 此选项将打开全部会提升文件导出速度和创造一个能够更快导入的文件的选项。
-q or -quick 这个选项使得MySQL不会把整个导出的内容读入内存再执行导出,而是在读到的时候就写入导文件中。
-T path or -tab = path 这个选项将会建立两个文件,一个文件包含DDL语句或者表建立语句,另外一个文件包含数据。DDL文件被命名为table_name.sql,数据文件被命名为table_name.txt.路径名是存放这两个文件的目录。目录必须已经存在,而且命令的使用者有对文件的特权。
-w "WHERE Clause" or - where = "Where clause "
如前面所讲的,您可使用这一选项来过筛选将要放到 导出文件的数据。
假定您须要为一个表单中要用到的账号创建一个文件,经理要看今年(2004年)全部的订单(Orders),它们并不对DDL感兴趣,而且须要文件有逗号分隔,由于这样就很容易导入到Excel中。 为了完成这个任务,您可使用下面的句子:
bin/mysqldump –p – where "Order_Date >='2000-01-01'"
–tab = /home/mark – no - create -info –fields-terminated- by =, Meet_A_Geek Orders
这将会获得您想要的结果。
schema :模式
The set of statements, expressed in data definition language, that completely describe the structure of a data base.
一组以数据定义语言来表达的语句集,该语句集完整地描述了数据库的结构。
SELECT INTO OUTFILE :

mysqldump提供了不少选项,包括调试和压缩的,在这里只是列举最有用的。架构

运行帮助命令mysqldump –help能够得到特定版本的完整选项列表oracle

user表示用户名称;socket

host表示登陆用户的主机名称;工具

pwd为登陆密码;

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

tbname为dbname数据库中须要备份的数据表,能够指定多个须要备份的表;

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

filename为备份文件的名称


一、使用mysqldump备份单个数据库中的全部表

数据库的记录是这样的

打开cmd,而后执行下面的命令

能够看到C盘下面已经生成了school_2014-7-10.sql文件

使用editplus来打开这个sql文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
-- MySQL dump 10.13  Distrib 5.5.20, for Win32 (x86)
--
-- Host: 127.0.0.1    Database: school
-- ------------------------------------------------------
-- Server version    5.5.20-log
 
/*!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 */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE= '+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE= 'NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
 
--
-- Table structure for table `book`
--
 
DROP TABLE IF EXISTS `book`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `book` (
   `bookid` int (11) NOT NULL ,
   `bookname` varchar (255) NOT NULL ,
   `authors` varchar (255) NOT NULL ,
   `info` varchar (255) DEFAULT NULL ,
   `comment` varchar (255) DEFAULT NULL ,
   `year_publication` year (4) NOT NULL ,
   KEY `BkNameIdx` (`bookname`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
 
--
-- Dumping data for table `book`
--
 
LOCK TABLES `book` WRITE;
/*!40000 ALTER TABLE `book` DISABLE KEYS */;
INSERT INTO `book` VALUES (1, '鍓戝湥' , '灏忔槑' , '13' , 'hao' ,2013);
/*!40000 ALTER TABLE `book` ENABLE KEYS */;
UNLOCK TABLES;
 
--
-- 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` (
   `stuno` int (11) DEFAULT NULL ,
   `stuname` varchar (60) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
 
--
-- Dumping data for table `student`
--
 
LOCK TABLES `student` WRITE;
/*!40000 ALTER TABLE `student` DISABLE KEYS */;
INSERT INTO `student` VALUES (2, 'xiaofang' ),(3, 'zhanghai' ),(6, 'haojie' );
/*!40000 ALTER TABLE `student` ENABLE KEYS */;
UNLOCK TABLES;
 
--
-- Table structure for table `stuinfo`
--
 
DROP TABLE IF EXISTS `stuinfo`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `stuinfo` (
   `stuno` int (11) DEFAULT NULL ,
   `class` varchar (60) DEFAULT NULL ,
   `city` varchar (60) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
 
--
-- Dumping data for table `stuinfo`
--
 
LOCK TABLES `stuinfo` WRITE;
/*!40000 ALTER TABLE `stuinfo` DISABLE KEYS */;
INSERT INTO `stuinfo` VALUES (1, 'wuban' , 'henan' ),(2, 'liuban' , 'hebei' ),(3, 'qiban' , 'shandong' );
/*!40000 ALTER TABLE `stuinfo` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
 
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
 
-- Dump completed on 2014-07-23 22:04:16

能够看到,备份文件包含了一些信息,文件开头首先写明了mysqldump工具的版本号;

而后是主机信息,以及备份的数据库名称,最后是mysql服务器的版本号5.5.20

备份文件接下来的部分是一些SET语句,这些语句将一些系统变量赋值给用户定义变量,以确保被恢复的数据库的系统变量和原来

备份时的变量相同

例如:

1
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;

该set语句将当前系统变量character_set_client的值赋值给用户变量@OLD_CHARACTER_SET_CLIENT

备份文件的最后几行mysql使用set语句恢复服务器系统变量原来的值,例如:

1
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

该语句将用户定义变量@OLD_CHARACTER_SET_CLIENT 中保存的值赋值给实际的系统变量OLD_CHARACTER_SET_CLIENT

备份文件中的“–”字符开头的行为注释语句;以“/*!”开头、以“*/”结尾的语句为可执行的mysql注释,这些语句能够被mysql执行

但在其余数据库管理系统将被做为注释忽略,这能够提升数据库的可移植性

另外注意到,备份文件开始的一些语句以数字开头,这些数字表明了mysql版本号,该数字告诉咱们这些语句只有在指定的mysql版本

或者比该版本高的状况下才能执行。

例如:40101,代表这些语句只有在mysql版本为4.01.01或者更高版本的条件下才能够执行


二、使用mysqldump备份数据库中的某个表

备份school数据库里面的book表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
-- MySQL dump 10.13  Distrib 5.5.20, for Win32 (x86)
--
-- Host: 127.0.0.1    Database: school
-- ------------------------------------------------------
-- Server version    5.5.20-log
 
/*!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 */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE= '+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE= 'NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
 
--
-- Table structure for table `book`
--
 
DROP TABLE IF EXISTS `book`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `book` (
   `bookid` int (11) NOT NULL ,
   `bookname` varchar (255) NOT NULL ,
   `authors` varchar (255) NOT NULL ,
   `info` varchar (255) DEFAULT NULL ,
   `comment` varchar (255) DEFAULT NULL ,
   `year_publication` year (4) NOT NULL ,
   KEY `BkNameIdx` (`bookname`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
 
--
-- Dumping data for table `book`
--
 
LOCK TABLES `book` WRITE;
/*!40000 ALTER TABLE `book` DISABLE KEYS */;
INSERT INTO `book` VALUES (1, '剑圣' , '小明' , '13' , 'hao' ,2013);
/*!40000 ALTER TABLE `book` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
 
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
 
-- Dump completed on 2014-07-23 22:24:29

备份文件中的内容跟前面的介绍是同样的,惟一不一样的是只包含了book表的CREATE语句和INSERT语句


三、使用mysqldump备份多个数据库

若是要使用mysqldump备份多个数据库,须要使用–databases参数。

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

使用mysqldump备份school库和test库

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
-- MySQL dump 10.13  Distrib 5.5.20, for Win32 (x86)
--
-- Host: 127.0.0.1    Database: school
-- ------------------------------------------------------
-- Server version    5.5.20-log
 
/*!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 */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE= '+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE= 'NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
 
--
-- Current Database: `school`
--
 
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `school` /*!40100 DEFAULT CHARACTER SET utf8 */;
 
USE `school`;
 
--
-- Table structure for table `book`
--
 
DROP TABLE IF EXISTS `book`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `book` (
   `bookid` int (11) NOT NULL ,
   `bookname` varchar (255) NOT NULL ,
   `authors` varchar (255) NOT NULL ,
   `info` varchar (255) DEFAULT NULL ,
   `comment` varchar (255) DEFAULT NULL ,
   `year_publication` year (4) NOT NULL ,
   KEY `BkNameIdx` (`bookname`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
 
--
-- Dumping data for table `book`
--
 
LOCK TABLES `book` WRITE;
/*!40000 ALTER TABLE `book` DISABLE KEYS */;
INSERT INTO `book` VALUES (1, '剑圣' , '小明' , '13' , 'hao' ,2013);
/*!40000 ALTER TABLE `book` ENABLE KEYS */;
UNLOCK TABLES;
 
--
-- 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` (
   `stuno` int (11) DEFAULT NULL ,
   `stuname` varchar (60) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
 
--
-- Dumping data for table `student`
--
 
LOCK TABLES `student` WRITE;
/*!40000 ALTER TABLE `student` DISABLE KEYS */;
INSERT INTO `student` VALUES (2, 'xiaofang' ),(3, 'zhanghai' ),(6, 'haojie' );
/*!40000 ALTER TABLE `student` ENABLE KEYS */;
UNLOCK TABLES;
 
--
-- Table structure for table `stuinfo`
--
 
DROP TABLE IF EXISTS `stuinfo`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `stuinfo` (
   `stuno` int (11) DEFAULT NULL ,
   `class` varchar (60) DEFAULT NULL ,
   `city` varchar (60) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
 
--
-- Dumping data for table `stuinfo`
--
 
LOCK TABLES `stuinfo` WRITE;
/*!40000 ALTER TABLE `stuinfo` DISABLE KEYS */;
INSERT INTO `stuinfo` VALUES (1, 'wuban' , 'henan' ),(2, 'liuban' , 'hebei' ),(3, 'qiban' , 'shandong' );
/*!40000 ALTER TABLE `stuinfo` ENABLE KEYS */;
UNLOCK TABLES;
 
--
-- Current Database: `test`
--
 
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `test` /*!40100 DEFAULT CHARACTER SET utf8 */;
 
USE `test`;
 
--
-- Table structure for table `book`
--
 
DROP TABLE IF EXISTS `book`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `book` (
   `bookid` int (11) NOT NULL ,
   `bookname` varchar (255) NOT NULL ,
   `authors` varchar (255) NOT NULL ,
   `info` varchar (255) DEFAULT NULL ,
   `comment` varchar (255) DEFAULT NULL ,
   `year_publication` year (4) NOT NULL ,
   KEY `year_publication` (`year_publication`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
 
--
-- Dumping data for table `book`
--
 
LOCK TABLES `book` WRITE;
/*!40000 ALTER TABLE `book` DISABLE KEYS */;
INSERT INTO `book` VALUES (12, 'dajiahao' , 'NIHAO' , '??' , 'henhao' ,1990);
/*!40000 ALTER TABLE `book` ENABLE KEYS */;
UNLOCK TABLES;
 
--
-- Table structure for table `innodb_monitor`
--
 
DROP TABLE IF EXISTS `innodb_monitor`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `innodb_monitor` (
   `a` int (11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
 
--
-- Dumping data for table `innodb_monitor`
--
 
LOCK TABLES `innodb_monitor` WRITE;
/*!40000 ALTER TABLE `innodb_monitor` DISABLE KEYS */;
/*!40000 ALTER TABLE `innodb_monitor` ENABLE KEYS */;
UNLOCK TABLES;
 
--
-- Table structure for table `test_innodb_lock`
--
 
DROP TABLE IF EXISTS `test_innodb_lock`;