利用mysqlbump实现MySQL逻辑备份与恢复
mysqldump作为重要的MySQL备份工具,功能相当强大。备份参数、恢复策略,需要仔细研究。
(1)基本语法
备份单个数据库或单个数据库中的指定表:
mysqldump [OPTIONS] database [tables]
示例:
1.备份单个数据库mysql:mysqldump -uroot -p mysql > mysql.sql
2.备份单个数据库mysql的指定表user:mysqldump -uroot -p mysql user > mysql.user.sql
备份多个数据库:
mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
示例:
1.备份多个数据库world、imkh:mysqldump -uroot -p --databases world imkh > world+imkh.sql
备份所有数据库:
mysqldump [OPTIONS] --all-databases [OPTIONS]
示例:
1.备份所有数据库:mysqldump -uroot -p --all-databases > all-databases.sql
(2)选项[OPTIONS]说明
-default-character-set=charset
指定导出数据时采用何种字符集,如果数据表不是采用默认的 latin1 字符集的话,那么导出时必须指定该选项,否则再次导入数据后将产生乱码问题。
示例:
mysqldump -uroot -p --default-character-set=utf8 employees employees>employees.sql
-lock-all-tables,-x
在开始导出之前,提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭 -single-transaction 和 -lock-tables 选项。
-lock-tables
和 -lock-all-tables 类似,不过是锁定当前导出的数据表,而不是锁定全部库下的表。本选项只适用于 MyISAM 表,如果是 Innodb 表可以用 -single-transaction 选项。
-single-transaction
该选项在导出数据之前提交一个 BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于事务表,例如 InnoDB 和 BDB。
-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
导出存储过程以及自定义函数。
本选项和 -lock-tables 选项是互斥的,因为 LOCK TABLES 会使任何挂起的事务隐含提交。
要想导出大表的话,应结合使用 -quick 选项。
-triggers
同时导出触发器。该选项默认启用,用 -skip-triggers 禁用它。
2.恢复数据库
MySQL实现的是实例级别的逻辑备份,可以发现解压出来的都是实例里面各个数据库的sql文件。再执行数据库的导入操作:
mysql -hhostname -uusername -ppassword [databasename] < backupfile.sql