MySQL数据库备份学习篇(一)
1.物理备份与逻辑备份
1.1 物理备份
1.1.1 理解
备份数据文件,转储数据库物理文件到某一目录
1.1.2 特点
恢复速度比较快,但占用空间比较大
1.1.3 相关工具
mysql中可以使用xtrabackup进行物理备份
1.2 逻辑备份
1.2.1 理解
对数据库对象进行导出工作,汇总入备份文件中
**本质就是备份sql语句**
1.2.2 特点
占用空间小,更加灵活,通过执行备份的sql语句实现数据库数据的重现
1.2.3 相关工具
mysql中可以使用mysqldump进行物理备份
其中mysqldump是mysql安装时自带的工具
2 逻辑备份数据库
2.0 创建一个数据库DumpTest,里面有一张表users,其sql语句如下所示:
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`id` int NOT NULL AUTO_INCREMENT,
`username` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL,
`password` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of users
-- ----------------------------
INSERT INTO `users` VALUES (1, '张三', '123');
INSERT INTO `users` VALUES (2, '李四', '456');
SET FOREIGN_KEY_CHECKS = 1;
2.1 备份一个数据库
2.1.1 基本语法
mysqldump -P端口号 -u用户名 -h主机名称 -p密码 --ssl-mode DISABLED 数据库名称>备份的位置
mysql数据库端口号默认是3306
2.1.2 示例代码
mysqldump -uroot -P3305 -proot --ssl-mode DISABLED DumpTest>D:\test.sql
2.1.3 过程演示
a 运行截图
b 用记事本查看test.sql的内容
-- MySQL dump 10.13 Distrib 5.7.27, for Win64 (x86_64)
--
-- Host: localhost Database: DumpTest
-- ------------------------------------------------------
-- Server version 8.0.30
/*!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 `users`
--
DROP TABLE IF EXISTS `users`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `users` (
`id` int NOT NULL AUTO_INCREMENT,
`username` varchar(255) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `users`
--
LOCK TABLES `users` WRITE;
/*!40000 ALTER TABLE `users` DISABLE KEYS */;
INSERT INTO `users` VALUES (1,'张三','123'),(2,'李四','456');
/*!40000 ALTER TABLE `users` 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 2023-03-12 10:22:54
2.2 备份部分数据库(>1)
2.2.1 基本语法
mysqldump -P端口号 -u用户名 -h主机名称 -p密码 --ssl-mode DISABLED --databases 数据库1 数据库2...数据库n>备份的位置
mysql数据库端口号默认是3306
2.2.2 示例代码
mysqldump -uroot -P3305 -proot --ssl-mode DISABLED --databases test01 dumptest>D:\test.sql
-- 笔者这里更改的mysql数据库的端口号,因此是3305,没有更改的话就是3306
2.2.3 过程演示
a 运行截图
b 用记事本查看test.sql文件的内容
-- MySQL dump 10.13 Distrib 5.7.27, for Win64 (x86_64)
--
-- Host: localhost Database: test01
-- ------------------------------------------------------
-- Server version 8.0.30
/*!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: `test01`
--
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `test01` /*!40100 DEFAULT CHARACTER SET utf8mb3 */ /*!80016 DEFAULT ENCRYPTION='N' */;
USE `test01`;
--
-- Table structure for table `cmployee`
--
DROP TABLE IF EXISTS `cmployee`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `cmployee` (
`cmployee_id` varchar(15) NOT NULL,
`cmployee_name` varchar(10) DEFAULT NULL,
`dep_id` int NOT NULL,
`cmployee_age` int NOT NULL,
PRIMARY KEY (`cmployee_id`),
KEY `iddi` (`dep_id`),
CONSTRAINT `iddi` FOREIGN KEY (`dep_id`) REFERENCES `department` (`department_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `cmployee`
--
LOCK TABLES `cmployee` WRITE;
/*!40000 ALTER TABLE `cmployee` DISABLE KEYS */;
INSERT INTO `cmployee` VALUES ('17011234','张三',1,30),('17011235','李四',1,41),('17011236','王五',2,25),('17011237','赵六',2,45);
/*!40000 ALTER TABLE `cmployee` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `department`
--
DROP TABLE IF EXISTS `department`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `department` (
`department_id` int NOT NULL,
`department_name` varchar(20) DEFAULT NULL,
`department_grade` varchar(20) NOT NULL,
PRIMARY KEY (`department_id`),
UNIQUE KEY `department_name` (`department_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `department`
--
LOCK TABLES `department` WRITE;
/*!40000 ALTER TABLE `department` DISABLE KEYS */;
INSERT INTO `department` VALUES (1,'科技部','一级部门'),(2,'人力资源部','一级部门'),(3,'后勤部门','二级部门');
/*!40000 ALTER TABLE `department` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Current Database: `dumptest`
--
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `dumptest` /*!40100 DEFAULT CHARACTER SET utf8mb3 */ /*!80016 DEFAULT ENCRYPTION='N' */;
USE `dumptest`;
--
-- Table structure for table `users`
--
DROP TABLE IF EXISTS `users`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `users` (
`id` int NOT NULL AUTO_INCREMENT,
`username` varchar(255) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `users`
--
LOCK TABLES `users` WRITE;
/*!40000 ALTER TABLE `users` DISABLE KEYS */;
INSERT INTO `users` VALUES (1,'张三','123'),(2,'李四','456');
/*!40000 ALTER TABLE `users` 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 2023-03-12 10:54:55
2.3 备份所有的数据库
2.3.1 基本语法
mysqldump -P端口号 -u用户名 -h主机名称 -p密码 --ssl-mode DISABLED --all-databases>备份的位置
mysql数据库端口号默认是3306
2.3.2 示例代码
mysqldump -uroot -P3305 -proot --ssl-mode DISABLED --all-databases>D:\test.sql
-- 笔者这里更改的mysql数据库的端口号,因此是3305,没有更改的话就是3306