一、备份数据库目录的第二种方式: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类型的数据表时会出现错误信息,由于它复制本地格式的文件,因此也不能移植到其他硬件或操作系统下