(一)MysqLdump介绍
MysqLdump是MysqL自带的逻辑备份工具,类似于Oracle的expdp/impdp,MysqLdump备份十分灵活,可以在以下级别对数据库进行备份:
MysqLdump的备份结果集有两种文件:一种是将数据转换为标准的sql语句,另一种是按照指定的分隔符,输出为特定格式的平面文件。
可以直接使用MysqLdump命令查看MysqLdump的用法
[root@MysqLserver ~]# MysqLdump Usage: MysqLdump [OPTIONS] database [tables] OR MysqLdump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] OR MysqLdump [OPTIONS] --all-databases [OPTIONS] For more options,use MysqLdump --help
MysqLdump参数众多,如果要查看所有参数信息,可以使用命令:
(三)MysqLdump参数
MysqLdump参数众多,常用参数如下:
类型 | 参数 | 作用 |
帮助参数 | -? [--help] | 显示帮助信息 |
连接参数 | -u [--user] | 指定连接的数据库用户 |
-p [--password] | 指定用户的密码 | |
-S [--socket] | 指定socket文件连接数据库,只能用于本地连接 | |
-h [--host] | 指定要连接的主机名称或者IP | |
-P [--port] | 指定连接数据库的端口 | |
字符集参数 | --default-character-set | 字符集参数,默认字符集utf-8 |
导出数据控制参数 | -A [--all-databases] | 导出所有数据库 |
-B [--databases] | 导出指定的某个或某几个数据库 | |
--tables | 参数值的格式为“db_name table_name” | |
-w [--where] | 导出符合条件的数据 | |
-n [--no-create-db] | 不生成建库的脚本,即使指定--all-databases或--databases参数 | |
--ignore-table | 指定表不导出,参数值格式为“--ignore-table=db_name.table_name”,每次只能指定一个值,如果要指定多个值,需多次使用--ignore-table参数 | |
-d [--no-data] | 只导出表结构,不导行数据 | |
-t [--no-create-info] | 只导行数据,不导表结构 | |
锁控制参数 | -l [--lock-tables] | 对象在导出期间,会锁定该对象,此时其它会话无法对该表执行写入操作,默认启用 |
--single-transaction |
在导出数据时会创建一致性的快照,在保证保证数据导出一致性的情况下,还不会阻塞其它会话的读写操作。 该参数会创建一致性的备份,是十分重要的参数。备份的是在执行MysqLdump这一时刻的数据库的状态,后续数据库变化不会备份 |
|
其它参数 | --force | 在导出导入过程中,如果遇到错误,继续执行 |
--master-data | 这将导致二进制日志位置和文件名附加到输出文件中。如果等于1,则将其作为更改主命令打印;如果等于2,则将其作为注释打印。此选项将启用--lock-all-tables,除非也指定了--single-transaction(在这种情况下,全局读取锁定只在转储开始时占用很短的时间)。在任何情况下,日志上的任何操作都将在转储的确切时刻发生。选项自动关闭锁定表。 |
(四)备份样例
初始数据库信息:
MysqL> show databases; +--------------------+ | Database | | information_schema | MysqL | performance_schema | sys | testdb ------------------+
(4.1)执行全库备份
MysqLdump -uroot -p123456 -h192.168.10.15 -P3306 --all-databases --single-transaction --force > all_db.sql
注:information_schema是特殊的数据库,即使全备,也不会备份该数据库。
(4.2)备份多个数据库
# 备份多个数据库:MysqL和testdb MysqLdump -uroot -p123456 -h192.15 -P3306 --databases MysqL testdb --single-transaction --force > multi_db.sql
(4.3)备份单个数据库
根据是否使用“--databases”参数,单个数据库的备份有2种方法。
databases参数 MysqLdump -uroot -p123456 -h192.15 -P3306 --databases testdb --single-transaction --force > testdb_method1.sql # 方法2--15 -P3306 testdb --single-transaction --force > testdb_method2.sql
两者的区别在于添加“--database”参数,则会在导出语句中包含建库语句。
[root@MysqLserver MysqLbackup]# cat testdb_method1.sql |grep "CREATE DATABASE" CREATE DATABASE /*!32312 IF NOT EXISTS*/ `testdb` !40100 DEFAULT CHARACTER SET utf8 */; [root@MysqLserver MysqLbackup]# cat testdb_method2.sql |"
(4.4)导出数据库的某些表
(五)还原样例
(5.1)执行全库还原,发现sys,和performance_schema没还原
执行还原操作
查看还原结果:
(2)执行testdb数据库还原
对于使用“--databses”参数创建的备份,直接执行sql语句,如果没有testdb数据库,则自动创建testdb数据库,再导入数据,如果有testdb数据库,则直接导入数据
对于没有使用“--databases”参数创建的备份,必须先创建数据库,再执行导入,导入时须指定数据库名称。
【完】