计算机网络/计算机科学与应用/系统/运维/开发

MySQL8数据库备份的三种方式

一、备份数据库目录的第二种方式:mysqldump命令备份

语法:

mysqldump -u user -h host -ppassword dbName [tbName,[tbName...]] > filename.sql

user表示用户名称

host表示登录用户的主机名称

password为登录密码

dbname为需要备份的数据库名称

tbname为dbname数据库中需要备份的数据表,可以指定多个需要备份的表

右箭头符号 ">" 告诉mysqldump将备份数据表的定义和数据写入备份文件


filename.sql为备份文件的名称

1、备份单个booksdb数据库中的所有表

[root@VM-4-2-centos mysql]# mysqldump -u root -p booksdb > /booksdb.sql
Enter password:


查看备份后的文件内容:

-- MySQL dump 10.13  Distrib 8.0.30, for Linux (i686)
--
-- Host: localhost    Database: booksdb
-- ------------------------------------------------------
-- Server version       8.0.30
# SET语句将当前系统变量character_set_client的值赋给用户定义变量@old_character_set_client
/*!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 */;
/*!50503 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 `books`
--
DROP TABLE IF EXISTS `books`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `books` (
  `id` int NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `books`
--
LOCK TABLES `books` WRITE;
/*!40000 ALTER TABLE `books` DISABLE KEYS */;
INSERT INTO `books` VALUES (1,'php');
/*!40000 ALTER TABLE `books` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
# 备份文件的最后几行MySQL使用SET语句恢复服务器系统变量原来的值
/*!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-09-20 16:26:51

备份文件中以“--”字符开头的行为注释语句;以“/*!”开头、“*/”结尾的语句为可执行的MySQL注释


2、mysqldump备份数据库中某个表

mysqldump -u user -h host -p dbname [tbName,[tbName...]] > fileName.sql

tbname表示数据库中的表名,多个表名之间用空格隔开

注意:

备份表和备份数据库中的所有表不同地方在 数据库名称dbname之后需要指定备份的表名称


实例:备份booksDB数据库中的books表

[root@VM-4-2-centos ~]# mysqldump -u root -p booksDB books > ~/dbbackup/books_tb.sql
Enter password:


备份表只包含该表的 CREATE 和 INSERT语句

-- MySQL dump 10.13  Distrib 8.0.30, for Linux (i686)
--
-- Host: localhost    Database: booksDB
-- ------------------------------------------------------
-- 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 */;
/*!50503 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 `books`
--
DROP TABLE IF EXISTS `books`;
--
-- Dumping data for table `books`
--
LOCK TABLES `books` WRITE;
/*!40000 ALTER TABLE `books` DISABLE KEYS */;
INSERT INTO `books` VALUES (1,'php');
/*!40000 ALTER TABLE `books` 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-09-20 16:33:00


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

--databases参数,该参数后必须至少要指定一个数据库名称 多个数据库之间用空格隔开


语法:

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

实例:

mysqldump -u root -p --databases booksDB test_db > ~/dbbackup/books_testdb_2023.sql

--all-databases 参数也可以备份系统中所有的数据库,该参数不需要指定数据库

mysqldump -u user -h host -p --all-databases > filename.sql
mysqldump -u root -p --all-databases > ~/dbbackup/alldb.sql

提示:如果是在服务器且表为MyISAM表,可以考虑使用mysqlhotcopy快速备份和恢复

二、备份数据库目录的第二种方式:直接复制整个数据库目录

mysql表的保存方式为文件方式,所以可以直接复制mysql数据库的存储目录及文件进行备份

win平台下:

C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 8.0\data

lin平台下:

/var/lib/mysql/

注意:

备份前对相关表执行lock tables操作

然后对表执行flush tables,或者停止表进行备份,注意对InnoDB存储引擎不适用

最好恢复到相同版本的服务器且数据库版本

在MySQL版本号中,第一个数字表示主版本号,主版本号相同的MySQL数据库文件格式相同。


三、备份数据库目录的第三种方式:mysqlhotcopy工具快速备份

只能运行在数据库目录所在的机器上,并且只备份MyISAM表


语法:

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

db_name_1,…,db_name_n分别为需要备份的数据库的名称

/path/to/new_directory指定备份文件目录


实例:使用mysqlhotcopy备份test_db数据库到/usr/backup目录下

mysqlhotcopy -u root -p test_db /usr/backup

注意:执行mysqlhotcopy,需要访问备份的表文件,并设置表的SELECT权限、RELOAD权限(以便能够执行FLUSH TABLES)和LOCK TABLES权限


提示:

mysqlhotcopy只能将表所在的目录复制到另一个位置,且只能用于备份MyISAM和ARCHIVE表

备份InnoDB类型的数据表时会出现错误信息,由于它复制本地格式的文件,因此也不能移植到其他硬件或操作系统下


读书和赚钱都是一个人最好的修行,前者使人不惑,后者使人不屈,二者结合,便可不困于世,不流于俗

评论

^