MySQL数据备份与还原

1.数据备份
1.1使用mysqldump命令备份
mysqldump备份的语法格式:
mysqldump -u -h -p password dbname[tbname,[tbname...]] >filename.sql
1.使用mysqldump备份单个数据中的所有表
例:使用mysqldump命令备份数据库中的所有表,执行过程如下:

  • 首先登录数据库,创建一个booksDB数据库:
mysql> CREATE DATABASE booksDB;
Query OK, 1 row affected (0.00 sec)
  • 使用数据库booksDB,创建数据表:
mysql> USE booksDB;
Database changed
mysql> CREATE TABLE books(
    -> bk_id INT NOT NULL PRIMARY KEY,
    -> bk_title VARCHAR(50) NOT NULL,
    -> copyright YEAR NOT NULL
    -> );
Query OK, 0 rows affected (0.47 sec)

mysql> INSERT INTO books
    -> VALUES(11078,'Learning MySQL',2010),
    -> (11033,'Study Html',2011),
    -> (11035,'How to use php',2003),
    -> (11072,'Teach yourself javascript',2005),
    -> (11028,'Learning C++',2005),
    -> (11069,'MySQL professional',2009),
    -> (11026,'Guide to MySQL 5.5',2008),
    -> (11041,'Inside C++',2011);
Query OK, 8 rows affected (0.42 sec)
Records: 8  Duplicates: 0  Warnings: 0

mysql> CREATE TABLE authors(
    -> auth_id INT NOT NULL PRIMARY KEY,
    -> auth_name VARCHAR(20),
    -> auth_gender CHAR(1)
    -> );
Query OK, 0 rows affected (0.44 sec)

mysql> INSERT INTO authors
    -> VALUES(1001,'WriterX','f'),
    -> (1002,'WriterA','f'),
    -> (1003,'WriterB','m'),
    -> (1004,'WriterC','F'),
    -> (1011,'WriterD','f'),
    -> (1012,'WriterE','m'),
    -> (1013,'WriterF','m'),
    -> (1014,'WriterG','f'),
    -> (1015,'WriterH','f');
Query OK, 9 rows affected (0.14 sec)
Records: 9  Duplicates: 0  Warnings: 0

mysql> CREATE TABLE authorbook(
    -> auth_id INT NOT NULL,
    -> bk_id INT NOT NULL,
    -> PRIMARY KEY(auth_id,bk_id),
    -> FOREIGN KEY(auth_id)REFERENCES authors (auth_id),
    -> FOREIGN KEY(bk_id)REFERENCES books (bk_id)
    -> );
Query OK, 0 rows affected (0.66 sec)

mysql> INSERT INTO authorbook
    -> VALUES(1001,11033),
    -> (1002,11035),
    -> (1003,11072),
    -> (1004,11028),
    -> (1011,11078),
    -> (1012,11026),
    -> (1012,11041),
    -> (1014,11069);
Query OK, 8 rows affected (0.05 sec)
Records: 8  Duplicates: 0  Warnings: 0
  • 完成数据插入后,在自己喜欢的某个盘下创建文件夹,再打开操作系统的命令行窗口,输入备份命令如下:
C:\Users\lenovo>mysqldump -u root -p booksdb>E:\MYSQLtest\booksdb_20181114.sql
Enter password: ******

这里是在E:\MYSQLtest文件下进行操作的。
进行如上操作后,打开E:\MYSQLtest文件夹,可以看到大致如下备份信息:

-- MySQL dump 10.13  Distrib 5.7.14, for Win64 (x86_64)
--
-- Host: localhost    Database: booksdb
-- ------------------------------------------------------
-- Server version	5.7.14

/*!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 `authorbook`
--

DROP TABLE IF EXISTS `authorbook`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `authorbook` (
  `auth_id` int(11) NOT NULL,
  `bk_id` int(11) NOT NULL,
  PRIMARY KEY (`auth_id`,`bk_id`),
  KEY `bk_id` (`bk_id`),
  CONSTRAINT `authorbook_ibfk_1` FOREIGN KEY (`auth_id`) REFERENCES `authors` (`auth_id`),
  CONSTRAINT `authorbook_ibfk_2` FOREIGN KEY (`bk_id`) REFERENCES `books` (`bk_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `authorbook`
--

LOCK TABLES `authorbook` WRITE;
/*!40000 ALTER TABLE `authorbook` DISABLE KEYS */;
INSERT INTO `authorbook` VALUES (1012,11026),(1004,11028),(1001,11033),(1002,11035),(1012,11041),(1014,11069),(1003,11072),(1011,11078);
/*!40000 ALTER TABLE `authorbook` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `authors`
--

DROP TABLE IF EXISTS `authors`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `authors` (
  `auth_id` int(11) NOT NULL,
  `auth_name` varchar(20) DEFAULT NULL,
  `auth_gender` char(1) DEFAULT NULL,
  PRIMARY KEY (`auth_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `authors`
--
...
...省略部分内容
...
/*!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 2018-11-14  8:16:44

可以看到备份文件包含了一些信息,文件开头表明了备份文件使用的是mysqldump工具的版本号;接着是备份账户和主机信息,以及备份的数据库名称,最后是mysql服务器版本号。

关于SET语句,SET语句将一些系统变量赋值给用户定义变量,以确保被恢复的数据库的系统变量和原来备份时的变量相同。如:

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

这里SET语句将当前系统变量CHARACTER_SET_CLIENT的值赋给用户定义变量@OLD_CHARACTER_SET_CLIENT。其他变量与此类似。
备份文件的最后几行,MySQL使用SET语句恢复服务器系统原来的值,例如:

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

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

符号的含义:

- - /*! … */
行为注释语句 可执行的MySQL注释

(注:40101表明这些语句只有在MySQL版本号为4.01.01或者更高的条件下才可以被执行)

2.使用mysqldump备份数据库中的某个表
语法格式:
mysqldump -u user -h host -p dbname [tbname,[tbname...]] > filename.sql
多个表名之间用空格隔开。
备份表与备份数据库中所有表的语句中不同的地方在于,要在数据库名称dbname后指定要备份的表名称。
例:备份数据库booksDB中的books表,输入语句如下:

C:\Users\lenovo>mysqldump -u root -p booksDB books>E:\MYSQLtest\books_20181114.sql
Enter password: ******

books_20181114.sql文件中只含有books表的CREATE和INSERT语句。

3.使用mysqldump备份多个数据库
语句格式:

mysqldump -u user -h host -p --databases [dbname,[dbname...]]>filename.sql

例:使用mysqldump备份booksDB和test_db数据库,输入语句如下:

C:\Users\lenovo>mysqldump -u user -h  host -p --databases booksDB test_db>E:\MYSQLtest\books_testDB_20181114.sql
Enter password: ******

另外,--all-databases参数可备份系统中所有数据库。
例:

C:\Users\lenovo>mysqldump -u root -p --all-databases>E:\MYSQLtest\alldbinMySQL_20181114.sql
Enter password: ******

**!!!提示:如果在服务器上进行备份,并且表均为MyISAM表,应考虑使用mysqlhotcopy,这样可以更快捷地恢复和备份。

1.2直接复制整个数据库目录
1.使用mysqlhotcopy工具快速备份
语法格式:

mysqlhotcopy db_name_1,...,db_name_n /path/to/new_directory

猜你喜欢

转载自blog.csdn.net/weixin_43037507/article/details/83993035