MySQLmysqldump备份数据库及恢复数据库(mysql命令)
数据库的主要作⽤就是对数据进⾏保存和维护,所以备份数据是数据库管理中最常⽤的操作。为了防⽌数据库意外崩溃或硬件损伤⽽导致的数据丢失,数据库系统提供了备份和恢复策略。
保证数据安全的最重要的⼀个措施就是定期的对数据库进⾏备份。这样即使发⽣了意外,也会把损失降到最低。
数据库备份是指通过导出数据或者复制表⽂件的⽅式来制作数据库的副本。当数据库出现故障或遭到破坏时,将备份的数据库加载到系统,从⽽使数据库从错误状态恢复到备份时的正确状态。
MySQL 中提供了两种备份⽅式,即 mysqldump 命令以及 mysqlhotcopy 脚本。由于 mysqlhotcopy 只能⽤于 MyISAM 表,所以 MySQL 5.7移除了 mysqlhotcopy 脚本。
本节主要介绍如何使⽤ mysqldump 命令备份数据库。
mysqldump 命令执⾏时,可以将数据库中的数据备份成⼀个⽂本⽂件。数据表的结构和数据将存储在⽣成的⽂本⽂件中。
备份⼀个数据库
使⽤ mysqldump 命令备份⼀个数据库的语法格式如下:
mysqldump -u username -p dbname [tbname ...]> filename.sql
对上述语法参数说明如下:
username:表⽰⽤户名称;
dbname:表⽰需要备份的数据库名称;
tbname:表⽰数据库中需要备份的数据表,可以指定多个数据表。省略该参数时,会备份整个数据库;
右箭头“>”:⽤来告诉 mysqldump 将备份数据表的定义和数据写⼊备份⽂件;
filename.sql:表⽰备份⽂件的名称,⽂件名前⾯可以加绝对路径。通常将数据库备份成⼀个后缀名为.sql的⽂件。
注意:mysqldump 命令备份的⽂件并⾮⼀定要求后缀名为.sql,备份成其他格式的⽂件也是可以的。例如,后缀名为.txt的⽂件。通常情况下,建议备份成后缀名为.sql的⽂件。因为,后缀名为.sql的⽂件给⼈第⼀感觉就是与数据库有关的⽂件。
例 1
下⾯使⽤ root ⽤户备份 test 数据库下的 student 表。打开命令⾏(cmd)窗⼝,输⼊备份命令和密码,运⾏过程如下:
C:\Windows\system32>mysqldump -uroot -p test student>C:\student.sql
Enter password: ****
注意:mysqldump 命令必须在 cmd 窗⼝下执⾏,不能登录到 MySQL 服务中执⾏。
输⼊密码后,MySQL 会对 test 数据库下的 student 数据表进⾏备份。之后就可以在指定路径下查看刚才备份过的⽂件了。student.sql ⽂件中的部分内容如下:
-- MySQL dump 10.13  Distrib 5.7.29, for Win64 (x86_64)
--
-- Host: localhost    Database: test
-- ------------------------------------------------------
-- Server version 5.7.29-log
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 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(4) NOT NULL,
`name` varchar(20) DEFAULT NULL,
`stuno` int(11) DEFAULT NULL,
`age` int(4) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
/*!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 (1,'zhangsan',23,18),(2,'lisi',24,19),(3,'wangwu',25,18),(4,'zhaoliu',26,18);
/*!40000 ALTER TABLE `student` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
......
-- Dump completed on 2019-03-0913:03:15
View Code
student.sql ⽂件开头记录了 MySQL 的版本、备份的主机名和数据库名。
⽂件中,以“--”开头的都是 SQL 语⾔的注释。以 “/*!40101” 等形式开头的是与 MySQL 有关的注释。40101 是 MySQL 数据库的版本号,这⾥就表⽰ MySQL 4.1.1。如果恢复数据时,MySQL 的版本⽐ 4.1.1 ⾼,“/*!40101”和“*/”之间的内容被当作 SQL 命令来执⾏。如果⽐ 4.1.1
低,“/*!40101”和“*/”之间的内容被当作注释。“/*!”和“*/”中的内容在其它数据库中将被作为注释忽略,这可以提⾼数据库的可移植性。DROP 语句、CREATE 语句和 INSERT 语句都是数据库恢复时使⽤的;“DROP TABLE IF EXISTS 'student' ”语句⽤来判断数据库中是否还
有名为 student 的表,如果存在,就删除这个表;CREATE 语句⽤来创建 student 表;INSERT 语句⽤来恢复所有数据。⽂件的最后记录了备份的时间。
注意:上⾯ student.sql ⽂件中没有创建数据库的语句,因此,student.sql ⽂件中的所有表和记录必须恢复到⼀个已经存在的数据库中。恢复数据时,CREATE TABLE 语句会在数据库中创建表,然后执⾏ INSERT 语句向表中插⼊记录。
备份多个数据库
mysql数据库损坏修复
如果要使⽤ mysqldump 命令备份多个数据库,需要使⽤ --databases 参数。备份多个数据库的语法格式如下:
mysqldump -u username -P --databases dbname1 dbname2 ... > filename.sql
加上“--databases”参数后,必须指定⾄少⼀个数据库名称,多个数据库名称之间⽤空格隔开。
例 2
下⾯使⽤ root ⽤户备份 test 数据库和 mysql 数据库。命令如下:
mysqldump -u root -p --databases test mysql>C:\testandmysql.sql
执⾏完后,可以在C:\下⾯看到名为 testandmysql.sql 的⽂件,这个⽂件中存储着这两个数据库的信息。
备份所有数据库
mysqldump 命令备份所有数据库的语法格式如下:
mysqldump -u username -P --all-databases>filename.sql
使⽤“--all-databases”参数时,不需要指定数据库名称。
例 3
下⾯使⽤ root ⽤户备份所有数据库。命令如下:
mysqldump -u root -p --all-databases > C:\all.sql
执⾏完后,可以在C:\下⾯看到名为 all.sql 的⽂件,这个⽂件中存储着所有数据库的信息。
MySQL恢复数据库(mysql命令)
当数据丢失或意外损坏时,可以通过恢复已经备份的数据来尽量减少数据的丢失和破坏造成的损失。本节主要介绍如何对备份的数据进⾏恢复操作。
备份⽂件中通常包含 CREATE 语句和 INSERT 语句。
在 MySQL 中,可以使⽤ mysql 命令来恢复备份的数据。mysql 命令可以执⾏备份⽂件中的 CREATE 语句和 INSERT 语句,也就是
说,mysql 命令可以通过 CREATE 语句来创建数据库和表,通过 INSERT 语句来插⼊备份的数据。
mysql 命令语法格式如下:
mysql -u username -P [dbname] < filename.sql
其中:
username 表⽰⽤户名称;
dbname 表⽰数据库名称,该参数是可选参数。如果 filename.sql ⽂件为 mysqldump 命令创建的包含创建数据库语句的⽂件,则执⾏时不需要指定数据库名。如果指定的数据库名不存在将会报错;
filename.sql 表⽰备份⽂件的名称。
注意:mysql 命令和 mysqldump 命令⼀样,都直接在命令⾏(cmd)窗⼝下执⾏。
例 1
下⾯使⽤ root ⽤户恢复所有数据库,命令如下:
mysql -u root -p < C:\all.sql
执⾏完后,MySQL 数据库就已经恢复了 all.sql ⽂件中的所有数据库。
注意:如果使⽤--all-databases参数备份了所有的数据库,那么恢复时不需要指定数据库。因为,其对应的 sql ⽂件中含有 CREATE DATABASE 语句,可以通过该语句创建数据库。创建数据库之后,可以
执⾏ sql ⽂件中的 USE 语句选择数据库,然后在数据库中创建表并且插⼊记录。