mysql邏輯備份與還原工具mysqldump

(一)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.

 

【完】

相關文章
相關標籤/搜索