(一)mysqldump介绍mysql
mysqldump是MySQL自带的逻辑备份工具,相似于Oracle的expdp/impdp,mysqldump备份十分灵活,能够在如下级别对数据库进行备份:sql
mysqldump的备份结果集有两种文件:一种是将数据转换为标准的SQL语句,另外一种是按照指定的分隔符,输出为特定格式的平面文件。数据库
(二)mysqldump的用法socket
能够直接使用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参数众多,若是要查看全部参数信息,可使用命令:sqlserver
[root@mysqlserver ~]# mysqldump --help mysqldump Ver 10.13 Distrib 5.7.27, for el7 (x86_64) ...
(三)mysqldump参数spa
mysqldump参数众多,经常使用参数以下:code
类型 | 参数 | 做用 |
帮助参数 | -? [--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 | 在导出数据时会建立一致性的快照,在保证保证数据导出一致性的状况下,还不会阻塞其它会话的读写操做。但会影响alter table、drop table、rename table、truncate table等DDL语句 | |
--force | 在导出导入过程当中,若是遇到错误,继续执行 |
(四)备份样例orm
初始数据库信息:server
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.168.10.15 -P3306 --databases mysql testdb --single-transaction --force > multi_db.sql
(4.3)备份单个数据库
根据是否使用“--databases”参数,单个数据库的备份有2种方法。
# 方法1:备份单个数据库:testdb,使用--databases参数 mysqldump -uroot -p123456 -h192.168.10.15 -P3306 --databases testdb --single-transaction --force > testdb_method1.sql # 方法2:备份单个数据库:testdb,不使用--databases参数 mysqldump -uroot -p123456 -h192.168.10.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 |grep "CREATE DATABASE"
(4.4)导出数据库的某些表
# 导出testdb的表test01,test02,目前来看,只能针对单个数据库的表进行导出 mysqldump -uroot -p123456 -h192.168.10.15 -P3306 --tables testdb test01 test02 --single-transaction --force > tables.sql
(五)还原样例
还原操做相对来讲较为简单,直接执行.sql文件便可。
(5.1)执行全库还原,发现sys,和performance_schema没还原
删除所有数据库
mysql> show databases ; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | testdb | +--------------------+ 5 rows in set (0.02 sec) mysql> drop database mysql; Query OK, 31 rows affected (0.02 sec) mysql> drop database performance_schema; Query OK, 87 rows affected (0.01 sec) mysql> drop database sys; Query OK, 101 rows affected (0.10 sec) mysql> drop database testdb; Query OK, 3 rows affected (0.01 sec)
执行还原操做
[root@mysqlserver mysqlbackup]# mysql -uroot -p123456 -h192.168.10.15 -P3306 < all_db.sql
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | testdb | +--------------------+
(2)执行testdb数据库还原
对于使用“--databses”参数建立的备份,直接执行sql语句,若是没有testdb数据库,则自动建立testdb数据库,再导入数据,若是有testdb数据库,则直接导入数据
mysql> drop database testdb; Query OK, 3 rows affected (0.02 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | +--------------------+ 2 rows in set (0.03 sec) # 恢复数据 [root@mysqlserver mysqlbackup]# mysql -uroot -p123456 -h192.168.10.15 -P3306 < testdb_method1.sql mysql: [Warning] Using a password on the command line interface can be insecure. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | testdb | +--------------------+ 3 rows in set (0.03 sec)
对于没有使用“--databases”参数建立的备份,必须先建立数据库,再执行导入,导入时须指定数据库名称。
# 若是没有建立数据库 或者 不指定数据库名称,则还原报错 [root@mysqlserver mysqlbackup]# mysql -uroot -p123456 -h192.168.10.15 -P3306 < testdb_method2.sql mysql: [Warning] Using a password on the command line interface can be insecure. ERROR 1046 (3D000) at line 22: No database selected # 指定数据库名称,还原正常 [root@mysqlserver mysqlbackup]# mysql -uroot -p123456 -h192.168.10.15 -P3306 testdb< testdb_method2.sql mysql: [Warning] Using a password on the command line interface can be insecure.
【完】