### 一、mysqldump备份
#### 1. mysqldump的三种语法格式
```
mysqldump [options] db_name [tbl_name ...]
mysqldump [options] --databases db_name ...
mysqldump [options] --all-databases
```
示例
```
mysqldump -uroot -p -h192.168.103.31 -d u_learning_report > u_learning_report.sql
```
- -u: 用户名
- -p: 密码(回车后输入,避免密码泄漏)
- -h: 数据库地址(不带端口)
- -d:只导出表结构
- u_learning_report:数据库的名称
#### 2. mysqldump常用的options的值
选项名称|描述|默认值
--|--|--
--add-drop-database|在每个 CREATE DATABASE 语句之前添加 DROP DATABASE 语句| false
--add-drop-table|在每个 CREATE TABLE 语句之前添加 DROP TABLE 语句| true
--add-locks|用 LOCK TABLES 和 UNLOCK TABLES 语句包围每个表转储|true
--all-databases|转储所有数据库中的所有表|false
--allow-keywords|允许创建作为关键字的列名|false
--compatible|生成与其他数据库系统或较旧的 MySQL 服务器更兼容的输出|(No default value)
--complete-insert|使用包含列名的完整 INSERT 语句|false
--compress|压缩客户端和服务器之间发送的所有信息|false
--databases|指定数据库名称|false
--default-character-set|指定默认字符集|utf8
--help|显示帮助信息|(No default value)
--host|MySQL 服务器所在的主机|localhost
--insert-ignore|编写 INSERT IGNORE 而不是 INSERT 语句|false
--lock-all-tables|锁定所有数据库中的所有表|false
--lock-tables|在转储之前锁定所有表|true
--no-create-db|不要写 CREATE DATABASE 语句
--no-data|不要转储表格内容|false
--password|数据库密码
--port|端口|0
--replace|编写 REPLACE 语句而不是 INSERT 语句|false
--skip-add-drop-table|不要在每个 CREATE TABLE 语句之前添加 DROP TABLE 语句
--skip-add-locks|不要加锁
--tables|覆盖 --databases 或 -B 选项
--user|连接到服务器时使用的 MySQL 用户名
##### 连接选项
- --bind-address=ip_address
在具有多个网络接口的计算机上,使用此选项选择用于连接 MySQL 服务器的接口。
- --host=host_name, -h host_name
从给定主机上的 MySQL 服务器转储数据。默认主机是localhost.
- --port=port_num, -P port_num
对于 TCP/IP 连接,要使用的端口号。
- --password[=password], -p[password]
用于连接到服务器的 MySQL 帐户的密码。密码值是可选的。如果没有给出, mysqldump会提示输入一个。如果给定,则或 和后面的密码之间 不能有空格。如果未指定密码选项,则默认为不发送密码。 --password=-p
在命令行上指定密码应该被认为是不安全的。为避免在命令行上提供密码,请使用选项文件。请参见 第 6.1.2.1 节,“密码安全的最终用户指南”。
要明确指定没有密码并且mysqldump不应提示输入密码 ,请使用该 --skip-password 选项。
##### DDL 选项
- --add-drop-database
DROP DATABASE 在每个CREATE DATABASE语句之前 写一个语句。此选项通常与--all-databasesor --databases选项结合使用, 因为CREATE DATABASE除非指定了这些选项之一,否则不会编写任何语句。
- --add-drop-table
DROP TABLE在每个CREATE TABLE 语句之前 写一个语句。
- --user=user_name, -u user_name
用于连接到服务器的 MySQL 帐户的用户名。
#### 例子
要备份整个数据库:
```
mysqldump db_name > backup-file.sql
```
要将转储文件加载回服务器:
```
mysql db_name < backup-file.sql
```
mysqldump对于通过将数据从一个 MySQL 服务器复制到另一个来填充数据库也非常有用:
```
mysqldump --opt db_name | mysql --host=remote_host -C db_name
```
您可以使用一个命令转储多个数据库:
```
mysqldump --databases db_name1 [db_name2 ...] > my_databases.sql
```
要转储所有数据库,请使用以下 --all-databases选项:
```
mysqldump --all-databases > all_databases.sql
```