天天看點

mysql dump作用_mysqldump工具在MySQL資料庫備份過程的作用

mysqldump工具在MySQL資料庫備份過程的作用

釋出時間:2020-05-07 10:57:16

來源:億速雲

閱讀:176

作者:三月

下文主要給大家帶來mysqldump工具在MySQL資料庫備份過程的作用,希望這些文字能夠帶給大家實際用處,這也是我編輯mysqldump工具在MySQL資料庫備份過程的作用這篇文章的主要目的。好了,廢話不多說,大家直接看下文吧。

mysqldump工具是MySQL資料庫備份時, 經常用到的一個工具. 可以指定資料表, 某些資料庫, 所有資料庫級别的備份, 在指令行上敲入mysqldump回車, 可看到該三種方式的示例.

[email protected]:~$ mysqldump

Usage: mysqldump[OPTIONS] database [tables]

OR     mysqldump [OPTIONS] --databases [OPTIONS]DB1 [DB2 DB3...]

OR     mysqldump [OPTIONS] --all-databases[OPTIONS]

For moreoptions, use mysqldump --help

mysql dump作用_mysqldump工具在MySQL資料庫備份過程的作用

通過mysqldump --help, 可看到有非常多的選項(OPTIONS), 也見其功能的豐富性. 這些選項按作用, 可劃分成若幹組, 接下來就看下每組中重點選項的含義.

HelpOptions 組

1.--version

該組除了--help選項, 還有一個--version, 用于檢視mysqldump的版本.

[email protected]:~$ mysqldump --version

mysqldump  Ver 10.13 Distrib 5.6.24, for Linux (x86_64)

另外, 為了下面的說明示範, 用到的資料庫和資料表如下所示:

([email protected])[(none)]> SHOW DATABASES;

+--------------------+

|Database           |

+--------------------+

|information_schema |

|mysql              |

|performance_schema |

|stage              |

|test               |

+--------------------+

5 rows inset (0.00 sec)

([email protected])[(none)]> SHOW TABLES FROM stage;

+-----------------+

|Tables_in_stage |

+-----------------+

|st1             |

|st2             |

+-----------------+

2 rows inset (0.00 sec)

([email protected])[(none)]> SHOW TABLES FROM test;

+----------------+

|Tables_in_test |

+----------------+

|tb1_bak        |

|tb2            |

|v_tb1          |

|v_tb2          |

+----------------+

4 rows inset (0.00 sec)

ConnectionOptions 組

1.--bind-address=ip_address

若資料庫雲伺服器有多個網絡接口, 使用該選項設定其隻監聽在某個接口上, 且隻能通過該接口通路資料庫.

2.--login-path=name

登入路徑, 其是host, password, port, socket, user選項的集合. 後面的示範, 使用該登入方式, 相關細節已在"MySQL資料庫登入小貼士"中介紹過.

Option-FileOptions 組

1.--defaults-file=file_name

mysqldump隻讀取該選項指定的配置檔案中, client和mysqldump标簽下的參數. 若同時還指定了--login-path選項, 其還會讀取檔案.mylogin.cnf.

2.--no-defaults

mysqldump不讀取任何配置檔案, 一般用于讀到錯誤參數時的調試. 若同時還指定了--login-path選項, 其還會讀取檔案.mylogin.cnf.

3.--print-defaults

mysqldump會按此順序/etc/my.cnf, /etc/mysql/my.cnf,/data/3316/conf-DMYSQL_DATADIR=/data/3316/my.cnf, ~/.my.cnf 讀取這些配置檔案中, client和mysqldump标簽下的參數, 然後列印該參數, 即使有重複的. 對于重複參數後面的生效, 和mysql指令該選項含義是一樣的.

DDLOptions 組

1.--add-drop-database

在備份的SQL檔案中, 每個CREATE DATABASE語句前都明确寫入DROP DATABASE語句, SQL檔案中顯示如下:

;

CREATEDATABASE `stage` ;

該選項一般和--all-databases或—databases一塊使用, 其預設是關閉的.

2.--add-drop-table

在CREATE TABLE語句前面, 寫入DROP TABLE語句, SQL檔案中顯示如下:

DROPTABLE IF EXISTS `st1`;

CREATETABLE `st1` ...

其預設是開啟的.

3. --add-drop-trigger

在CREATE TRIGGER語句前, 寫入DROP TRIGGER語句.

其預設是關閉的.

4.--no-create-db, -n

和--databases或--all-databases一塊使用時, SQL檔案中不寫入CREATE DATABASE語句.

其預設是關閉的.

5.--no-create-info, -t

SQL檔案中不寫入CREATE TABLE語句, 即不導出資料表結構.

其預設是關閉的.

DebugOptions 組

1. --force,-f

mysqldump執行過程中, 若有SQL錯誤, 該過程仍會繼續, 同時列印錯誤日志到終端.

如有視圖v_tb1, 其依賴的表tb1改名為tb1_bak, 備份資料庫test時, 會有如下報錯, 且遇到錯誤, 備份過程就退出了.

[email protected]:~/dbbackup$ mysqldump --login-path=mytest --default-character-set=utf8mb4--result-file=test.sql --single-transaction --databases test

mysqldump:Couldn't execute 'SHOW FIELDS FROM `v_tb1`': View 'test.v_tb1' referencesinvalid table(s) or column(s) or function(s) or definer/invoker of view lackrights to use them (1356)

若上述指令行加上--force選項, 備份過程即使有錯誤, 其也會執行完.

2.--log-error=file_name

警告和錯誤日志輸會出到指定的檔案中.

參考在--force選項中給出的例子, 如下所示, 報錯輸出到檔案error.txt中.

[email protected]:~/dbbackup$ mysqldump --login-path=mytest --default-character-set=utf8mb4--force --log-error=error.txt --result-file=test.sql --single-transaction--databases test

[email protected]:~/dbbackup$ cat error.txt

mysqldump:Couldn't execute 'SHOW FIELDS FROM `v_tb1`': View 'test.v_tb1' referencesinvalid table(s) or column(s) or function(s) or definer/invoker of view lackrights to use them (1356)

InternationalizationOptions 組

1.--default-character-set=charset_name

指明mysqldump備份使用的字元集, 一般要和SHOW GLOBAL VARIABLES LIKE'character_set_server'顯示的一樣. 若資料庫字元集是utf8mb4的, 備份時未指明字元集, 其預設會使用utf8字元集, 如此恢複資料時, 就有可能出現亂碼.

2.--set-charset

在備份的SQL檔案中, 頭部加上SET NAMES語句, SQL檔案中顯示如下:

;

ReplicationOptions 組

mysqldump經常用于在主從複制環境中, 搭建一個從資料庫節點, 以下是兩個相關參數.

1.--master-data[=value]

mysqldump通過在主庫擷取GLOBAL READ LOCK, 取得從庫複制開始的坐标, 即主庫上binlog日志的名稱和位置. 該過程在general log中顯示如下:

1457271Query   FLUSH TABLES

1457271Query   FLUSH TABLES WITH READ LOCK

1457271Query   SHOW MASTER STATUS

1457271Query   UNLOCK TABLES

上面說的binlog日志名稱和位置, 會寫入CHANGE MASTER TO語句中, SQL檔案中顯示如下:

-- CHANGEMASTER TO MASTER_LOG_FILE='mysql-bin.000036', MASTER_LOG_POS=345;

該選項有2和1兩個值, 前者代表CHANGE MASTER TO語句是被注釋的, 後者沒注釋, 一般使用前者.

2.--dump-slave[=value]

該選項的含義, 和--master-data類似, 隻不過是在從庫上執行的. 其通過停止從庫的SQL線程, 來擷取對應主庫上binlog日志的名稱和位置. 該過程在general log中顯示如下:

1770998Query   SHOW SLAVE STATUS

1770998Query   STOP SLAVE SQL_THREAD

1770998Query   SHOW SLAVE STATUS

1770998Query   UNLOCK TABLES

FormatOptions 組

1.--complete-insert, -c

INSERT語句中包含資料表字段列名, SQL檔案中顯示如下:

INSERTINTO `st1` (`a`, `b`, `c`) VALUES (1,'aa',2);

2.--create-options

在CREATE TABLE語句中, 包含MySQL資料表的特定資訊, 如字段的AUTO_INCREMENT屬性, 存儲引擎, 字元集等資訊.

3.--hex-blob

對于BINARY, VARBINARY, BLOB和BIT二進制資料類型的資料, 以十六進制方式導出. 建議以該方式導出二進制資料, 這樣會避免一些由字元集轉換帶來的錯誤.

4.--result-file=file_name, -r file_name

将備份資料輸出到指定的檔案中, 使用該選項時, 不能邊備份邊壓縮, 對磁盤空間要求多些.

FilteringOptions 組

1. --all-databases,-A

備份除information_schema和performance_schema兩個資料庫之外的全部資料庫.

2.--databases, -B

備份指定的資料庫, 多個庫名間用空格分隔.

3. --events, -E

備份事件.

4.--ignore-table=db_name.tbl_name

指定不導出某資料庫中某資料表的資料, 若有多張這樣的資料表, 需多次指定. 一般用于忽略視圖.

5.--no-data, -d

不導出資料表中的資料.

6.--routines, -R

導出存儲過程.

7.--triggers

導出觸發器.

PerformanceOptions 組

1.--disable-keys

在備份的SQL檔案中, 每個資料表的INSERT語句前後添加ALTER TABLE … DISABLE| ENABLE KEYS語句, SQL檔案中顯示如下:

;

INSERTINTO `st1` ...

;

資料導入完成後, 再建立索引, 該導入效率會高些, 但此選項僅對MyISAM表的非唯一索引起作用.

2.--extended-insert, -e

使用Multiple-Row文法導出資料, 即VALUES關鍵字後帶有多組值清單, 這樣産生的備份檔案較小, 導入速斷也較快. SQL檔案中顯示如下:

INSERTINTO `st1` VALUES (1,'aa',2),(2,'bb',4),(3,'cc',6),(4,'dd',8);

3. --opt

該選項代表一個選項組, 其包含的選項如下所示, 選項含義在前後都介紹到了.

--add-drop-table,--add-locks, --create-options, --disable-keys, --extended-insert,--lock-tables, --quick, --set-charset

其預設是開啟的.

4.--quick, -q

該選項訓示mysqldump直接将備份資料寫入SQL檔案, 而不是先緩存到記憶體中, 再寫入檔案.

其預設是開啟的.

TransactionalOptions 組

1.--add-locks

在備份的SQL檔案中, 每個資料表的INSERT語句前後, 添加LOCK|UNLOCK TABLES語句, SQL檔案中顯示如下:

LOCKTABLES `st1` WRITE;

INSERTINTO `st1` ...

UNLOCKTABLES;

這樣導入時, 可以提升SQL檔案中INSERT語句的插入速度.

其預設是開啟的.

2.--flush-privileges

備份完mysql(系統庫)資料庫後, 加入FLUSH PRIVILEGES語句, 在SQL檔案中顯示如下:

-- FlushGrant Tables

;

3.--lock-all-tables, -x

通過該參數, 擷取GLOBAL READ LOCK, 保證備份資料的一緻性.

該選項和--single-transaction同時使用, 會有如下報錯:

mysqldump:You can't use --single-transaction and --lock-all-tables at the same time.

4.--lock-tables, -l

在備份每個資料庫之前, 會将其所有資料表鎖住, 在general log日志中顯示如下:

1459882Query   LOCK TABLES `st1` READ ,`st2` READ

1459882Query   UNLOCK TABLES

由于是分别鎖定的每個資料庫, 備份資料可能會不一緻.

5.--single-transaction

備份時, 将隔離級别設定為REPEATABLE, 然後START TRANSACTION開啟一個事物, 利用InnoDB存儲引擎的MVCC特性, 進行資料一緻性的備份.

注意, --single-transaction和--lock-all-tables選項是互斥的; --lock-tables和前面任何一個選項連用, 其都會被關閉.

下面看幾個實際使用到的mysqldump的執行個體

1. 導出資料庫stage的表結構.

[email protected]:~/dbbackup$ mysqldump --login-path=mytest --default-character-set=utf8mb4--force --no-data --quick --result-file=stage_struc.sql --single-transactionstage

2. 備份資料庫stage中的資料表st2.

[email protected]:~/dbbackup$ mysqldump --login-path=mytest --default-character-set=utf8mb4--force --hex-blob --quick --result-file=stage_st2.sql --single-transactionstage st2

3. 備份資料庫stage和test, 在日志error.txt可看到報錯資訊.

[email protected]:~/dbbackup$ mysqldump --login-path=mytest --default-character-set=utf8mb4--force --log-error=error.txt --hex-blob --quick --result-file=stage_test.sql--single-transaction --databases stage test

[email protected]:~/dbbackup$ cat error.txt

mysqldump:Couldn't execute 'SHOW FIELDS FROM `v_tb1`': View 'test.v_tb1' referencesinvalid table(s) or column(s) or function(s) or definer/invoker of view lackrights to use them (1356)

4. 在從資料庫進行備份, 用于搭建另一個從資料庫節點.

[[email protected]]$ mysqldump --login-path=mytest --add-drop-database --add-drop-trigger--default-character-set=utf8mb4 --dump-slave=2 --events --flush-privileges--force --log-error=error.txt --hex-blob --quick --routines--single-transaction --triggers --all-databases | gzip > all.sql.gz

[[email protected]]$ gzip -d all.sql.gz

[[email protected]]$ grep '\-\- CHANGE MASTER TO' all.sql

-- CHANGEMASTER TO MASTER_LOG_FILE='mysql-bin.000041', MASTER_LOG_POS=3068;

對于以上關于mysqldump工具在MySQL資料庫備份過程的作用,大家是不是覺得非常有幫助。如果需要了解更多内容,請繼續關注我們的行業資訊,相信你會喜歡上這些内容的。