mysqldump逻辑备份

1. 参数详解

参数 1. –all-databases , -A
转储整个数据库。
shell> mysqldump [options] –all-database

参数 2. —database,-B
转储几个数据库。通常情况,mysqldump将命令行中的第1个名字参量看作数据库名,后面的名看作表名。使用该选项,它将所有名字参量看作数据库名。CREATE DATABASE IF NOT EXISTS db_name和USE db_name语句包含在每个新数据库前的输出中。
shell> mysqldump [options] –databases DB1 DB2

参数 3. –tables
转存指定的表
参数 4. –routines,-R
导出存储过程以及自定义函数

参数 5. –quick,-q
该选项用于转储大的表。它强制mysqldump从服务器一次一行地检索表中的行而不是检索所有行并在输出前将它缓存到内存中。

参数 6. -lock-tables -l
它和 –lock-all-tables 类似, 不过是锁定当前导出的数据表, 而不是一下子锁定全部库下的表。 本选项只适用于 MyISAM 表,如果是 Innodb 表可以用 –single-transaction 选项。

参数 7. –single-transaction
该选项从服务器转储数据之前发出一个BEGIN SQL语句。它只适用于事务表,例如InnoDB和BDB,因为然后它将在发出BEGIN而没有阻塞任何应用程序时转储一致的数据库状态。当使用该选项时,应记住只有InnoDB表能以一致的状态被转储。例如,使用该选项时任何转储的MyISAM或HEAP表仍然可以更改状态。
–single-transaction选项和–lock-tables选项是互斥的,因为LOCK TABLES会使任何挂起的事务隐含提交。要想转储大的表,应结合–quick使用该选项。

参数 8. –lock-all-tables,-x
在开始导出之前,提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭 –single-transaction 和 –lock-tables 选项。

参数 9. –master-data
该选项将二进制日志的位置和文件名写入到输出中。该选项要求有RELOAD权限,并且必须启用二进制日志。如果该选项值等于1,位置和文件名被写入CHANGE MASTER语句形式的转储输出,如果你使用该SQL转储主服务器以设置从服务器,从服务器从主服务器二进制日志的正确位置开始。如果选项值等于2,CHANGE MASTER语句被写成SQL注释。

参数 10. –flush-logs,-F
开始转储前刷新MySQL服务器日志文件。该选项要求RELOAD权限。请注意如果结合–all–database(或-A)选项使用该选项,根据每个转储的数据库刷新日志。例外情况是当使用–lock-all-tables或–master-data的时候:在这种情况下,日志只刷新一次,在所有 表被锁定后刷新。如果你想要同时转储和刷新日志,应使用–flush-logs连同–lock-all-tables或–master-data。

参数 11. –set-gtid-purged=value
OFF 不添加set purge_gtid 语句到输出文件
ON 添加set purge_gtid 语句到输出文件,如果没有启动gtid 会报错
AUTO 添加set purge_gtid 语句到输出文件如果GTID 是开启的

参数 12. –no-create-info,-t
不写重新创建每个转储表的CREATE TABLE语句

参数 13. –no-data,-d
不写表的任何行信息。如果你只想转储表的结构这很有用。

参数 14. –log-error=file_name
输出错误或者警告到一个文件

参数 15. –no-create-db,-n
该选项禁用CREATE DATABASE /*!32312 IF NOT EXISTS*/ db_name语句,如果给出—database或–all–database选项,则包含到输出中。

参数 16. –default-character-set
指定导出数据时采用何种字符集,如果没有指定,mysqldump使用utf8。

2. 备份样例

例 1: 备份所有库 ,只锁定当前备份的表

#mysqldump –u -p -P  --quick --all-databases  >/tmp/alldatabases.sql

例 2: 备份指定库,加全局读锁

#mysqldump –u -p -P  --quick –lock-all-tables dbname >/tmp/alldatabases.sql

例 3: 备份指定库,但是不锁表

#mysqldump –u -p -P  --quick –single-transcation dbname  >/tmp/dbname.sql

例 4: 备份db1 db2 db3 库

#mysqldump –u -p -P  --quick –single-transcation –databases db1 db2 db3  >/tmp/dbname.sql

例 5: 备份指定库的库表结构 不包含数据,不锁表

#mysqldump –u -p -P  --quick –single-transcation –no-data dbname  >/tmp/dbname.sql

例 6: 备份指定库的数据,不包含库表结构,包含当前binlog 的文件名和position 和刷新binlog文件

#mysqldump –u -p -P  --quick –single-transcation  –no-create-info –master-data=1  --flush-logs  dbname  >/tmp/dbname.sql

master-data它只是在一开始的瞬间请求锁表,然后就刷新 binlog 了,而后在导出的文件中加入 CHANGE MASTER 语句来指定当前备份的 binlog 位置,如果要把这个文件恢复到 slave 里去,就可以采用这种方法来做。

3. 数据恢复

例 1: 通过MySQL 客户端进行数据恢复

#mysql  –uroot  –p  –P3306  –defaul-characher-set=字符集  dbname < dbname.sql 

例 2: 通过source 命令进行数据恢复

MySQL> source path/dbname.sql
Trackback

no comment untill now

Add your comment now

切换到手机版