首页 > 代码库 > MySQL完全备份、增量备份与恢复[转]
MySQL完全备份、增量备份与恢复[转]
原文链接:http://www.360doc.com/content/11/1209/09/834950_170836197.shtml
场景:每周日执行一次完全备份,每天下午1点执行增量备份
[ 适用版本 ] MySQL 4.x – 6.x
[ 配置 ]
执行增量备份的前提条件是MySQL打开log-bin日志开关,例如在my.ini或my.cnf中
加入
log-bin=/opt/Data/mysql-bin
“log-bin=”后的字符串为日志记载目录,一般建议放在不同于mysql数据目录的磁盘上。
[ 完全备份]
假定星期日下午1点执行完全备份,适用于MyISAM存储引擎。
mysqldump –lock-all-tables –flush-logs –master-data=http://www.mamicode.com/2 -u root -p test > >
对于InnoDB 将–lock-all-tables替换为–single-transaction
–flush-logs 为结束当前日志,生成新日志文件
–master-data=http://www.mamicode.com/2 选项将会在输出SQL中记录下完全备份后新日志文件的名称,
用于日后恢复时参考,例如输出的备份SQL文件中含有:
– CHANGE MASTER TO MASTER_LOG_FILE=’mysql-bin.000002′, MASTER_LOG_POS=106;
其他说明:
如果mysqldump加上–delete-master-logs 则清除以前的日志,以释放空间。但是如果服务器配置为镜像的复制主服务器,用mysqldump –delete-master-logs删掉MySQL二进制日志很危险,因为从服务器可能还没有完全处理该二进制日志的内容。在这种情况下,使用 PURGE MASTER LOGS更为安全。
[ 增量备份 ]
每日定时使用 mysqladmin flush-logs来创建新日志,并结束前一日志写入过程。并
把前一日志备份,例如上例中开始保存数据目录下的日志文件 mysql-bin.000002 , …
[ 从备份中恢复 ]
* 恢复完全备份
mysql -u root -p < backup_sunday_1_PM.sql
* 恢复增量备份
mysqlbinlog mysql-bin.000002 … | mysql -u root -p
注意此次恢复过程亦会写入日志文件,如果数据量很大,建议先关闭日志功能
参考:http://bbs.bitscn.com/171622
常用参数:
–lock-tables, -l
Lock all tables before dumping them. The tables are locked with READ LOCAL to allow concurrent inserts in the case of MyISAM
tables. For transactional tables such as InnoDB and BDB, –single-transaction is a much better option, because it does not need
to lock the tables at all.
Please note that when dumping multiple databases, –lock-tables locks tables for each database separately. Therefore, this
option does not guarantee that the tables in the dump file are logically consistent between databases. Tables in different
databases may be dumped in completely different states.
–no-data, -d
Do not write any table row information (that is, do not dump table contents). This is very useful if you want to dump only the
CREATE TABLE statement for the table.
–opt
This option is shorthand; it is the same as specifying –add-drop-table –add-locks –create-options –disable-keys
–extended-insert –lock-tables –quick –set-charset. It should give you a fast dump operation and produce a dump file that can
be reloaded into a MySQL server quickly.
The –opt option is enabled by default. Use –skip-opt to disable it. See the discussion at the beginning of this section for
information about selectively enabling or disabling certain of the options affected by –opt.
* –compatible=name
它告诉 mysqldump,导出的数据将和哪种数据库或哪个旧版本的 MySQL 服务器相兼容。值可以为 ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options 等,要使用几个值,用逗号将它们隔开。当然了,它并不保证能完全兼容,而是尽量兼容。
* –complete-insert,-c
导出的数据采用包含字段名的完整 INSERT 方式,也就是把所有的值都写在一行。这么做能提高插入效率,但是可能会受到 max_allowed_packet 参数的影响而导致插入失败。因此,需要谨慎使用该参数,至少我不推荐。
* –default-character-set=charset
指定导出数据时采用何种字符集,如果数据表不是采用默认的 latin1 字符集的话,那么导出时必须指定该选项,否则再次导入数据后将产生乱码问题。
* –disable-keys
告诉 mysqldump 在 INSERT 语句的开头和结尾增加 /*!40000 ALTER TABLE table DISABLE KEYS */; 和 /*!40000 ALTER TABLE table ENABLE KEYS */; 语句,这能大大提高插入语句的速度,因为它是在插入完所有数据后才重建索引的。该选项只适合 MyISAM 表。
* –extended-insert = true|false
默认情况下,mysqldump 开启 –complete-insert 模式,因此不想用它的的话,就使用本选项,设定它的值为 false 即可。
* –hex-blob
使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用本选项。影响到的字段类型有 BINARY、VARBINARY、BLOB。
* –lock-all-tables,-x
在开始导出之前,提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭 –single-transaction 和 –lock-tables 选项。
* –lock-tables
它和 –lock-all-tables 类似,不过是锁定当前导出的数据表,而不是一下子锁定全部库下的表。本选项只适用于 MyISAM 表,如果是 Innodb 表可以用 –single-transaction 选项。
* –no-create-info,-t
只导出数据,而不添加 CREATE TABLE 语句。
* –no-data,-d
不导出任何数据,只导出数据库表结构。
* –opt
这只是一个快捷选项,等同于同时添加 –add-drop-tables –add-locking –create-option –disable-keys –extended-insert –lock-tables –quick –set-charset 选项。本选项能让 mysqldump 很快的导出数据,并且导出的数据能很快导回。该选项默认开启,但可以用 –skip-opt 禁用。注意,如果运行 mysqldump 没有指定 –quick 或 –opt 选项,则会将整个结果集放在内存中。如果导出大数据库的话可能会出现问题。
* –quick,-q
该选项在导出大表时很有用,它强制 mysqldump 从服务器查询取得记录直接输出而不是取得所有记录后将它们缓存到内存中。
* –routines,-R
导出存储过程以及自定义函数。
* –single-transaction
该选项在导出数据之前提交一个 BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于事务表,例如 InnoDB 和 BDB。
本选项和 –lock-tables 选项是互斥的,因为 LOCK TABLES 会使任何挂起的事务隐含提交。
要想导出大表的话,应结合使用 –quick 选项。
* –triggers
同时导出触发器。该选项默认启用,用 –skip-triggers 禁用它