mysqldump
工具用于导出数据库或表的数据和结构,而 trace_dump
似乎是一个拼写错误。MySQL的mysqldump
工具是数据库管理员常用的数据备份和迁移工具,本文将详细介绍其使用方法,并通过表格形式展示常用参数及其功能,最后提供相关FAQs及小编有话说。
`mysqldump`基本使用与参数详解
mysqldump
是一个命令行工具,用于生成数据库的逻辑备份,它能够导出一个或多个数据库、表结构及其内容,并生成SQL脚本文件,以便后续恢复或迁移,以下是一些常见用法和参数说明:
1. 快速使用示例
导出所有数据库
mysqldump -uroot -p --host=127.0.0.1 --port=3306 --all-databases > /tmp/full.sql
完整导出指定数据库
mysqldump -uroot -p --host=127.0.0.1 --port=3306 --databases school > /tmp/school.sql
只导出数据库表结构
mysqldump -uroot -p --no-data --databases school > /tmp/school_structure.sql
只导出数据
mysqldump -uroot -p --no-create-info --databases school > /tmp/school_data.sql
导出特定表的数据和结构
mysqldump -uroot -p school sc_admin users > /tmp/school_tables.sql
2. 常用参数说明
参数名 | 描述 |
--all-databases, -A | 导出全部数据库。 |
--all-tablespaces, -Y | 导出全部表空间。 |
--no-tablespaces, -y | 不导出任何表空间信息。 |
--add-drop-database | 每个数据库创建之前添加DROP DATABASE语句。 |
--add-drop-table | 每个数据表创建之前添加DROP TABLE语句(默认为打开状态)。 |
--skip-add-drop-table | 取消DROP TABLE语句。 |
--add-locks | 在每个表导出之前增加LOCK TABLES并且之后UNLOCK TABLE(默认为打开状态)。 |
--skip-add-locks | 取消LOCK语句。 |
--allow-keywords | 允许创建是关键词的列名字。 |
--apply-slave-statements | 在CHANGE MASTER前添加STOP SLAVE,并且在导出的最后添加START SLAVE。 |
--character-sets-dir | 字符集文件的目录。 |
--comments | 附加注释信息(默认为打开,可以用--skip-comments取消)。 |
--compatible | 导出的数据将和其他数据库或旧版本的MySQL相兼容,值可以为ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options等,用逗号将它们隔开。 |
--compact | 导出更少的输出信息(用于调试),去掉注释和头尾等结构,可以使用选项:--skip-add-drop-table --skip-add-locks --skip-comments --skip-disable-keys。 |
--complete-insert, -c | 使用完整的INSERT语句(包含列名称),提高插入效率。 |
--compress, -C | 在客户端和服务器之间启用压缩传递所有信息。 |
--create-options, -a | 在CREATE TABLE语句中包括所有MySQL特性选项(默认为打开状态)。 |
--databases, -B | 导出几个数据库,参数后面所有名字参量都被看作数据库名。 |
--debug | 输出debug信息,用于调试,默认值为:d:t,/tmp/mysqldump.trace。 |
--debug-check | 检查内存和打开文件使用说明并退出。 |
--debug-info | 输出调试信息并退出。 |
--default-character-set | 设置默认字符集,默认值为utf8。 |
--delayed-insert | 采用延时插入方式(INSERT DELAYED)导出数据。 |
--delete-master-logs | master备份后删除日志,该参数将自动激活--master-data。 |
--disable-keys | 对于每个表,用/*!40000 ALTER TABLE tbl_name DISABLE KEYS;*/来禁用索引。 |
--enable-keys | 对于每个表,用/*!40000 ALTER TABLE tbl_name ENABLE KEYS;*/来启用索引。 |
--events | 导出事件。 |
--flush-logs | 开始备份之前刷新日志。 |
--flush-privileges | 新的授权机制。 |
--force-allow-changes | 允许修改表即使存在外键限制。 |
--found-rows | 使用FOUND_ROWS()函数代替COUNT(*)。 |
--hex-blob | 在导出BLOB时使用十六进制格式。 |
--ignore-row | 忽略错误行而不是停止整个操作。 |
--ignore-where | 忽略WHERE条件。 |
--include-server-state | 包括服务器状态信息。 |
--insert-ignore | 忽略INSERT的错误。 |
--lines-terminated-by | 指定行终止符,不是回车换行符。 |
--low-priority | LOW_PRIORITY添加到INSERT语句。 |
--master-data | 包括二进制日志文件位置和转储文件名。 |
--max-allowed-packet | 设置最大允许包的大小。 |
--no-autocommit | 覆盖my.cnf中的autocommit模式。 |
--no-data | 不导出任何表数据。 |
--no-create-info | 不添加CREATE TABLE语句。 |
--no-data-at-start | 在转储文件中禁用初始NO_DATA语句。 |
--no-create-db | 不添加CREATE DATABASE;如果数据库不存在,则报错。 |
--no-create-info, --skip-grants | 不添加GRANT语句。 |
--no-engines | 不存储CREATE TABLE语句中的ENGINE子句。 |
--no-help | 禁止显示帮助信息。 |
--no-owner | 不要在CREATE TABLE中添加表所有者。 |
--order-by-primary | 如果可能的话,根据主键排序记录。 |
--quote-names | 引用所有的表和列名。 |
--quick | 强制使用--tab进行转储。 |
--routines | 导出存储过程和函数。 |
--triggers | 导出触发器,必须与表一起导出,单独导出无效。 |
--tubes | 转储过程中使用命名管道而不是临时文件。 |
--tab | 使用TAB格式转储数据。 |
--tz-utc | 确保时间以UTC格式写入。 |
--user | 指定用户名。 |
--version | 输出版本信息并退出。 |
--verbose, -v | 更冗长的信息。 |
--where | 'WHERE'子句,如果提供,仅选择满足条件的行,要转义花括号,请用双引号括起来。 |
--xml | 导出XML格式的数据。 |
FAQs
Q1:mysqldump
导出的文件大小如何优化?
A1: 可以通过以下方法优化导出文件的大小:
1、启用压缩:使用--compress
参数在客户端和服务器之间启用压缩传递所有信息。
2、排除无用数据:使用--no-data
参数只导出表结构,或使用--where
参数过滤不需要的数据。
3、精简输出:使用--compact
参数去掉注释和头尾等结构。
4、调整字符集:使用适当的字符集可以减少文件大小。
Q2: 如何在不停止服务的情况下进行热备份?
A2: 使用--single-transaction
参数可以保证数据导出的一致性,适用于支持事务的数据库引擎如InnoDB,此选项会将隔离级别设置为REPEATABLE READ,随后执行START TRANSACTION开启一个事务,让整个数据在dump过程中保证数据的一致性,这个操作不会锁表,适用于生产环境。
Q3:mysqldump
导出时如何处理大表?
A3: 对于大表,可以分批次导出数据以减少内存消耗和导出时间:
1、分批次导出:使用--where
参数按条件分批导出数据,例如按主键范围分批导出。
2、使用分段工具:如Percona XtraBackup工具,支持在线热备份和增量备份,适用于大规模数据备份。
3、调整参数:增大服务器的内存缓冲区,调整max_allowed_packet
参数以适应大数据包传输。
小编有话说
在使用mysqldump
进行数据备份时,选择合适的参数和策略非常重要,尤其是对于大规模数据集和生产环境,通过合理利用参数,可以在不影响业务运行的情况下完成高效的数据备份和迁移,希望本文能帮助大家更好地理解和使用mysqldump
工具,确保数据安全。
mysqldump
是一个功能强大且灵活的工具,通过掌握其常用参数和技巧,可以有效地应对各种数据备份和迁移需求。