### 一、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
```