mysqldump-info
其实很多东西都能在info里面找到非常详细的说明,只是,我们太忙了,只想要一个答案,而无心去看而已,所以呢,就把用得到的都看一下来记录吧。
命令模式:
mysqldump [options] [db_name [tbl_name ...]]
当不指定tbl_name 或者使用了 --databases | --all-databases 整个库都会被备份。
同时,mysqldump 不会备份 INFOMATION_SCHEMA 库,即使显式的指定。
options:
--opt 同等于 --add-drop-table --add-locks --create-options --disable-keys --extend-insert --lock-tables --quick --set-charset
--compact 同等于 --skip-add-drop-table --skip-add-locks --skip-comments --skip-disable-keys --skip-set-charset
同样,我们可以用--skip-opt or --skip-compact 来进行反转选项。
当我们想对--opt组中的某些选项进行取消的时候,我们可以用--skip来操作:
比如,要取消extend inserts 跟 memory buffing:
[--opt] --skip-extend-inserts --skip-quick。(--opt可选是因为其是默认开启的)。
如果我们要取消--opt中的除禁止索引跟锁表外的选项,则可以用:
--skip-opt --disable-keys --lock-tables。
如果是在组选项中要选择性的关闭或者开启一些功能,顺序很重要。
--disable-keys --lock-tables --skip-opt 将不会获得你想要的效果。
mysqldump 可以逐行的获取-备份表内容(至文件),同时可以在备份(至文件)前将整个内容缓存到内容中。
数据过大的时候开启缓存会产生问题,想要逐行的进行备份,用--quick(或--opt,组选项中开启了--quick),想要开启缓存那么用--skip-quick即可
--help, -?
--add-drop-database 常用--all-databases --databases 备份多库的时候联合使用
--add-drop-table
--add-locks 在重新读入备份文件的时候会插入得更快些。
--all-databases,-A 与--databases 所有库名... 等价,备份所有库,表[infomation_schema除外]
--allow-keywords 允许建立含关键字的列,在每列加上表名作为前缀。
--character-set-dir=path 字符集路径
--comments,-i 默认开启,在备份文件写入版本、主机等信息。--skip-comments 关闭
--acompact 更紧凑的输出。将会开启--skip-add-drop-table --skip-add-locks --skip-comments --skip-disable-keys --skip-set-charset
--compatible=name 为了与其他数据库系统兼容,name={ansi | mysql323 | mysql40 | postgresql | oracle | msssql | db2 | maxdb | no_key_options | no_table_options | no_field_options}的个选项的话用逗号分开。但这并不能保证就一定能与其他数据库兼容,只是保证输出尽量兼容。
--complate-insert,-c 使用包含列的完整插入语句。
--compress,-C 如果clien and server 支持压缩的话就压缩所有信息。
--create-options 包含所有mysql-create-table 语句支持的表选项
--databases,-B 多个库
--debug[=debug_options],-#[debug_options] 调试日志,典型格式`d:t:o,file_name`,默认值`d:t:o,/tmp/mysqldump.trace`
--debug_info
--cdefault-character-set=charset-name 用charset-name 作为默认的字符集。如果没指定charset-name的话,默认使用utf8,早些版本用的是latin1。此选项对用--tab option产生的文件没有影响。
--delayed-insert insert delayed 代替 insert
--delete-master-logs 在主从服务器上,在备份操作完成后会给服务器一个`purge binary logs`语句,删除二进制日志。此选项自动开启--master-data
--disable-keys, -K 每个表都会被 /*!40000 ALTER TABLE tbl_name DISABLE KEYS */;和/*!40000 ALTER TABLE tbl_name ENABLE KEYS*/包围.这会让插入的时候更快,因为所有索引都在所有行插入完毕后建立。只有在非唯一索引的MyISAM表有效。
--dump-date --comments 开启的情况下,默认在文件尾加上日期。--skip-dump-date关闭。
--extend-insert, -e 多行插入。会让文件更小,插入更快。
--fields-terminated-by=...,--fields-enclosed-by=...,--fields-optionally-enclosed-by=...,--fields=escaped-by=..., --tab option
--first-slave 5.5已删除
--flush-logs, -F 备份前刷新日志,需要reload权限。当与--all-databases,每个库被备份时都会刷新。当使用--lock-all-tables or --master-data,日志只有在所有表在锁定的时候被刷新。想要备份跟日志一起刷新,就要配合--lock-all-tables or --master-data.
--flush-privileges 备份库后发送`FLUSH PRIVILEGES`语句到服务器。当其他有库依赖于此库进行恢复的时候必须使用。
--force, -f 出错依然继续。
--host=host_name, -h host_name
--hex-blob 二进制列用16进制表示(`abc`->`ox616263`)
--log-error=file_name
--ignore-table=db_name.tbl_name 忽略表或视图,多张表就多次使用。
--insert-ignore INSERT IGNORE 代替INSERT 语句
--lines-terminated-by=... 与 --tab option 联用
--lock-all-tables, -x 所有库的表锁定。在备份期间产生一个全局读锁。自动关闭 --single-transaction 和--lock-tables.
--lock-tables, -l 每个库备份前锁表。
MyISAM表用READ LOCAL 锁定来允许同步插入。
事务性的表(InnoDb/BDB),--single-transaction 选项更好,因为不需要锁表。
因为--lock-tables为每个库单独锁表,并不能保证在备份在文件后的内容在库间逻辑上的一致。
consistent read:一致性读。快照读。
--single-transaction 备份前发送`START TRANSACTION SQL`语句给服务器,对事务性的表很有用。当`BEGIN`被执行的时候,其备份各库的一致状态,且不会阻塞任何应用。
必须记住的是,只有InnoDB表才会在一致状态下备份。假入是MyISAM,其状态依然会有可能改变。
在备份期间,为了保证成功(备份文件正常、二进制文件坐标正确),其他连接不可使用任何一个:
{ ALTER TABLE | CREATE TABLE | DROP TABLE | RENAME TABLE | TRUNCATE TABLE}语句。因为一致性读与这些语句是不隔离的,
在要备份的表上执行这几个语句会使 mysqldump执行的 `SELECT`命令重新读取表内容而得到错误的内容或者失败。
--single-transaction与--lock-tables是互斥的,因为--lock-tables会让所有未提交的事务悄悄的提交。
--master-data[=value] 产生的备份文件可以作用当前主从服务器的从属服务器。
这将导致备份出来的文件含有一个`CHANGE MASTER TO`语句,二进制日志
(file name 和 position)与被备份服务器一致。
在导入从服务器后可以从主服务器日志处开始同步复制。
默认是value是1,如果值是2,只是写在信息式的写在注释内,并不生效。
此选项要求二进制日志必须开启
--master-data自动关闭--lock-tables,在--single-transaction没指定的
情况下开启--lock-all-tables,这样情况下全局读锁只会在开始备份的产生很
短的时间。无论什么情况,任何对日志的操作都会在备份的时刻发生。
在已有的从服务器上备份出文件再做一个从服务器也是可以的。
1、停止 从服务器进程,获取其状态:
mysql > STOP SLAVE SQL_THREAD;
mysql > SHOW SLAVE STATUS;
2、从上面得到主服务器二进制日制的坐标(file_name file_pos):
Relay_Master_Log_File
Exec_Master_Log_Pos 字段,把他给记下来。
3、dump 从服务器。
shell > mysqldump --master-data=2 --all-database > dumpfile
4、重启从服务器线程
mysql > START SLAVE;
5、新从服务器,导入dumpfile.
shell > mysql < dumpfile
6、在新从服务器上,设置同步坐标。(file_name file_pos)
--no-autocommit 以Set autocommit=0 和 COMMIT语句来包围INSERT语句。
--no-create-db, -n --databases,-B | --all-databases 指定的时候,压缩`CREATE DATABASES`语句
--no-create-info, -t 不写出重新创建备份表的`CREATE TABLE`语句
--no-data, -d 只要表结构。
--no-set-names, -N 等价于--skip-set-charset
--opt
--norder-by-primary 当主键、或唯一索引存在的时候以此排序列行。当MyISAM表要转到InnoDB表的时候,但会花费更多时间。
--password[=password],-p[password]
-pipe, -W
--port=port_num, -P port_num
--quick, -q
--quote-names, -Q
--result-file=file_name, -r file_name
--routines, -R 包括函数跟结构。但没有时间戳,新导入的时间就是重新建立过程的时间戳。想要原来的时间戳,导出mysql.proc表后进行恢复。
--set-charset 默认开启 加入`set NAMES default_character_set`语句。--skip-set-charset 关闭
--skip-comments
--skip-opt
--socket=path, -S path
--ssl*
--tab=path, -T path
--tables 多表
--tariggers --skip-triggers
--user=user_name, -u user_name
--verbose, -v
--version, -V
--xml, -X
mysql > CHAGE MASTER TO
-> MASTER_LOG_FILE = file_name MASTER_LOG_POS = file_pos;
自行添加CHAGE MASTER TO 需要的参数,比如主服务器地址等。