阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL数据库备份命令mysqldump参数详解

185次阅读
没有评论

共计 2193 个字符,预计需要花费 6 分钟才能阅读完成。

MySQLdump 对于 MySQL 数据库备份是有一个很好用的命令,并且是 MySQL 自带的。
-d:只备份表结构,备份文件是 SQL 语句形式;只备份创建表的语句,插入的数据不备份。

-t:只备份数据,数据是文本形式;表结构不备份

-T [–tab]:表结构与数据分离,表结构为 sql 文件,数据为普通文件

-A:导出所有数据库

-B:导出指定数据库

-x, –lock-all-tables:锁表
锁表原理:从执行定时备份脚本起(带 - x 参数),不能往表里更新,但是缺点,锁表后无法更新,如果单库一般在低谷,比如凌晨后半夜里;多库,就从从库里锁表备份(并且从库不对外,只做备份)
Locks all tables across all databases. This is achieved by taking a global read lock for the duration of the whole dump.
Automatically turns –single-transaction and –lock-tables off. 启用该选项,会自动关闭 –single-transaction 和 –lock-tables.

-l, –lock-tables:只读锁表
Lock all tables before dumping them
Lock all tables for read.
(Defaults to on; use –skip-lock-tables to disable.)
该选项默认打开的,上面已经说到了。它的作用是在导出过程中锁定所有表。–single-transaction 和 –lock-all-tables 都会将该选项关闭。
在用 LOCK TABLES 给表显式加表锁时,必须同时取得所有涉及到表的锁,也就是说,在执行 LOCK TABLES 后,只能访问显式加锁的这些表,不能访问未加锁的表;同时,如果加的是读锁,那么只能执行锁表的查询操作,MyISAM 总是一次获得 SQL 语句所需要的全部锁。这也正是 MyISAM 表不会出现死锁(Deadlock Free)的原因。

–single-transaction
–single-transaction 可以得到一致性的导出结果。他是通过将导出行为放入一个事务中达到目的的。
它有一些要求:只能是 innodb 引擎;导出的过程中,不能有任何人执行 alter table, drop table, rename table, truncate table 等 DDL 语句。
实际上 DDL 会被事务所阻塞,因为事务持有表的 metadata lock 的共享锁,而 DDL 会申请 metadata lock 的互斥锁,所以阻塞了。
–single-transaction 会自动关闭 –lock-tables 选项;上面我们说到 mysqldump 默认会打开了 –lock-tables,它会在导出过程中锁定所有表。
因为 –single-transaction 会自动关闭 –lock-tables,所以单独使用 –single-transaction 是不会使用锁的。与 –master-data 合用才有锁。

q:不做缓冲查询,直接导到标准输出

-R:导出存储过程和函数

-E,–events:导出调度事件

–add-drop-database
在 CREATE DATABASE 语句前增加 DROP DATABASE 语句,一般配合 –all-databases 或 –databases 使用,因为只有使用了这二者其一,才会记录 CREATE DATABASE 语句。

–add-drop-table
在 CREATE TABLE 语句前增加 CREATE TABLE 语句。

–add-drop-trigger
在 CREATE TRIGGER 语句前增加 DROP TRIGGER 语句

–all-tablespaces, -Y
导出全部表空间。该参数目前仅用在 MySQL Cluster 表上(NDB 引擎)

–add-locks
在每个表导出之前增加 LOCK TABLES 并且之后 UNLOCK TABLE。(默认为打开状态,使用 –skip-add-locks 取消选项)

–opt
等同于 –add-drop-table, –add-locks, –create-options, –quick, –extended-insert, –lock-tables, –set-charset, –disable-keys 该选项默认开启, 可以用 –skip-opt 禁用.

-F,–flush-logs:刷新 binlog 日志

–master-data
mysqldump 导出数据时,当这个参数的值为 1 的时候,mysqldump 出来的备份文件就会包括 CHANGE MASTER TO 这个语句,CHANGE MASTER TO 后面紧接着就是 file 和 position 的记录,在 slave 上导入数据时会执行该语句,salve 就会根据 CHANGE MASTER TO 后面指定的 binlog 文件和 binlog 日志文件里的位置点,从 master 端复制 binlog。默认情况下这个值是 1。运维经常使用到该参数,主从复制时,该参数是一个很好的功能,同时也可以做增量恢复。
当这个参数的值为 2 的时候 mysqldump 导出来的备份文件也会包含 CHANGE MASTER TO 语句,但是该语句被注释掉,不会生效,只是提供一个信息。
–master-data 也会刷新 binlog 日志。

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计2193字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中