【MySQL】mysqldump使用方法

本文介绍MySQL数据库mysqldump常用方法。

MySQL数据库mysqldump常用方法

  • 导出整个数据库(包括数据库中的数据)。

    mysqldump -u username -p dbname > dbname.sql

  • 导出数据库结构(不含数据)。

    mysqldump -u username -p -d dbname > dbname.sql

  • 导出数据库中的某张数据表(包含数据)。

    mysqldump -u username -p dbname tablename > tablename.sql

  • 导出数据库中的某张数据表的表结构(不含数据)。

    mysqldump -u username -p -d dbname tablename > tablename.sql

mysqldump常用参数说明

  • --all-databases , -A 导出全部数据库mysqldump -uroot -p --all-databases。
  • --all-tablespaces , -Y导出全部表空间。mysqldump -uroot -p --all-databases --all-tablespaces--no-tablespaces , -y不导出任何表空间信息。mysqldump -uroot -p --all-databases --no-tablespaces。
  • --add-drop-database每个数据库创建之前添加drop数据库语句。mysqldump -uroot -p --all-databases --add-drop-database。
  • --add-drop-table每个数据表创建之前添加drop数据表语句。(默认为打开状态,使用--skip-add-drop-table取消选项)mysqldump -uroot -p --all-databases (默认添加drop语句)mysqldump -uroot -p --all-databases --skip-add-drop-table(取消drop语句)。
  • --add-locks在每个表导出之前增加LOCK TABLES并且之后UNLOCK TABLE。(默认为打开状态,使用--skip-add-locks取消选项)mysqldump -uroot -p --all-databases(默认添加LOCK语句)mysqldump -uroot -p --all-databases --skip-add-locks(取消LOCK语句)。
  • --comments附加注释信息。默认为打开,可以用--skip-comments取消mysqldump -uroot -p --all-databases(默认记录注释)mysqldump -uroot -p --all-databases --skip-comments(取消注释)。
  • --complete-insert, -c使用完整的insert语句(包含列名称)。这么做能提高插入效率,但是可能会受到max_allowed_packet参数的影响而导致插入失败。mysqldump -uroot -p --all-databases --complete-insert。
  • --compact导出更少的输出信息(用于调试)。去掉注释和头尾等结构。可以使用选项:--skip-add-drop-table --skip-add-locks --skip-comments --skip-disable-keysmysqldump -uroot -p --all-databases --compact。
  • --compress, -C在客户端和服务器之间启用压缩传递所有信息mysqldump -uroot -p --all-databases --compress。
  • --databases, -导出几个数据库。参数后面所有名字参量都被看作数据库名。mysqldump -uroot -p --databases test mysql。
  • --debug输出debug信息,用于调试。默认值为:d:t:o,/tmp/mysqldump.tracemysqldump -uroot -p --all-databases --debugmysqldump -uroot -p --all-databases --debug=" d:t:o,/tmp/debug.trace"。
  • --debug-info输出调试信息并退出mysqldump -uroot -p --all-databases --debug-info。
  • --default-character-set设置默认字符集,默认值为utf8mysqldump -uroot -p --all-databases --default-character-set=latin1。
  • --delayed-insert采用延时插入方式(INSERT DELAYED)导出数据mysqldump -uroot -p --all-databases --delayed-insert。
  • --events, -E导出事件。mysqldump -uroot -p --all-databases --events。
  • --flush-logs开始导出之前刷新日志。请注意:假如一次导出多个数据库(使用选项--databases或者--all-databases),将会逐个数据库刷新日志。除使用--lock-all-tables或者--master-data外。在这种情况下,日志将会被刷新一次,相应的所有表同时被锁定。因此,如果打算同时导出和刷新日志应该使用--lock-all-tables 或者--master-data 和--flush-logs。mysqldump -uroot -p --all-databases --flush-logs。
  • --flush-privileges在导出mysql数据库之后,发出一条FLUSH PRIVILEGES 语句。为了正确恢复,该选项应该用于导出mysql数据库和依赖mysql数据库数据的任何时候。mysqldump -uroot -p --all-databases --flush-privileges。
  • --force在导出过程中忽略出现的SQL错误。mysqldump -uroot -p --all-databases --force。
  • --host, -h需要导出的主机信息mysqldump -uroot -p --host=localhost --all-databases。
  • --ignore-table不导出指定表。指定忽略多个表时,需要重复多次,每次一个表。每个表必须同时指定数据库和表名。例如:--ignore-table=database.table1 --ignore-table=database.table2 ......mysqldump -uroot -p --host=localhost --all-databases --ignore-table=mysql.user。
  • --lock-all-tables, -x提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭--single-transaction 和--lock-tables 选项。mysqldump -uroot -p --host=localhost --all-databases --lock-all-tables。
  • --lock-tables, -l开始导出前,锁定所有表。用READ LOCAL锁定表以允许MyISAM表并行插入。对于支持事务的表例如InnoDB和BDB,--single-transaction是一个更好的选择,因为它根本不需要锁定表。请注意当导出多个数据库时,--lock-tables分别为每个数据库锁定表。因此,该选项不能保证导出文件中的表在数据库之间的逻辑一致性。不同数据库表的导出状态可以完全不同。mysqldump -uroot -p --host=localhost --all-databases --lock-tables。
  • --no-create-db, -n只导出数据,而不添加CREATE DATABASE 语句。mysqldump -uroot -p --host=localhost --all-databases --no-create-db。
  • --no-create-info, -t只导出数据,而不添加CREATE TABLE 语句。mysqldump -uroot -p --host=localhost --all-databases --no-create-info。
  • --no-data, -d不导出任何数据,只导出数据库表结构。mysqldump -uroot -p --host=localhost --all-databases --no-data。
  • --password, -p连接数据库密码。
  • --port, -P连接数据库端口号。
  • --user, -u指定连接的用户名。

使用mysqldump导出大表的注意事项

在使用mysqldump导出数据的场景下,如果加上参数 -q ,则不会把SELECT出来的结果放在buffer中,而是直接dump到标准输出中,顶多只是buffer当前行结果,正常情况下是不会超过 max_allowed_packet 限制的,它默认情况下是开启的。如果关闭该参数,则会把SELECT出来的结果放在本地buffer中,然后再输出给客户端,会消耗更多内存。

对于小规模数据集,禁用-q参数可以加快导出速度。但对于大数据集,如果没办法完全储存在内存缓存中时,就会产生swap。这不仅会消耗主机的内存,也可能会造成数据库主机因无可用内存继而宕机的严重后果。因此,当使用mysqldump来备份大数据集时,建议添加-q参数。

备份期间DDL操作导致备份失败

DDL是数据定义语言,主要用来操作数据库和定义表,其中操作数据库主要包括创建数据库(create)、更新数据库(alter)以及删除数据库(drop)。MySQL全量备份基于xtrabackup,为保证数据一致性,全量备份操作与DDL操作存在元数据锁冲突,会导致备份一直阻塞等待,超时失败。

主备实例会优先在备节点进行备份,并且备份失败已经是历史事件,并非当前状态。因此需排查业务侧在备份时间窗内是否有DDL操作。如果有,请尽量避免在备份时间进行DDL操作、或调整备份窗口时间,出现失败可手动备份进行重试或等待下一次备份窗口的自动备份。

相关推荐
一江寒逸1 分钟前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain3 分钟前
linux个人心得22 (mysql)
数据库·mysql
阿里小阿希40 分钟前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神1 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员1 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java1 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿1 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb
不知名的老吴1 小时前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存
YOU OU1 小时前
三大范式和E-R图
数据库
MaCa .BaKa1 小时前
47-心里健康咨询平台/心理咨询系统
java·spring boot·mysql·tomcat·maven·intellij-idea·个人开发