7人参与 • 2025-03-05 • Mysql
mysql 的逻辑备份指的是使用 sql 语句备份数据库的结构和数据,而不是直接备份数据库文件。通常使用 mysqldump
工具进行逻辑备份。
mysqldump
是最常用的逻辑备份工具,能够生成sql脚本文件,这些文件可以用来重建数据库结构和数据。
mysqldump -u [用户名] -p[密码] [数据库名] > [备份文件.sql]
-u, --user=[name]
:指定 mysql 用户名。-p, --password[=password]
:指定 mysql 密码。如果不提供密码,mysqldump
会提示输入。-h, --host=[hostname]
:指定 mysql 服务器主机名。-p, --port=[port_num]
:指定 mysql 服务器端口号。--protocol=[{tcp|socket|pipe|memory}]
:指定连接协议。-r, --result-file=[file]
:将输出直接写入文件,而不是通过标准输出。-t, --no-create-info
:不写入创建表的语句,只导出数据。-d, --no-data
:不写入数据,只导出数据库结构。--add-drop-table
:在每个创建表语句前增加 drop table if exists
语句。--add-locks
:在插入数据前后使用 lock tables
和 unlock tables
语句。--disable-keys
:在插入数据前使用 alter table ... disable keys
,插入数据后使用 alter table ... enable keys
。-b, --databases
:指定要备份的数据库。如果使用该选项,所有跟在其后的数据库名都将被备份。-a, --all-databases
:备份所有数据库。--tables
:指定要备份的表,必须跟在数据库名之后。-n, --no-create-db
:不写入创建数据库的语句。-w, --where='condition'
:仅导出符合指定条件的行。--single-transaction
:在一个事务中导出所有数据,适用于支持事务的表(如 innodb)。--lock-tables
:在导出前锁定所有表,适用于不支持事务的表(如 myisam)。--master-data[=#]
:在导出中加入主服务器的二进制日志位置和文件名,用于设置复制。--flush-logs
:在导出前刷新 mysql 服务器的日志。--routines
:导出存储过程和函数。--triggers
:导出触发器。--events
:导出事件。--hex-blob
:以十六进制格式导出二进制列。--set-gtid-purged=[off|on|auto]
:控制是否在备份中加入 gtid 信息,适用于 gtid 复制。备份整个数据库
mysqldump -u root -p mydatabase > mydatabase_backup.sql
备份多个数据库
mysqldump -u root -p --databases db1 db2 > multi_database_backup.sql
备份所有数据库
mysqldump -u root -p --all-databases > all_databases_backup.sql
仅备份数据库结构
mysqldump -u root -p --no-data mydatabase > mydatabase_structure_backup.sql
仅备份特定表
mysqldump -u root -p mydatabase table1 table2 > mydatabase_tables_backup.sql
添加选项以有效处理锁表问题
mysqldump -u root -p --single-transaction --quick --lock-tables=false mydatabase > mydatabase_backup.sql
恢复数据库
语法
mysql -u [用户名] -p[密码] [数据库名] < [备份文件.sql]
示例
mysql -u root -p mydatabase < mydatabase_backup.sql
恢复库中的表
mysqldump -u root -p[密码] [库名] [表名] > staff_backup.sql
使用source恢复
首先登录到mysql中,在mysql中使用下述语法恢复
source 文件路径;
例:
source /path/to/employees_backup.sql;
mysqldump
和恢复命令的用户具有相应的数据库读写权限。mysqlpump
是mysql 5.7引入的备份工具,支持多线程,能够更快地进行备份。它是 mysqldump
的增强版本。
mysqlpump
支持并发地备份多个表和多数据库,极大地提高了备份速度。mysqlpump -u [用户名] -p[密码] [数据库名] > [备份文件.sql]
--exclude-databases
:排除特定数据库--include-databases
:包含特定数据库--default-parallelism
:设置并行度--skip-definer
:忽略definer子句--set-gtid-purged
:用于gtid的备份备份单个数据库
mysqlpump -u root -p mydatabase > mydatabase_backup.sql
备份多个数据库
mysqlpump -u root -p --databases db1 db2 > multi_database_backup.sql
备份所有数据库
mysqlpump -u root -p --all-databases > all_databases_backup.sql
并发处理
mysqlpump -u root -p --default-parallelism=4 --databases db1 db2 > multi_database_backup.sql
使用 --default-parallelism
参数可以设定并发线程数,加快备份速度。
过滤表
mysqlpump -u root -p mydatabase --exclude-tables=table1,table2 > mydatabase_backup.sql
使用 --exclude-tables
可以排除特定的表
仅备份表结构
mysqlpump -u root -p mydatabase --skip-dump-data > mydatabase_structure_backup.sql
压缩备份文件
mysqlpump -u root -p mydatabase | gzip > mydatabase_backup.sql.gz
备份数据目录
mysqlpump --users --routines --databases db1 db2 > backup_with_users_routines.sql
使用 --users
备份用户账户,使用 --routines
备份存储函数和存储过程。
解压缩备份文件
gunzip < mydatabase_backup.sql.gz | mysql -u root -p mydatabase
恢复备份
mysql -u [用户名] -p [数据库名] < [备份文件.sql]
示例
mysql -u root -p mydatabase < mydatabase_backup.sql
mysqlpump
和恢复命令的用户具有必要的数据库读写权限。优点:
缺点:
/var/lib/mysql-files
是 mysql 默认用于存储导出的文件的目录。这个目录通常用于 select into outfile
等操作所生成的文件。
介绍
mysqldump
是一个用于备份 mysql 数据库的工具。-n
参数让你只备份表中数据,不包括表结构。备份得到的文件是纯 sql 语句,可以用来恢复数据。
举例
场景: 有一个名为 employees
的数据库,其中包含 staff
表。备份 staff
表中的数据,但不包括表结构。
步骤:
进入命令行。
执行以下命令:
mysqldump -u root -p[密码] --no-create-info employees staff > staff_data_only.sql
3.结果: 生成的 staff_data_only.sql
文件内容:
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);
恢复:
staff
表。source /path/to/staff_data_only.sql;
介绍
select into outfile
是一条sql语句,用于将查询结果导出到文件中。文件格式可以根据需要来定义(如csv格式,也可以是xlsx结尾的格式),通常用于数据分析和传输。
举例
1.场景: 有一个名为 employees
的数据库,其中包含 staff
表。导出 staff
表中的数据作为csv文件来分析。
2.步骤:
进入 mysql 客户端。
执行以下 sql 语句:
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","alice","manager","50000" "2","bob","engineer","40000" "3","charlie","technician","30000"
恢复:
staff
表。staff_data.csv
文件到服务器。load data infile '/var/lib/mysql-files/staff_data.csv' into table staff fields terminated by ',' enclosed by '"' lines terminated by '\n';
用途不同:
mysqldump -n
主要用于备份和恢复 mysql 数据库数据。生成 sql 文件,便于在需要时恢复数据。select into outfile
主要用于数据导出用于分析或传输。生成的文件格式如csv,可用excel等工具打开。恢复指定表:
mysqldump -n
恢复数据更简单,直接源文件加载到mysql中即可。select into outfile
导出的文件格式灵活,但需要额外步骤导入数据(如使用 load data infile
)。便捷性和灵活性:
mysqldump -n
适用于跨平台环境,恢复数据库较为便捷。select into outfile
适用于导出数据进行外部分析,格式灵活但操作稍复杂。到此这篇关于mysql逻辑备份的实现步骤的文章就介绍到这了,更多相关mysql逻辑备份内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论