mysqldump是mysql用於轉存儲數據庫的實用程序。它主要產生一個SQL腳本,其中包含從頭重新創建數據庫所必需的命令CREATE TABLE INSERT等。接下來通過本文給大家介紹MySQL數據庫使用mysqldump導出數據詳解,需要的朋友一起學習吧
mysqldump是mysql用於轉存儲數據庫的客戶端程序。它主要產生一系列的SQL語句,可以封裝到文件,該文件包含有所有重建您的數據庫所需要的 SQL命令如CREATE DATABASE,CREATE TABLE,INSERT等等。可以用來實現輕量級的快速遷移或恢復數據庫。是mysql數據庫實現邏輯備份的一種方式。
在日常維護工作當中經常會需要對數據進行導出操作,而mysqldump是導出數據過程中使用非常頻繁的一個工具;它自帶的功能參數非常多,文章中會列舉出一些常用的操作,在文章末尾會將所有的參數詳細說明列出來。
語法:
默認不帶參數的導出,導出文本內容大概如下:創建數據庫判斷語句-刪除表-創建表-鎖表-禁用索引-插入數據-啟用索引-解鎖表。
1
2
3
|
Usage: mysqldump [OPTIONS]
database
[tables]
OR
mysqldump [OPTIONS]
--databases [OPTIONS] DB1 [DB2 DB3...]
OR
mysqldump [OPTIONS]
--all-databases [OPTIONS]
|
插入測試數據
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
CREATE
DATABASE
db1
DEFAULT
CHARSET utf8;
USE db1;
CREATE
TABLE
a1(id
int
);
insert
into
a1()
values
(1),(2);
CREATE
TABLE
a2(id
int
);
insert
into
a2()
values
(2);
CREATE
TABLE
a3(id
int
);
insert
into
a3()
values
(3);
CREATE
DATABASE
db2
DEFAULT
CHARSET utf8;
USE db2;
CREATE
TABLE
b1(id
int
);
insert
into
b1()
values
(1);
CREATE
TABLE
b2(id
int
);
insert
into
b2()
values
(2);
|
1.導出所有數據庫
該命令會導出包括系統數據庫在內的所有數據庫
1
|
mysqldump -uroot -proot
--all-databases >/tmp/all.sql
|
2.導出db1、db2兩個數據庫的所有數據
1
|
mysqldump -uroot -proot
--databases db1 db2 >/tmp/user.sql
|
3.導出db1中的a1、a2表
注意導出指定表只能針對一個數據庫進行導出,且導出的內容中和導出數據庫也不一樣,導出指定表的導出文本中沒有創建數據庫的判斷語句,只有刪除表-創建表-導入數據
1
|
mysqldump -uroot -proot
--databases db1 --tables a1 a2 >/tmp/db1.sql
|
4.條件導出,導出db1表a1中id=1的數據
條件導出只能導出單個表
1
|
mysqldump -uroot -proot
--databases db1 --tables a1 --where='id=1' >/tmp/a1.sql
|
5.生成新的binlog文件,-F
有時候會希望導出數據之后生成一個新的binlog文件,只需要加上-F參數即可
1
|
mysqldump -uroot -proot
--databases db1 -F >/tmp/db1.sql
|
6.只導出表結構不導出數據,--no-data
1
|
mysqldump -uroot -proot
--no-data --databases db1 >/tmp/db1.sql
|
7.跨服務器導出導入數據
1
|
mysqldump
--host=h1 -uroot -proot --databases db1 |mysql --host=h2 -uroot -proot db2
|
將h1服務器中的db1數據庫的所有數據導入到h2中的db2數據庫中,db2的數據庫必須存在否則會報錯
mysqldump --host=192.168.80.137 -uroot -proot -C --databases test |mysql --host=192.168.80.133 -uroot -proot test
加上-C參數可以啟用壓縮傳遞。
8.將主庫的binlog位置和文件名追加到導出數據的文件中,--dump-slave
該參數在在從服務器上執行,相當於執行show slave status。當設置為1時,將會以CHANGE MASTER命令輸出到數據文件;設置為2時,會在change前加上注釋。
該選項將會打開--lock-all-tables,除非--single-transaction被指定。
在執行完后會自動關閉--lock-tables選項。--dump-slave默認是1
1
|
mysqldump -uroot -proot
--dump-slave=1 --database db1 >/tmp/db1.sql
|
1
|
mysqldump -uroot -proot
--dump-slave=2 --database db1 >/tmp/db1.sql
|
9.將當前服務器的binlog的位置和文件名追加到輸出文件,--master-data
改參數和--dump-slave方法一樣,只是它是記錄的是當前服務器的binlog,相當於執行show master status。
10--opt
等同於--add-drop-table, --add-locks, --create-options, --quick, --extended-insert, --lock-tables, --set-charset, --disable-keys 該選項默認開啟, 可以用--skip-opt禁用.
1
|
mysqldump -uroot -p
--host=localhost --all-databases --opt
|
11保證導出的一致性狀態--single-transaction
該選項在導出數據之前提交一個BEGIN SQL語句,BEGIN 不會阻塞任何應用程序且能保證導出時數據庫的一致性狀態。它只適用於多版本存儲引擎(它不顯示加鎖通過判斷版本來對比數據),僅InnoDB。本選項和--lock-tables 選項是互斥的,因為LOCK TABLES 會使任何掛起的事務隱含提交。要想導出大表的話,應結合使用--quick 選項。
--quick, -q
不緩沖查詢,直接導出到標准輸出。默認為打開狀態,使用--skip-quick取消該選項。
12--lock-tables, -l
開始導出前,鎖定所有表。用READ LOCAL鎖定表以允許MyISAM表並行插入。對於支持事務的表例如InnoDB和BDB,--single-transaction是一個更好的選擇,因為它根本不需要鎖定表。
請注意當導出多個數據庫時,--lock-tables分別為每個數據庫鎖定表。因此,該選項不能保證導出文件中的表在數據庫之間的邏輯一致性。不同數據庫表的導出狀態可以完全不同。
13導出存儲過程和自定義函數--routines, -R
1
|
mysqldump -uroot -p
--host=localhost --all-databases --routines
|
參數說明:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
|
--all-databases , -A
導出全部數據庫。
mysqldump -uroot -p
--all-databases
--all-tablespaces , -Y
導出全部表空間。
mysqldump -uroot -p
--all-databases --all-tablespaces
--no-tablespaces , -y
不導出任何表空間信息。
mysqldump -uroot -p
--all-databases --no-tablespaces
--add-drop-database
每個數據庫創建之前添加
drop
數據庫語句。
mysqldump -uroot -p
--all-databases --add-drop-database
--add-drop-table
每個數據表創建之前添加
drop
數據表語句。(默認為打開狀態,使用
--skip-add-drop-table取消選項)
mysqldump -uroot -p
--all-databases (默認添加drop語句)
mysqldump -uroot -p
--all-databases –skip-add-drop-table (取消drop語句)
--add-locks
在每個表導出之前增加LOCK TABLES並且之后UNLOCK
TABLE
。(默認為打開狀態,使用
--skip-add-locks取消選項)
mysqldump -uroot -p
--all-databases (默認添加LOCK語句)
mysqldump -uroot -p
--all-databases –skip-add-locks (取消LOCK語句)
--allow-keywords
允許創建是關鍵詞的列名字。這由表名前綴於每個列名做到。
mysqldump -uroot -p
--all-databases --allow-keywords
--apply-slave-statements
在
'CHANGE MASTER'
前添加
'STOP SLAVE'
,並且在導出的最后添加
'START SLAVE'
。
mysqldump -uroot -p
--all-databases --apply-slave-statements
--character-sets-dir
字符集文件的目錄
mysqldump -uroot -p
--all-databases --character-sets-dir=/usr/local/mysql/share/mysql/charsets
--comments
附加注釋信息。默認為打開,可以用
--skip-comments取消
mysqldump -uroot -p
--all-databases (默認記錄注釋)
mysqldump -uroot -p
--all-databases --skip-comments (取消注釋)
--compatible
導出的數據將和其它數據庫或舊版本的MySQL 相兼容。值可以為ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options等,
要使用幾個值,用逗號將它們隔開。它並不保證能完全兼容,而是盡量兼容。
mysqldump -uroot -p
--all-databases --compatible=ansi
--compact
導出更少的輸出信息(用於調試)。去掉注釋和頭尾等結構。可以使用選項:
--skip-add-drop-table --skip-add-locks --skip-comments --skip-disable-keys
mysqldump -uroot -p
--all-databases --compact
--complete-insert, -c
使用完整的
insert
語句(包含列名稱)。這么做能提高插入效率,但是可能會受到max_allowed_packet參數的影響而導致插入失敗。
mysqldump -uroot -p
--all-databases --complete-insert
--compress, -C
在客戶端和服務器之間啟用壓縮傳遞所有信息
mysqldump -uroot -p
--all-databases --compress
--create-options, -a
在
CREATE
TABLE
語句中包括所有MySQL特性選項。(默認為打開狀態)
mysqldump -uroot -p
--all-databases
--databases, -B
導出幾個數據庫。參數后面所有名字參量都被看作數據庫名。
mysqldump -uroot -p
--databases test mysql
--debug
輸出debug信息,用於調試。默認值為:d:t,/tmp/mysqldump.trace
mysqldump -uroot -p
--all-databases --debug
mysqldump -uroot -p
--all-databases --debug=” d:t,/tmp/debug.trace”
--debug-check
檢查內存和打開文件使用說明並退出。
mysqldump -uroot -p
--all-databases --debug-check
--debug-info
輸出調試信息並退出
mysqldump -uroot -p
--all-databases --debug-info
--default-character-set
設置默認字符集,默認值為utf8
mysqldump -uroot -p
--all-databases --default-character-set=utf8
--delayed-insert
采用延時插入方式(
INSERT
DELAYED)導出數據
mysqldump -uroot -p
--all-databases --delayed-insert
--delete-master-logs
master備份后刪除日志. 這個參數將自動激活
--master-data。
mysqldump -uroot -p
--all-databases --delete-master-logs
--disable-keys
對於每個表,用/*!40000
ALTER
TABLE
tbl_name DISABLE KEYS */;和/*!40000
ALTER
TABLE
tbl_name ENABLE KEYS */;語句引用
INSERT
語句。這樣可以更快地導入dump出來的文件,因為它是在插入所有行后創建索引的。該選項只適合MyISAM表,默認為打開狀態。
mysqldump -uroot -p
--all-databases
--dump-slave
該選項將主的binlog位置和文件名追加到導出數據的文件中(show slave status)。設置為1時,將會以CHANGE MASTER命令輸出到數據文件;設置為2時,會在change前加上注釋。該選項將會打開
--lock-all-tables,除非--single-transaction被指定。該選項會自動關閉--lock-tables選項。默認值為0。
mysqldump -uroot -p
--all-databases --dump-slave=1
mysqldump -uroot -p
--all-databases --dump-slave=2 --master-data
該選項將當前服務器的binlog的位置和文件名追加到輸出文件中(show master status)。如果為1,將會輸出CHANGE MASTER 命令;如果為2,輸出的CHANGE MASTER命令前添加注釋信息。該選項將打開
--lock-all-tables 選項,除非--single-transaction也被指定(在這種情況下,全局讀鎖在開始導出時獲得很短的時間;其他內容參考下面的--single-transaction選項)。該選項自動關閉--lock-tables選項。
mysqldump -uroot -p
--host=localhost --all-databases --master-data=1;
mysqldump -uroot -p
--host=localhost --all-databases --master-data=2; --events, -E
導出事件。
mysqldump -uroot -p
--all-databases --events
--extended-insert, -e
使用具有多個
VALUES
列的
INSERT
語法。這樣使導出文件更小,並加速導入時的速度。默認為打開狀態,使用
--skip-extended-insert取消選項。
mysqldump -uroot -p
--all-databases
mysqldump -uroot -p
--all-databases--skip-extended-insert (取消選項)
--fields-terminated-by
導出文件中忽略給定字段。與
--tab選項一起使用,不能用於--databases和--all-databases選項
mysqldump -uroot -p test test
--tab=”/home/mysql” --fields-terminated-by=”#”
--fields-enclosed-by
輸出文件中的各個字段用給定字符包裹。與
--tab選項一起使用,不能用於--databases和--all-databases選項
mysqldump -uroot -p test test
--tab=”/home/mysql” --fields-enclosed-by=”#”
--fields-optionally-enclosed-by
輸出文件中的各個字段用給定字符選擇性包裹。與
--tab選項一起使用,不能用於--databases和--all-databases選項
mysqldump -uroot -p test test
--tab=”/home/mysql” --fields-enclosed-by=”#” --fields-optionally-enclosed-by =”#”
--fields-escaped-by
輸出文件中的各個字段忽略給定字符。與
--tab選項一起使用,不能用於--databases和--all-databases選項
mysqldump -uroot -p mysql
user
--tab=”/home/mysql” --fields-escaped-by=”#”
--flush-logs
開始導出之前刷新日志。
請注意:假如一次導出多個數據庫(使用選項
--databases或者--all-databases),將會逐個數據庫刷新日志。除使用--lock-all-tables或者--master-data外。在這種情況下,日志將會被刷新一次,相應的所以表同時被鎖定。因此,如果打算同時導出和刷新日志應該使用--lock-all-tables 或者--master-data 和--flush-logs。
mysqldump -uroot -p
--all-databases --flush-logs
--flush-privileges
在導出mysql數據庫之后,發出一條FLUSH
PRIVILEGES
語句。為了正確恢復,該選項應該用於導出mysql數據庫和依賴mysql數據庫數據的任何時候。
mysqldump -uroot -p
--all-databases --flush-privileges
--force
在導出過程中忽略出現的SQL錯誤。
mysqldump -uroot -p
--all-databases --force
--help
顯示幫助信息並退出。
mysqldump
--help
--hex-blob
使用十六進制格式導出二進制字符串字段。如果有二進制數據就必須使用該選項。影響到的字段類型有
BINARY
、VARBINARY、BLOB。
mysqldump -uroot -p
--all-databases --hex-blob
--host, -h
需要導出的主機信息
mysqldump -uroot -p
--host=localhost --all-databases
--ignore-table
不導出指定表。指定忽略多個表時,需要重復多次,每次一個表。每個表必須同時指定數據庫和表名。例如:
--ignore-table=database.table1 --ignore-table=database.table2 ……
mysqldump -uroot -p
--host=localhost --all-databases --ignore-table=mysql.user
--include-master-host-port
在
--dump-slave產生的'CHANGE MASTER TO..'語句中增加'MASTER_HOST=<host>,MASTER_PORT=<port>'
mysqldump -uroot -p
--host=localhost --all-databases --include-master-host-port
--insert-ignore
在插入行時使用
INSERT
IGNORE
語句.
mysqldump -uroot -p
--host=localhost --all-databases --insert-ignore
--lines-terminated-by
輸出文件的每行用給定字符串划分。與
--tab選項一起使用,不能用於--databases和--all-databases選項。
mysqldump -uroot -p
--host=localhost test test --tab=”/tmp/mysql” --lines-terminated-by=”##”
--lock-all-tables, -x
提交請求鎖定所有數據庫中的所有表,以保證數據的一致性。這是一個全局讀鎖,並且自動關閉
--single-transaction 和--lock-tables 選項。
mysqldump -uroot -p
--host=localhost --all-databases --lock-all-tables
--lock-tables, -l
開始導出前,鎖定所有表。用
READ
LOCAL
鎖定表以允許MyISAM表並行插入。對於支持事務的表例如InnoDB和BDB,
--single-transaction是一個更好的選擇,因為它根本不需要鎖定表。
請注意當導出多個數據庫時,
--lock-tables分別為每個數據庫鎖定表。因此,該選項不能保證導出文件中的表在數據庫之間的邏輯一致性。不同數據庫表的導出狀態可以完全不同。
mysqldump -uroot -p
--host=localhost --all-databases --lock-tables
--log-error
附加警告和錯誤信息到給定文件
mysqldump -uroot -p
--host=localhost --all-databases --log-error=/tmp/mysqldump_error_log.err
--max_allowed_packet
服務器發送和接受的最大包長度。
mysqldump -uroot -p
--host=localhost --all-databases --max_allowed_packet=10240
--net_buffer_length
TCP/IP和socket連接的緩存大小。
mysqldump -uroot -p
--host=localhost --all-databases --net_buffer_length=1024
--no-autocommit
使用autocommit/
commit
語句包裹表。
mysqldump -uroot -p
--host=localhost --all-databases --no-autocommit
--no-create-db, -n
只導出數據,而不添加
CREATE
DATABASE
語句。
mysqldump -uroot -p
--host=localhost --all-databases --no-create-db
--no-create-info, -t
只導出數據,而不添加
CREATE
TABLE
語句。
mysqldump -uroot -p
--host=localhost --all-databases --no-create-info
--no-data, -d
不導出任何數據,只導出數據庫表結構。
mysqldump -uroot -p
--host=localhost --all-databases --no-data
--no-set-names, -N
等同於
--skip-set-charset
mysqldump -uroot -p
--host=localhost --all-databases --no-set-names
--opt
等同於
--add-drop-table, --add-locks, --create-options, --quick, --extended-insert, --lock-tables, --set-charset, --disable-keys 該選項默認開啟, 可以用--skip-opt禁用.
mysqldump -uroot -p
--host=localhost --all-databases --opt
--order-by-primary
如果存在主鍵,或者第一個唯一鍵,對每個表的記錄進行排序。在導出MyISAM表到InnoDB表時有效,但會使得導出工作花費很長時間。
mysqldump -uroot -p
--host=localhost --all-databases --order-by-primary
--password, -p
連接數據庫密碼
--pipe(windows系統可用)
使用命名管道連接mysql
mysqldump -uroot -p
--host=localhost --all-databases --pipe
--port, -P
連接數據庫端口號
--protocol
使用的連接協議,包括:tcp, socket, pipe, memory.
mysqldump -uroot -p
--host=localhost --all-databases --protocol=tcp
--quick, -q
不緩沖查詢,直接導出到標准輸出。默認為打開狀態,使用
--skip-quick取消該選項。
mysqldump -uroot -p
--host=localhost --all-databases
mysqldump -uroot -p
--host=localhost --all-databases --skip-quick
--quote-names,-Q
使用(`)引起表和列名。默認為打開狀態,使用
--skip-quote-names取消該選項。
mysqldump -uroot -p
--host=localhost --all-databases
mysqldump -uroot -p
--host=localhost --all-databases --skip-quote-names
--replace
使用
REPLACE
INTO
取代
INSERT
INTO
.
mysqldump -uroot -p
--host=localhost --all-databases --replace
--result-file, -r
直接輸出到指定文件中。該選項應該用在使用回車換行對(\\r\\n)換行的系統上(例如:DOS,Windows)。該選項確保只有一行被使用。
mysqldump -uroot -p
--host=localhost --all-databases --result-file=/tmp/mysqldump_result_file.txt
--routines, -R
導出存儲過程以及自定義函數。
mysqldump -uroot -p
--host=localhost --all-databases --routines
--set-charset
添加
'SET NAMES default_character_set'
到輸出文件。默認為打開狀態,使用
--skip-set-charset關閉選項。
mysqldump -uroot -p
--host=localhost --all-databases
mysqldump -uroot -p
--host=localhost --all-databases --skip-set-charset
--single-transaction
該選項在導出數據之前提交一個
BEGIN
SQL語句,
BEGIN
不會阻塞任何應用程序且能保證導出時數據庫的一致性狀態。它只適用於多版本存儲引擎,僅InnoDB。本選項和
--lock-tables 選項是互斥的,因為LOCK TABLES 會使任何掛起的事務隱含提交。要想導出大表的話,應結合使用--quick 選項。
mysqldump -uroot -p
--host=localhost --all-databases --single-transaction
--dump-date
將導出時間添加到輸出文件中。默認為打開狀態,使用
--skip-dump-date關閉選項。
mysqldump -uroot -p
--host=localhost --all-databases
mysqldump -uroot -p
--host=localhost --all-databases --skip-dump-date
--skip-opt
禁用–opt選項.
mysqldump -uroot -p
--host=localhost --all-databases --skip-opt
--socket,-S
指定連接mysql的socket文件位置,默認路徑/tmp/mysql.sock
mysqldump -uroot -p
--host=localhost --all-databases --socket=/tmp/mysqld.sock
--tab,-T
為每個表在給定路徑創建tab分割的文本文件。注意:僅僅用於mysqldump和mysqld服務器運行在相同機器上。
mysqldump -uroot -p
--host=localhost test test --tab="/home/mysql"
--tables
覆蓋
--databases (-B)參數,指定需要導出的表名。
mysqldump -uroot -p
--host=localhost --databases test --tables test
--triggers
導出觸發器。該選項默認啟用,用
--skip-triggers禁用它。
mysqldump -uroot -p
--host=localhost --all-databases --triggers
--tz-utc
在導出頂部設置時區TIME_ZONE=
'+00:00'
,以保證在不同時區導出的
TIMESTAMP
數據或者數據被移動其他時區時的正確性。
mysqldump -uroot -p
--host=localhost --all-databases --tz-utc
--user, -u
指定連接的用戶名。
--verbose, --v
輸出多種平台信息。
--version, -V
輸出mysqldump版本信息並退出
--where, -w
只轉儲給定的
WHERE
條件選擇的記錄。請注意如果條件包含命令解釋符專用空格或字符,一定要將條件引用起來。
mysqldump -uroot -p
--host=localhost --all-databases --where=” user='root'”
--xml, -X
導出XML格式.
mysqldump -uroot -p
--host=localhost --all-databases --xml
--plugin_dir
客戶端插件的目錄,用於兼容不同的插件版本。
mysqldump -uroot -p
--host=localhost --all-databases --plugin_dir=”/usr/local/lib/plugin”
--default_auth
客戶端插件默認使用權限。
mysqldump -uroot -p
--host=localhost --all-databases --default-auth=”/usr/local/lib/plugin/<PLUGIN>”
|
總結
文章中列舉了一些常用的導出操作,還有很多其它的參數也會經常用到,包括“--add-drop-database”,“--apply-slave-statements”,“--triggers”等。