日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

MySQL 8.0 mysqldump 详解

發(fā)布時間:2024/1/1 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL 8.0 mysqldump 详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

作者公眾號,歡迎一起交流。

mysqldump命令是MySQL自帶的客戶端程序,可用于對數(shù)據(jù)庫進行備份,由于是邏輯備份,故可以看到備份的內(nèi)容是有一系列的SQL語句組成,并可根據(jù)實際情況對備份內(nèi)容進行修改。當然,使用mysqldump進行數(shù)據(jù)庫備份,需要對應的權限,比如備份表,至少需要對表的select權限,備份視圖,需要對視圖的show view權限,同樣的,將備份重新加載進數(shù)據(jù)庫,也需要相應的權限,本篇將對mysqldump命令進行一個詳細的介紹。

1 語法結構

使用mysqldump進行數(shù)據(jù)庫備份有三種方法,默認時將導出的SQL語句輸出到屏幕,可將其保存到文件中,用法分別是:

Usage: mysqldump [OPTIONS] database [tables]OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]OR mysqldump [OPTIONS] --all-databases [OPTIONS]

1.1 mysqldump [OPTIONS] database [tables]

用于導出某個數(shù)據(jù)庫或表,在導出的腳本中,沒有create database和use語句,在重新導入時,可指定數(shù)據(jù)庫,若沒有數(shù)據(jù)庫,則需要提前進行創(chuàng)建。

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

用于導出特定的數(shù)據(jù)庫,--databses選項指定后面所導出的數(shù)據(jù)庫列表,以空格分割,在每個數(shù)據(jù)庫導出之前,在導出的腳本中會寫create database和use語句,用于數(shù)據(jù)庫的創(chuàng)建和指定要操作的庫,在導入時如果數(shù)據(jù)庫不存在,則會進行創(chuàng)建。

1.3 mysqldump [OPTIONS] --all-databases [OPTIONS]

用于導出所有數(shù)據(jù)庫,默認不會導出performance_schema、sys,也不會導出information_schema,若需要導出時,需指定--databases選項。

2 選項說明

mysqldump的選項有很多,可使用mysqldump --help進行查看,選項有兩種格式,一種是長格式,一種是短格式,這里將對選項進行說明。

2.1 幫助選項

使用mysqldump時,可通過以下選項展示幫助信息:

  • -?, --help:展示幫助信息
  • -V, --version:展示版本信息

2.2 數(shù)據(jù)庫連接選項

要dump數(shù)據(jù),需要先連接到數(shù)據(jù)庫,那么對應的選項分別如下:

  • --bind-address=name:當服務器有多個網(wǎng)卡時,使用該選項綁定要連接MySQL服務器的網(wǎng)卡
  • -C,--compress:壓縮客戶端和服務器間發(fā)送的信息,MySQL 8.0.18后廢棄該選項
  • --compress-algorithms=name:MySQL 8.0.18新增,指定壓縮的算法,默認是uncompressed,壓縮算法包括:zstd、ziib、uncompressed
  • --default-auth=name:客戶端使用的默認認證插件
  • --enable-cleartext-plugin:激活/禁用mysql_clear_password認證插件
  • -h,--host=name:指定連接的主機名或IP,默認主機是localhost
  • --login-path=#:在.mylogin.cnf登錄路徑文件讀取選項,創(chuàng)建或修改登錄文件,需使用mysql_config_editor工具
  • -p,--password[=name]:指定連接數(shù)據(jù)庫的密碼
  • --plugin-dir=name:指定客戶端查看的目錄
  • -P,--port=#:使用TCP/IP連接時指定數(shù)據(jù)庫端口
  • --skip-mysql-schema:MySQL 8.0.27引入,在還原dump文件時,不drop mysql schema,默認情況下,drop mysql schema
  • -S,--socket=name:若連接localhost,需指定該選項,指定使用Unix socket進行連接
  • -u,--user=name:指定連接數(shù)據(jù)庫的用戶名
  • --zstd-compression-level=#:使用zstd壓縮算法時,指定壓縮級別,默認是3,可設置1-22之間的某一個值
  • --ssl*:這里暫不介紹

2.3 選項文件選項

在使用mysqldump時,可指定選項文件來控制使用哪些選項:

  • --defaults-extra-file=#:在讀取全局選項文件后,讀取該選項文件
  • --defaults-file=#:只讀取給定的選項文件
  • --defaults-group-suffix=#:不僅讀取常規(guī)選項組,還讀取以字串為前綴的常規(guī)名字命名的組
  • --no-defaults:指定該選項時,不會讀取任何選項文件
  • --print-defaults:讀取程序名稱以及選項文件中的所有選項

2.4 DDL相關選項

使用mysqldump時,和DDL相關的選項如下:

  • --add-drop-database:導出時在每個create語句前增加drop database語句
  • --add-drop-table:默認ON,導出時在每個create語句前增加drop table語句
  • --add-drop-trigger:導出時在每個create語句前增加drop trigger語句
  • -Y,--all-tablespaces:導出所有的表空間,僅用于NDB Cluster表
  • -n,--no-create-db:指定--all-databases或--databases時抑制create database語句輸出
  • -t,--no-create-info:導出時不輸出表創(chuàng)建信息,即只導出數(shù)據(jù),不導出表定義
  • -y,--no-tablespaces:導出時不輸出所有的create logfile group和create tablespace語句
  • --replace:導出時使用replace into代替insert into

2.5 數(shù)據(jù)庫過濾選項

使用mysqldump時,可通過選項對導出的對象進行過濾:

  • -A,--all-databases:導出所有數(shù)據(jù)庫下的所有表
  • -B,--databases:導出指定的數(shù)據(jù)庫
  • -E,--events:導出events
  • --ignore-error=name:指定導出遇到錯誤時忽略的錯誤號碼
  • --ignore-table=name:導出時排除導出的表,若排除多個表,則需指定多次,每次指定一個表,例如:--ignore-table=db.table
  • -d,--no-data:導出時不導出數(shù)據(jù)行,即只導出表定義,不導出數(shù)據(jù)
  • -R,--routines:導出存儲過程和函數(shù)
  • --tables:覆蓋--databases或-B選項,導出表
  • --triggers:導出觸發(fā)器,默認和表一起導出
  • -w,--where=name:導出滿足條件的數(shù)據(jù)行,需用雙引號引起條件

2.6 復制選項

使用mysqldump時,可創(chuàng)建空的實例,或者用于創(chuàng)建復制環(huán)境:

  • --apply-replica-statements:MySQL 8.0.26引入,和--dump-replica一起,導出時在語句之前增加stop replica語句,并在最后增加start replica語句
  • --delete-source-logs:MySQL 8.0.26引入,備份之前刷新日志,相當于執(zhí)行flush logs,執(zhí)行dump操作之后通過發(fā)送perge binary logs刪除binlog,該選項自動激活--source-data選項
  • --dump-replica[=#]:導出時輸出中包含binlog文件名和位置,指定1,則直接以change replication source to輸出,指定2,以備注的形式輸出
  • --include-source-host-port:和--dump-replica一起導出時在change replication source to后增加master_host=<host>,master_port=<port>
  • --source-data[=#]:導出時輸出中包含binlog文件名和位置,指定1,則直接以change replication source to輸出,指定2,以備注的形式輸出
  • --set-gtid-purged[=name]:輸出中增加SET @@GLOBAL.GTID_PURGED,默認值是AUTO,該選項包含的值分別是ON、COMMENTED、OFF和AUTO

2.7 格式選項

使用mysqldump時,可通過以下選項對輸出內(nèi)容進行格式化:

  • --compact:控制輸出更少的信息,該選項啟用--skip-add-drop-table、--skip-add-locks、--skip-comments、--skip-disable-keys和--skip-set-character選項
  • --compatible=name:兼容其它數(shù)據(jù)庫或舊版本的MySQL服務器,唯一允許的值是ANSI
  • -c,--complete-insert:導出時使用完整的insert語句
  • -a,--create-options:默認ON,導出時包括create table語句中所有的表選項
  • --fields-terminated-by=name、--fields-enclosed-by=name、--fields-optionally-enclosed、--fields-escaped-by=name:使用--tab選項時指定,和使用load data時相關的fields有同樣的作用
  • --hex-blob:以16進制打印binary字符串(binary、var binary、blob)
  • --lines-terminated-by=name:導出時行分隔符,使用--tab選項時指定
  • -Q,--quote-names:默認ON,導出時使用·來括住表和列名,可使用--skip-quote-names禁用
  • -r, --result-file=name:直接輸出到指定的文件,用于Windows對換行的處理
  • -T,--tab=name:創(chuàng)建tab分割的文本文件,表定義和數(shù)據(jù)分開存放,分別創(chuàng)建tb1_name.sql和tb1_name.txt文件
  • --tz-utc:默認ON,該選項可使timestamp列dump和加載進不同時區(qū)的服務器
  • -X,--xml:以xml格式導出數(shù)據(jù)庫

2.8 性能選項

使用mysqldump時,可通過以下選項對恢復時的性能進行控制:

  • --column-statistics:在輸出中添加analyze table語句,用于加載時搜集統(tǒng)計信息
  • -K,--disable-keys:默認ON,該選項只對MyISAM表的非唯一索引有效
  • -e,--extended-insert:默認ON,導出時使用包含多個VALUES列表的多行insert語句
  • --insert-ignore:導出時使用insert ignore插入行
  • --max-allowed-packet=#:默認24M,最大1G,用于在客戶端/服務器通信的最大緩沖區(qū)
  • --net-buffer-length=#:客戶端/服務器通信的初始緩沖區(qū)大小
  • -M, --network-timeout:默認ON
  • --opt:默認ON,相當于--add-drop-table、--add-locks、--create-options、--quick、--extended-insert、--lock-tables、--set-character和--disable-keys,可使用--skip-opt禁用
  • -q, --quick:用于dump大表,用于逐行檢索數(shù)據(jù),而不是檢索整個行集并緩存到內(nèi)存再dump

2.9 事務選項

使用mysqldump時,可通過如下選項做事務相關的設置:

  • --add-locks:默認ON,導出時對每個表使用lock tables和unlocktables包著,加載時可更快
  • -F, --flush-logs:在開始dump之前刷新MySQL服務器日志文件,如果使用--databases或--all-databases選項,則每dump一個數(shù)據(jù)庫都會刷新一次日志;如果只想刷新一次,可以將該選項與--lock-all-tables、--source-data或--master-data或--single-transaction一起使用
  • --flush-privileges:dump mysql數(shù)據(jù)庫后在輸出文件中增加flush privileges語句
  • -x,--lock-all-tables:通過在整個dump期間獲取全局讀鎖來實現(xiàn)鎖定所有數(shù)據(jù)庫中的所有表,該選項自動關閉--single-transaction和--lock-tables
  • -l,--lock-tables:默認ON,對于每個被dump的數(shù)據(jù)庫,在dump前鎖定所有的表,對于InnoDB表,使用--single-transaction更優(yōu)
  • --no-autocommit:將每個dump的表的insert語句封裝在set autocommit=0和commit語句之間
  • --order-by-primary:導出時以主鍵或唯一鍵排序,主要用于導出MyISAM表至InnoDB表,但比較耗時
  • --single-transaction:該選項將事務隔離級別設置為repeatable read,并在dump之前向服務器發(fā)送一條start transaction語句。只對事務表(InnoDB)有用,因為它會在發(fā)出start transaction時dump數(shù)據(jù)庫的一致狀態(tài),而不會阻塞任何應用程序;--single-transaction和--lock-tables選項是互斥的,因為lock tables會導致任何掛起的事務被隱式提交;要dump大表,可以將選項--single-transaction和--quick結合使用

2.10 國際化選項

使用mysqldump時,可通過以下選項展示字符集設置:

  • --character-sets-dir=name:字符集安裝的目錄
  • --default-character-set=name:設置默認字符集,若不指定,則使用utf8
  • -N, --no-set-names:關閉--set-charset設置
  • --set-charset:默認ON,輸出中增加set names default_character_set語句

2.11 調(diào)式選項

使用mysqldump時,可通過選項在dump文件中輸出調(diào)試信息:

  • --allow-keywords:允許使用關鍵字創(chuàng)建列
  • -i, --comments:默認ON,在導出的dump文件中增加諸如程序版本、服務器版本和主機信息
  • --dump-date:默認ON,在導出的dump文件最后打印日期
  • -f, --force:導出過程中忽略錯誤
  • --log-error=name:默認不記錄警告和錯誤信息,導出過程中可以向指定的文件輸出警告和錯誤信息
  • -v, --verbose:Verbose模式,打印更多的信息

3 dump示例

1)導出某一個數(shù)據(jù)庫,不指定--database選項,可以看出導出的腳本不包含create database和use語句,這樣可以將dump的數(shù)據(jù)庫導入到其它數(shù)據(jù)庫中

[root@node1 ~]# mysqldump -h192.168.56.201 -ufordba -pxxxxx sakila --set-gtid-purged=off > db01.sql

2)導出某一個數(shù)據(jù)庫,指定--database選項,可以看出導出的腳本包含create database和use語句,若導出多個數(shù)據(jù)庫,則在--database后以空格分割列出多個數(shù)據(jù)庫

[root@node1 ~]# mysqldump -h192.168.56.201 -ufordba -pxxxxx --databases sakila --set-gtid-purged=off > db02.sql

3)導出所有數(shù)據(jù)庫,使用--all-databases,或使用--databases列出多個數(shù)據(jù)庫,輸出同上

[root@node1 ~]# mysqldump -h192.168.56.201 -ufordba -pxxxxx --all-databases --set-gtid-purged=off > db03.sql

4)導出某一張表,將其表結構和數(shù)據(jù)分開

[root@node1 tmp]# mysqldump -h 192.168.56.201 -ufordba -pxxxxx sakila actor -T /tmp --single-transaction --set-gtid-purged=off[root@node1 tmp]# ll actor.*-rw-r--r--. 1 root root 1614 Dec 26 09:19 actor.sql-rw-r-----. 1 mysql mysql 7399 Dec 26 09:19 actor.txt

5)導出整庫或者大表時,指定--quick,可提升導出的速度,若導出存儲過程、函數(shù)、event時,可指定--routines、--events和--triggers選項

[root@node1 ~]# mysqldump -h 192.168.56.201 -ufordba -pxxxxx sakila --routines --events --triggers --single-transaction --quick --set-gtid-purged=off > db04.sql

6)若搭建復制環(huán)境,可通過指定--source-data等選項在導出的腳本中增加change replication語句,將dump的腳本用于搭建從庫

[root@node1 ~]# mysqldump -h 192.168.56.201 -ufordba -pxxxxx --all-databases --routines --events --triggers --single-transaction --quick --set-gtid-purged=off --source-data=2 > db05.sql

7)基于從庫搭建新的從庫,可在從庫dump數(shù)據(jù)庫,然后在新從庫上執(zhí)行dump的腳本

[root@node2 ~]# mysqldump -h192.168.56.202 -ufordba -pxxxxx --all-databases --dump-replica=2 --include-source-host-port --single-transaction --set-gtid-purged=off > db01.sql

4 mysqldump使用限制

使用mysqldump可對數(shù)據(jù)庫進行導出,但也有一些限制:

  • 默認不導出performance_schema或sys數(shù)據(jù)庫,若導出,可通過--databases選項指定
  • 不導出information_schema數(shù)據(jù)庫
  • 不導出InnoDB create tablespace語句
  • 不導出NDB Cluster ndbinfo數(shù)據(jù)庫
  • 導出mysql數(shù)據(jù)庫時會重建general_log和slow_query_log表,但不導出數(shù)據(jù)

總結

以上是生活随笔為你收集整理的MySQL 8.0 mysqldump 详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。