共计 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 日志。
: