mysqldump 是MySQL自带的逻辑备份工具。它的备份原理是通过协议连接到MySQL数据库,将需要备份的数据查询出来,将查询出的数据转换成对应的insert语句,当我们需要还原这些数据时,只要执行这些insert语句,即可将对应的数据还原。下面语句可以列出mysqldump的帮助信息。
mysqldump --help # 输出的信息如下: mysqldump Ver 8.0.20 for Linux on x86_64 (MySQL Community Server - GPL) Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Dumping structure and contents of MySQL databases and tables. Usage: mysqldump [OPTIONS] database [tables] OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] OR mysqldump [OPTIONS] --all-databases [OPTIONS] ......
视频讲解如下:
下面通过几个例子来说明如何使用mysqldump进行备份与恢复。
(1)创建mysqldump备份存储的目录。
mkdir -p /databackup/mysqldump
(2)备份所有数据库。
mysqldump -uroot -pWelcome_1 --all-databases > /databackup/mysqldump/all.db
(3)查看文件/databackup/mysqldump/all.db的内容
more /databackup/mysqldump/all.db # 输出的信息如下: ...... -- -- Current Database: `demo1` -- CREATE DATABASE /*!32312 IF NOT EXISTS*/ `demo1` /*!40100 DEFAULT CHARACTER SET utf8 */ /*!80016 DEFAULT ENCRYPTION='N' */; USE `demo1`; -- -- Table structure for table `audit_message` -- DROP TABLE IF EXISTS `dept`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `dept` ( `deptno` int NOT NULL, `dname` varchar(10) DEFAULT NULL, `loc` varchar(10) DEFAULT NULL, PRIMARY KEY (`deptno`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `dept` -- LOCK TABLES `dept` WRITE; /*!40000 ALTER TABLE `dept` DISABLE KEYS */; INSERT INTO `dept` VALUES (10,'ACCOUNTING','NEW YORK'), (20,'RESEARCH','DALLAS'),(30,'SALES','CHICAGO'), (40,'OPERATIONS','BOSTON'); /*!40000 ALTER TABLE `dept` ENABLE KEYS */; UNLOCK TABLES; ...... # 提示:从all.db的内容可以看出mysqldump备份将备份的数据转换成了SQL语句。
(4)备份指定数据库
mysqldump -uroot -pWelcome_1 demo1 > /databackup/mysqldump/demo1.db
(5)备份指定数据库指定表(多个表以空格间隔)
mysqldump -uroot -pWelcome_1 demo1 test2 test3 emp \ > /databackup/mysqldump/multi_tables.db
(6)备份指定数据库排除某些表不进行备份
mysqldump -uroot -pWelcome_1 demo1 --ignore-table=demo1.test2 \ --ignore-table=demo1.test3 > /databackup/mysqldump/demo2.db
(7)删除demo1数据库
mysqladmin -uroot -pWelcome_1 drop demo1 # 输出的信息如下: Dropping the database is potentially a very bad thing to do. Any data stored in the database will be destroyed. Do you really want to drop the 'demo1' database [y/N] y Database "demo1" dropped
(8)执行恢复数据库demo1
mysqladmin -uroot -pWelcome_1 create demo1 mysql -uroot -pWelcome_1 demo1 < /databackup/mysqldump/demo1.db # 提示:在导入备份数据库前,demo1如果没有,则需要事先创建。
(9)检查数据是否恢复