mysqldump常用参数
-d=不导出数据 -t=不创建表(即没有create table语句) -c=单条insert语句(默认选项,即所有行数据都只有一个insert,巨表会超出条目限制) -R=导出函数和proc -q=强制查询记录导出而不是查询所有记录缓存到内存再导出(大概意思就是查一条导一条,而不是查所有再导出)
其他不常用参数:
--opt
这只是一个快捷选项,等同于同时添加 --add-drop-tables --add-locking
--create-option --disable-keys --extended-insert --lock-tables --quick
--set-charset 选项。本选项能让 mysqldump 很快的导出数据,并且导出的数据能很快导回。该选项默认开启,但可以用 --skip-opt 禁用。注意,如果运行 mysqldump 没有指定 -q 或 --opt
选项,则会将整个结果集放在内存中。如果导出大数据库的话可能会出现问题(工作经验,一般的几十万跳还不算大库可)。
--lock-all-tables,-x
在开始导出之前,提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭 --single-transaction 和 --lock-tables 选项。
--lock-table
它和 --lock-all-tables
类似,不过是锁定当前导出的数据表,而不是一下子锁定全部库下的表。本选项只适用于 MyISAM 表,如果是 Innodb
表可以用 --single-transaction 选项。
--single-transaction
该选项在导出数据之前提交一个 BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于事务表,例如 InnoDB 和 BDB。
本选项和
--lock-tables 选项是互斥的,因为 LOCK TABLES 会使任何挂起的事务隐含提交。
要想导出大表的话,应结合使用 --quick 选项。
--hex-blob
使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用本选项。影响到的字段类型有 BINARY、VARBINARY、BLOB。
--triggers
同时导出触发器。该选项默认启用,用 --skip-triggers
禁用它。
--extended-insert = true|false
默认情况下,mysqldump 开启 --complete-insert (即-c)模式,因此不想用它的的话,就使用本选项,设定它的值为 false 即可。这个选项的含义就是表的每行一个insert语句
其他备份模式
1、mysqlhotcopy 是一个 PERL 程序,最初由Tim
Bunce编写。它使用 LOCK TABLES、FLUSH TABLES 和
cp 或 scp
来快速备份数据库。它是备份数据库或单个表的最快的途径,但它只能运行在数据库文件(包括数据表定义文件、数据文件、索引文件)所在的机器上。mysqlhotcopy 只能用于备份 MyISAM,并且只能运行在 类Unix 和
NetWare 系统上。
2、sql语法备份
BACK TABLE tbl_name TO '/tmp/db_name/'(注意,必须要有 FILE 权限才能执行本SQL)
SELECT INTO OUTFILE '/tmp/db_name/tbl_name.txt' FROM tbl_name(则是把数据导出来成为普通的文本文件,可以自定义字段间隔的方式,方便处理这些数据,也就是不能直接用来导入的)
3、二进制日志备份
my.cf的[mysqld]下加入
log-bin = binlog
log-bin-index = binlog.index
重启后会在mysql的data文件夹中生成binlog.000001 以及 binlog.index,前面的文件是 mysqld 记录所有对数据的更新操作,后面的文件则是所有
binlog 的索引,都不能轻易删除,如果是备份复制系统中的从服务器,还应该备份 master.info 和 relay-log.info 文件。
备份出来的 binlog 文件可以用 MySQL 提供的工具 mysqlbinlog 来查看,如:
/usr/local/mysql/bin/mysqlbinlog /tmp/binlog.000001
该工具允许你显示指定的数据库下的所有 SQL 语句,并且还可以限定时间范围,相当的方便,详细的请查看手册。
恢复时,可以采用类似以下语句来做到:
/usr/local/mysql/bin/mysqlbinlog /tmp/binlog.000001 | mysql -uxxx -pxxx db_name
把 mysqlbinlog 输出的 SQL 语句直接作为输入来执行它。
阅读(821) | 评论(0) | 转发(0) |