MySQL 的逻辑备份指的是使用 SQL 语句备份数据库的结构和数据,而不是直接备份数据库文件。通常使用 mysqldump 工具进行逻辑备份。
mysqldump是最常用的逻辑备份工具,能够生成SQL脚本文件,这些文件可以用来重建数据库结构和数据。
1 |
mysqldump -u [用户名] -p[密码] [数据库名] > [备份文件.sql] |
备份整个数据库
1 |
mysqldump -u root -p mydatabase > mydatabase_backup.sql |
备份多个数据库
1 |
mysqldump -u root -p --databases db1 db2 > multi_database_backup.sql |
备份所有数据库
1 |
mysqldump -u root -p --all-databases > all_databases_backup.sql |
仅备份数据库结构
1 |
mysqldump -u root -p --no-data mydatabase > mydatabase_structure_backup.sql |
仅备份特定表
1 |
mysqldump -u root -p mydatabase table1 table2 > mydatabase_tables_backup.sql |
添加选项以有效处理锁表问题
1 |
mysqldump -u root -p --single-transaction --quick --lock-tables=false mydatabase > mydatabase_backup.sql |
恢复数据库
语法
1 |
mysql -u [用户名] -p[密码] [数据库名] < [备份文件.sql] |
示例
1 |
mysql -u root -p mydatabase < mydatabase_backup.sql |
恢复库中的表
1 |
mysqldump -u root -p[密码] [库名] [表名] > staff_backup.sql |
使用source恢复
首先登录到mysql中,在mysql中使用下述语法恢复
1 |
source 文件路径; |
例:
1 |
source /path/to/employees_backup.sql; |
mysqlpump是MySQL 5.7引入的备份工具,支持多线程,能够更快地进行备份。它是 mysqldump 的增强版本。
1 |
mysqlpump -u [用户名] -p[密码] [数据库名] > [备份文件.sql] |
备份单个数据库
1 |
mysqlpump -u root -p mydatabase > mydatabase_backup.sql |
备份多个数据库
1 |
mysqlpump -u root -p --databases db1 db2 > multi_database_backup.sql |
备份所有数据库
1 |
mysqlpump -u root -p --all-databases > all_databases_backup.sql |
并发处理
1 |
mysqlpump -u root -p --default-parallelism=4 --databases db1 db2 > multi_database_backup.sql |
使用 --default-parallelism 参数可以设定并发线程数,加快备份速度。
过滤表
1 |
mysqlpump -u root -p mydatabase --exclude-tables=table1,table2 > mydatabase_backup.sql |
使用 --exclude-tables 可以排除特定的表
仅备份表结构
1 |
mysqlpump -u root -p mydatabase --skip-dump-data > mydatabase_structure_backup.sql |
压缩备份文件
1 |
mysqlpump -u root -p mydatabase | gzip > mydatabase_backup.sql.gz |
备份数据目录
1 |
mysqlpump --users --routines --databases db1 db2 > backup_with_users_routines.sql |
使用 --users 备份用户账户,使用 --routines 备份存储函数和存储过程。
解压缩备份文件
1 |
gunzip < mydatabase_backup.sql.gz | mysql -u root -p mydatabase |
恢复备份
1 |
mysql -u [用户名] -p [数据库名] < [备份文件.sql] |
示例
1 |
mysql -u root -p mydatabase < mydatabase_backup.sql |
优点:
缺点:
/var/lib/mysql-files 是 MySQL 默认用于存储导出的文件的目录。这个目录通常用于 SELECT INTO OUTFILE 等操作所生成的文件。
介绍
mysqldump 是一个用于备份 MySQL 数据库的工具。-n 参数让你只备份表中数据,不包括表结构。备份得到的文件是纯 SQL 语句,可以用来恢复数据。
举例
场景: 有一个名为 employees 的数据库,其中包含 staff 表。备份 staff 表中的数据,但不包括表结构。
步骤:
进入命令行。
执行以下命令:
1 |
mysqldump -u root -p[密码] --no-create-info employees staff > staff_data_only.sql |
3.结果: 生成的 staff_data_only.sql 文件内容:
1 2 3 |
INSERT INTO `staff` (`id`, `name`, `position`, `salary`) VALUES (1, 'Alice', 'Manager', 50000); INSERT INTO `staff` (`id`, `name`, `position`, `salary`) VALUES (2, 'Bob', 'Engineer', 40000); INSERT INTO `staff` (`id`, `name`, `position`, `salary`) VALUES (3, 'Charlie', 'Technician', 30000); |
恢复:
1 |
source /path/to/staff_data_only.sql; |
介绍
SELECT INTO OUTFILE 是一条SQL语句,用于将查询结果导出到文件中。文件格式可以根据需要来定义(如CSV格式,也可以是xlsx结尾的格式),通常用于数据分析和传输。
举例
1.场景: 有一个名为 employees 的数据库,其中包含 staff 表。导出 staff 表中的数据作为CSV文件来分析。
2.步骤:
进入 MySQL 客户端。
执行以下 SQL 语句:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
SELECT * FROM staff INTO OUTFILE '/var/lib/mysql-files/staff_data.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
命令解读(也可以使用默认,后面就不用那么多指定要求语句了): -- 从 staff 表中选择所有列和行 SELECT * FROM staff
-- 将查询结果写入指定路径的文件中 INTO OUTFILE '/var/lib/mysql-files/staff_data.csv'
-- 每个字段(列)的数据使用逗号分隔 FIELDS TERMINATED BY ','
-- 每个字段的值都用双引号包围 ENCLOSED BY '"'
-- 每行记录之间以换行符分隔 LINES TERMINATED BY '\n'; |
3.结果: 生成的 staff_data.csv 文件内容:
1 2 3 |
"1","Alice","Manager","50000" "2","Bob","Engineer","40000" "3","Charlie","Technician","30000" |
恢复:
1 2 3 4 5 |
LOAD DATA INFILE '/var/lib/mysql-files/staff_data.csv' INTO TABLE staff FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n'; |
用途不同:
恢复指定表:
便捷性和灵活性: