成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

揭秘MySQL 8.4備份利器:全面解讀MySQLDump參數與實戰技巧

原創 精選
數據庫 MySQL
MySQLDump 是 MySQL 數據庫管理系統提供的一個實用工具,用于創建數據庫的邏輯備份。它通過生成 SQL 腳本文件,將數據庫中的數據和結構導出,以便進行備份和恢復。

作者 | 吳守陽

審校 | 重樓

簡介

MySQLDump 是 MySQL 數據庫管理系統提供的一個實用工具,用于創建數據庫的邏輯備份。它通過生成 SQL 腳本文件,將數據庫中的數據和結構導出,以便進行備份和恢復。這個工具非常適用于需要遷移數據庫、備份數據、或者將數據庫內容導出為 SQL 文件的場景。

工作原理

MySQLDump 的工作原理如下:

  1. 連接數據庫MySQLDump 通過指定的用戶憑證連接到 MySQL 服務器。
  2. 鎖定表:為了保證數據一致性,MySQLDump 在導出數據之前會鎖定表或使用事務(具體取決于使用的選項,如--lock-tables--single-transaction)。
  3. 導出數據和結構MySQLDump 生成包含CREATE TABLEINSERT INTO 語句的 SQL 文件,這些語句可以重建表的結構并重新插入數據。
  4. 寫入文件:最終生成的 SQL 腳本文件被寫入到指定的輸出文件中,或者直接輸出到標準輸出(如控制臺)。

優點

  1. 簡單易用MySQLDump 提供了多種選項,可以靈活地導出數據和表結構。
  2. 廣泛支持:它支持幾乎所有的 MySQL 和 MariaDB 版本。
  3. 易于恢復:導出的 SQL 文件可以直接用于恢復數據庫,通過簡單的 MySQL 命令即可重新導入數據。
  4. 兼容性好:SQL 文件是純文本格式,易于編輯和傳輸。

缺點

  1. 性能問題:對于大型數據庫,MySQLDump 的備份和恢復速度可能較慢,尤其是在網絡較慢或磁盤性能不佳的環境下。
  2. 數據一致性問題:在備份過程中,如果沒有正確使用事務或鎖定表,可能會導致數據不一致。
  3. 無增量備份MySQLDump 不支持增量備份,每次備份都需要導出整個數據庫。

使用場景

  1. 小型數據庫備份:對于小型數據庫,MySQLDump 是一個簡單且高效的備份工具。
  2. 數據庫遷移:在將數據庫從一個服務器遷移到另一個服務器時,MySQLDump 可以生成完整的 SQL 腳本,方便在新服務器上重建數據庫。
  3. 開發和測試:在開發和測試環境中,可以使用MySQLDump 創建數據庫的快照,以便隨時恢復到某個特定狀態。
  4. 數據導出:將數據庫數據導出為 SQL 文件,以便進行數據分析、歸檔或傳輸。

備份示例

備份整個數據庫帶備份點:

mysqldump -u username -p password --single-transaction --source-data=2 --all-databases > all_databases.sql

備份整個數據庫帶備份點、GTID點位:

mysqldump -u username -p password --single-transaction --source-data=2 --set-gtid-purged=on --all-databases > all_databases.sql

備份整個數據庫將行合并一起批量 INSERT:

mysqldump -u username -p password --single-transaction --extended-insert --all-databases > all_databases.sql

備份整個數據庫將每行數據拆分成一個INSERT:

mysqldump -u username -p password --single-transaction --skip-extended-insert --all-databases > all_databases.sql

備份整個數據庫使用完整的insert語句(包含列名稱):

mysqldump -u username -p password --single-transaction --complete-insert --all-databases > all_databases.sql

備份整個數據庫包括觸發器、存儲過程、事件:

mysqldump -u username -p password --single-transaction --triggers --routines --events --all-databases > all_databases.sql

備份整個數據庫:

mysqldump -u username -p password --single-transaction --all-databases > all_databases.sql

備份單個數據庫:

mysqldump -u username -p password --single-transaction database_name > database_name.sql

備份多個指定的數據庫:

mysqldump -u username -p password --single-transaction --databases database1 database2 > databases.sql

備份單個表:

mysqldump -u username -p password --single-transaction database_name table_name > table_name.sql

備份多個指定的表:

mysqldump -u username -p password --single-transaction database_name table1 table2 > tables.sql

僅備份表結構:

mysqldump -u username -p password --single-transaction --no-data database_name > schema.sql

僅備份數據:

mysqldump -u username -p password --single-transaction --no-create-info database_name > data.sql

使用 gzip 壓縮備份文件:

mysqldump -u username -p password --single-transaction database_name | gzip > database_name.sql.gz

備份并排除某些表:

mysqldump -u username -p password --single-transaction --ignore-table=database_name.table_name database_name > database_name.sql

備份時不包含 CREATE DATABASE 語句:

mysqldump -u username -p password --single-transaction --no-create-db database_name > database_name.sql

備份過程中添加清除表的語句:

mysqldump -u username -p password --single-transaction --add-drop-table database_name > database_name.sql

備份時生成帶有時間戳的文件名:

mysqldump -u username -p password --single-transaction database_name > database_name_`date +%Y%m%d_%H%M%S`.sql

備份帶where條件關閉GTID點位:

mysqldump username -p password -t --single-transaction --set-gtid-purged=OFF --where="id>=2 and id <=8" database_name table_name >t1.sql

備份整個數據庫將INSERT替換為REPLACE INTO:

mysqldump -u username -p password --single-transaction --replace --all-databases > all_databases.sql

備份整個數據庫避免備份語句寫入slowlog:

mysqldump -u username -p password --single-transaction --mysqld-long-query-time=30s --all-databases > all_databases.sql

參數

--print-defaults

打印程序參數列表并退出。

--no-defaults

不從任何選項文件中讀取默認選項,除了登錄文件。

--defaults-file=#

僅從給定文件#讀取默認選項。

--defaults-extra-file=#

在全局文件讀取后再讀取這個文件#。

--defaults-group-suffix=#

也讀取group與suffix拼接的組。

--login-path=#

從登錄文件中讀取此路徑。

--no-login-paths

不從登錄路徑文件中讀取登錄路徑。

-A, --all-databases

傾倒所有數據庫。這與--databases選項相同,只是選擇了所有數據庫。

-Y, --all-tablespaces

傾倒所有表空間。

-y, --no-tablespaces

不傾倒任何表空間信息。

--add-drop-database

在每個CREATE之前添加一個DROP DATABASE。

--add-drop-table

在每個CREATE之前添加一個DROP TABLE。 (默認為開啟;使用--skip-add-drop-table禁用。)

--add-drop-trigger

在每個CREATE之前添加一個DROP TRIGGER。

--add-locks

在INSERT語句周圍添加鎖定。 (默認為開啟;使用--skip-add-locks禁用。)

--allow-keywords

允許創建關鍵字列名。

--apply-replica-statements

在“CHANGE REPLICATION SOURCE”之前添加“STOP REPLICA”,并在轉儲底部添加“START REPLICA”。使用--output-as-version切換為舊術語。

--apply-slave-statements

此選項已棄用,將在將來的版本中刪除。請改用apply-replica-statements。

--bind-address=name

綁定到的IP地址。

--character-sets-dir=name

字符集文件目錄。

--column-statistics

添加一個ANALYZE TABLE語句以重新生成任何現有的列統計信息。 (默認為開啟;使用--skip-column-statistics禁用。)

-i, --comments

寫入額外信息。 (默認為開啟;使用--skip-comments禁用。)

--compatible=name

更改轉儲以與給定模式兼容。默認情況下,表以針對MySQL優化的格式轉儲。唯一合法的模式是ANSI。需要MySQL服務器版本4.1.0或更高。

--compact

提供更少冗長的輸出(用于調試)。禁用結構注釋和頁眉/頁腳構造。啟用選項--skip-add-drop-table、--skip-add-locks、--skip-comments、--skip-disable-keys、--skip-set-charset。

-c, --complete-insert

使用完整的INSERT語句。

-C, --compress

在服務器/客戶端協議中使用壓縮。

-a, --create-options

包括所有MySQL特定的創建選項。 (默認為開啟;使用--skip-create-options禁用。)

-B, --databases

轉儲多個數據庫。注意在用法上的不同;在這種情況下不給出表。所有名稱參數都被視為數據庫名稱。將包括“USE db_name;”在輸出中。

-#, --debug[=#]

這是非調試版本。捕獲此錯誤并退出。

--debug-check

這是非調試版本。捕獲此錯誤并退出。

--debug-info

這是非調試版本。捕獲此錯誤并退出。

--default-character-set=name

設置默認字符集。

--delete-source-logs

在備份之前輪換日志,等同于FLUSH LOGS,并在備份后清除所有舊的二進制日志,等同于PURGE LOGS。這將自動啟用--source-data。

--delete-master-logs

此選項已棄用,將在將來的版本中刪除。請改用delete-source-logs。

-K, --disable-keys

將“/*!40000 ALTER TABLE tb_name DISABLE KEYS */;”和“/*!40000 ALTER TABLE tb_name ENABLE KEYS */;”放入輸出中。 (默認為開啟;使用--skip-disable-keys禁用。)

--dump-replica[=#]

這導致源的二進制日志位置和文件名附加到轉儲的數據輸出中。將值設置為1,將其打印為CHANGE REPLICATION SOURCE命令在轉儲的數據輸出中;如果等于2,那個命令將以注釋符號前綴。此選項將打開--lock-all-tables,除非還指定了--single-transaction(在這種情況下,全局讀鎖僅在轉儲開始時短暫持有 - 不要忘記閱讀有關--single-transaction的內容)。在所有情況下,日志上的任何操作都將在轉儲的確切時刻發生。選項會自動關閉--lock-tables。

--dump-slave[=#]

此選項已棄用,將在將來的版本中刪除。請改用dump-replica。

-E, --events

轉儲事件。

-e, --extended-insert

使用包含多個VALUES列表的多行INSERT語法。 (默認為開啟;使用--skip-extended-insert禁用。)

--fields-terminated-by=name

輸出文件中的字段以給定字符串終止。

--fields-enclosed-by=name

輸出文件中的字段以給定字符封閉。

--fields-optionally-enclosed-by=name

輸出文件中的字段可以選擇以給定字符封閉。

--fields-escaped-by=name

輸出文件中的字段以給定字符轉義。

-F, --flush-logs

在開始轉儲之前在服務器中刷新日志文件。請注意,如果一次性轉儲多個數據庫(使用--databases=或--all-databases選項),則將為每個轉儲的數據庫刷新日志。例外情況是使用--lock-all-tables或--source-data:在這種情況下,日志將僅刷新一次,對應于所有表被鎖定的時刻。因此,如果您希望您的轉儲和日志刷新在完全相同的時刻發生,您應該使用--lock-all-tables或--source-data與--flush-logs。

--flush-privileges

在轉儲MySQL數據庫后發出FLUSH PRIVILEGES語句。應在轉儲包含MySQL數據庫及任何其他依賴于MySQL數據庫數據的數據庫時使用。

-f, --force

即使遇到SQL錯誤也繼續。

-?, --help

顯示此幫助消息并退出。

--hex-blob

以十六進制格式轉儲二進制字符串(BINARY、VARBINARY、BLOB)。

-h, --host=name

連接的主機。

--ignore-error=name

遇到時要忽略的錯誤號列表,用逗號分隔。

--ignore-table=name

不轉儲指定表。要忽略多個表,多次使用此指令,每次指定數據庫和表名,例如--ignore-table=database.table。

--include-source-host-port

在使用--dump-replica生成的轉儲中的“CHANGE REPLICATION SOURCE TO..”中添加“SOURCE_HOST=<host>,SOURCE_PORT=<port>”。

--include-master-host-port

此選項已棄用,將在將來的版本中刪除。請改用include-source-host-port。

--insert-ignore

使用INSERT IGNORE插入行。

--lines-terminated-by=name

輸出文件中的行以給定字符串終止。

-x, --lock-all-tables

鎖定所有數據庫中的所有表。通過在整個轉儲期間獲取全局讀鎖來實現。自動關閉--single-transaction和--lock-tables。

-l, --lock-tables

鎖定所有表以供讀取。 (默認為開啟;使用--skip-lock-tables禁用。)

--log-error=name

將警告和錯誤追加到給定文件中。

--mysqld-long-query-time=#

為此轉儲會話設置long_query_time。省略標志意味著使用服務器值。

--source-data[=#]

將二進制日志位置和文件名附加到輸出。如果等于1,則輸出為CHANGE REPLICATION SOURCE命令;如果等于2,則該命令以注釋符號為前綴。該選項會自動打開--lock-all-tables,除非同時指定了--single-transaction(在這種情況下,在轉儲的開始時會短暫地獲取全局讀鎖)。

--master-data[=#]

此選項已棄用,并將在將來的版本中移除。請改用--source-data。

--max-allowed-packet=#

發送到服務器或從服務器接收的最大數據包長度。

--net-buffer-length=#

TCP/IP和套接字通信的緩沖區大小。

--no-autocommit

在表周圍包裹autocommit/commit語句。

-n, --no-create-db

如果給出了--all-databases或--databases,則不輸出每個轉儲數據庫的CREATE DATABASE ... IF EXISTS語句。

-t, --no-create-info

不輸出表創建信息。

-d, --no-data

不包括行信息。

-N, --no-set-names

等同于--skip-set-charset。

--opt

等同于--add-drop-table、--add-locks、--create-options、--quick、--extended-insert、

--lock-tables、--set-charset和--disable-keys。默認情況下啟用,使用--skip-opt禁用。

--order-by-primary

按主鍵或第一個唯一鍵排序每個表的行。當轉儲MyISAM表以加載到InnoDB表時很有用,但會使轉儲本身需要更長時間。

-p, --password[=name]

連接到服務器時使用的密碼。如果未提供密碼,則會從tty中詢問。

-,, --password1[=name]

第一因子認證插件的密碼。

-,, --password2[=name]

第二因子認證插件的密碼。

-,, --password3[=name]

第三因子認證插件的密碼。

- P, --port=#

連接時要使用的端口號。

--protocol=name

連接使用的協議(tcp,socket,pipe,memory)。

-q, --quick

不緩沖查詢,直接轉儲到stdout。默認情況下啟用,使用--skip-quick禁用。

-Q, --quote-names

使用反引號(`)引用表和列名。默認情況下啟用,使用--skip-quote-names禁用。

--replace

使用REPLACE INTO而不是INSERT INTO。

-r, --result-file=name

將輸出直接寫入給定的文件。此選項應在使用回車換行對(\r\n)分隔文本行的系統(例如DOS、Windows)中使用。此選項確保只使用單個換行符。

-R, --routines

轉儲存儲過程和函數。

--set-charset

將'SET NAMES default_character_set'添加到輸出中。默認情況下啟用,使用--skip-set-charset禁用。

--set-gtid-purged[=name]

將'SET @@GLOBAL.GTID_PURGED'添加到輸出中。此選項的可能值包括ON、COMMENTED、OFF和AUTO。如果使用ON并且服務器上未啟用GTIDs,則會生成錯誤。如果使用COMMENTED,則將'SET @@GLOBAL.GTID_PURGED'作為注釋添加。如果使用OFF,則此選項不起作用。如果使用AUTO并且服務器上啟用了GTIDs,則會將'SET @@GLOBAL.GTID_PURGED'添加到輸出中。如果禁用了GTIDs,則AUTO不起作用。如果未提供任何值,則將考慮默認值(AUTO)。

--single-transaction

通過在單個事務中轉儲所有表來創建一致的快照。僅適用于支持多版本控制的存儲引擎(目前僅有InnoDB);不能保證對其他存儲引擎是一致的。在進行--single-transaction轉儲時,為確保一個有效的轉儲文件(正確的表內容和二進制日志位置),不應有其他連接使用以下語句:ALTER TABLE、DROP TABLE、RENAME TABLE、TRUNCATE TABLE,因為一致的快照與這些操作不是隔離的。此選項會自動關閉--lock-tables。

--dump-date

在輸出的末尾加上轉儲日期。默認情況下啟用,使用--skip-dump-date禁用。

--skip-opt

禁用--opt。禁用--add-drop-table、--add-locks、--create-options、--quick、--extended-insert、--lock-tables、--set-charset和--disable-keys。

-S, --socket=name

要使用的套接字文件。

--server-public-key-path=name

服務器公共RSA密鑰的文件路徑(PEM格式)。

--get-server-public-key

獲取服務器的公共密鑰。

--ssl-mode=name

SSL連接模式。

--ssl-ca=name

CA文件的路徑(PEM格式)。

--ssl-capath=name

CA目錄的路徑。

--ssl-cert=name

X509證書的路徑(PEM格式)。

--ssl-cipher=name

要使用的SSL密碼。

--ssl-key=name

X509密鑰的路徑(PEM格式)。

--ssl-crl=name

證書吊銷列表。

--ssl-crlpath=name

證書吊銷列表路徑。

--tls-version=name

要使用的TLS版本。允許的值為:TLSv1.2、TLSv1.3。

--ssl-fips-mode=name

SSL FIPS模式(僅適用于OpenSSL)。允許的值為:OFF、ON、STRICT。

--tls-ciphersuites=name

要使用的TLS v1.3密碼。

--ssl-session-data=name

要使用的會話數據文件以啟用SSL會話重用。

--ssl-session-data-continue-on-failed-reuse

如果設置為ON,則此選項將允許連接在會話數據無法重用時仍然成功。

--tls-sni-servername=name

要傳遞給服務器的SNI服務器名稱。

-T, --tab=name

為每個表創建制表符分隔的文本文件并指定路徑。注意:僅當mysqldump在與mysqld服務器相同的機器上運行時才起作用。

--tables

覆蓋選項--databases(-B)。

--output-as-version[=name]

定義轉儲中用于副本和事件命令的術語,允許創建與僅接受過時命令的較低版本兼容的轉儲。此選項的可能值為SERVER、BEFORE_8_0_23和BEFORE_8_2_0。默認為SERVER,如果設置,則讀取服務器版本并輸出與該版本兼容的命令。這意味著如果服務器低于8.2.0,則會輸出事件的DEPRECATED DISABLE ON SLAVE術語;如果低于8.0.23,則還會使用事件的DEPRECATED SLAVE/CHANGE MASTER術語。如果設置為BEFORE_8_2_0,則SHOW CREATE EVENT命令將始終顯示如何在低于8.2.0版本的服務器上創建事件。如果設置為BEFORE_8_0_23,則轉儲還將包含像START SLAVE或CHANGE MASTER TO等已棄用的副本命令。這會影響--events、--dump-replica、--source-data、--apply-replica-statements和--include-source-host-port的輸出。

--triggers

為每個轉儲的表轉儲觸發器。默認情況下啟用,使用--skip-triggers禁用。

--tz-utc

在轉儲的頂部設置'TIME_ZONE='+00:00',允許在服務器具有不同時區數據或在具有不同時區的服務器之間移動數據時轉儲TIMESTAMP數據。默認情況下啟用,使用--skip-tz-utc。

-u, --user=name

指定用于登錄的用戶名,如果不是當前用戶。

-v, --verbose

打印有關各個階段的詳細信息。

-V, --version

輸出版本信息并退出。

-w, --where=name

僅轉儲所選記錄。引號是必需的。

-X, --xml

將數據庫轉儲為格式良好的XML。

--plugin-dir=name

指定客戶端插件的目錄。

--default-auth=name

指定默認的認證客戶端插件。

--enable-cleartext-plugin

啟用/禁用明文認證插件。

-M, --network-timeout

允許通過將max_allowed_packet設置為最大值,net_read_timeout/net_write_timeout設置為大值來轉儲大表。默認情況下啟用,使用--skip-network-timeout禁用。

--show-create-table-skip-secondary-engine

控制是否轉儲SECONDARY_ENGINE CREATE TABLE子句。對不支持服務器端選項的舊服務器沒有影響。

--compression-algorithms=name

在服務器/客戶端協議中使用的壓縮算法。有效值是任何'zstd'、'zlib'、'uncompressed'的組合。

--zstd-compression-level=#

在客戶端/服務器協議中使用的此壓縮級別,如果--compression-algorithms=zstd。有效范圍是1到22(包括)。默認值為3。

--skip-generated-invisible-primary-key

控制是否轉儲生成的不可見主鍵和鍵列。

--init-command=name

連接到MySQL服務器時要執行的單個SQL命令。在重新連接時將自動重新執行。

--init-command-add=name

添加要在連接到MySQL服務器時執行的SQL命令到列表中。在重新連接時將自動重新執行。

--ignore-views

跳過轉儲表視圖。

總結

MySQLDump 是 MySQL 數據庫管理系統中一個非常有用的工具,適用于各種備份和遷移場景。盡管它在處理大型數據庫時可能存在性能和一致性問題,但其簡單性和廣泛支持使其在許多情況下仍然是首選工具。通過合理配置選項和參數,MySQLDump 可以滿足大多數 MySQL 數據庫的備份和恢復需求。

作者介紹

吳守陽,51CTO社區編輯,擁有8年DBA工作經驗,熟練管理MySQL、Redis、MongoDB等開源數據庫。精通性能優化、備份恢復和高可用性架構設計。善于故障排除和自動化運維,保障系統穩定可靠。具備良好的團隊合作和溝通能力,致力于為企業提供高效可靠的數據庫解決方案。


責任編輯:華軒 來源: 51CTO
相關推薦

2010-08-13 14:44:26

思科路由器IOS軟件

2009-12-29 16:37:35

Ubuntu 9.10

2024-12-03 11:29:31

Javathis變量

2021-07-16 10:31:29

MySQLDump技巧

2024-11-11 10:00:00

2024-08-30 14:21:04

2010-05-26 10:25:50

MySQLdump增量

2009-08-26 08:42:09

思科認證考試資料CCNA實戰技巧

2025-06-11 09:28:22

2018-10-30 12:15:26

CDN網絡技巧

2025-05-14 08:20:00

Linux權限管理sudo

2022-05-10 09:33:50

Pandas技巧代碼

2024-01-10 16:46:13

Kubernetes容器

2025-04-23 08:35:00

2024-06-27 08:41:21

2024-10-10 14:50:02

編程Java開發

2013-09-29 10:37:32

2024-05-17 08:38:22

2023-08-11 09:00:00

2021-08-17 11:20:25

Vue前端技巧
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 男女视频在线观看免费 | 日韩午夜在线播放 | 性网站免费 | 日本高清不卡视频 | 在线视频 中文字幕 | 毛片久久久| 欧美激情第一区 | 欧美一级二级视频 | 91视频在线观看 | 亚洲 中文 欧美 日韩 在线观看 | 三级国产三级在线 | 中文字幕视频在线观看 | 日韩视频―中文字幕 | 亚洲精品自在在线观看 | 福利视频网站 | 日韩av福利在线观看 | 国产精品1区2区 | 国产一区不卡 | 国产精品久久久久久模特 | 久久免费精品 | 日韩a在线| 九九热这里只有精品在线观看 | 99热国产精品 | 91久久夜色 | 国产www在线| 日韩视频二区 | 久久久精品网 | 亚洲欧美第一视频 | 天天干天天想 | 国产在线观看 | 午夜影院官网 | 狠狠插天天干 | 羞羞视频网站免费观看 | 欧美日日| 亚洲免费一区二区 | 精品亚洲一区二区三区四区五区 | 国产黄色在线 | 国产精品日韩在线观看一区二区 | 久久久久国色av免费观看性色 | 久久综合九色综合欧美狠狠 | 国产一区二区三区网站 |