本文內容主要來自MySQL官方文檔:“MySQL5.1 Reference,2.10.3. 將MySQL數據庫拷貝到另一臺機器”
注意:參數名與值間可以不用空格,如
-uroot
或
-u root
均可;某些參數會有不同含義
1.
數據庫導出(-A導出所有數據庫,-B指定數據庫,可不寫-B直接寫數據庫名):
mysqldump -uroot -p密碼 -B數據庫名 -h主機地址(IP) > now.sql
2.
表結構導出(-d,--no-data不導出row):
mysqldump -uroot -p123456 -d -h主機地址(IP) > now.sql
可能遇到的錯誤:
All tables in the MERGE table are not identically defined when using LOCK TABLES-大意是說某個MERGE引擎的表結構中定義的子表全部不存在,找到該表后drop掉或者重建即可。
mysqldump: Got error: 1017: Can't find file: 'abc' (errno: 2) when using LOCK TABLES-這個可能是某個表的數據庫文件被刪除了(如MyISAM的表結構文件table.frm不存在但是INFORMATION_SCHEMA中的表名并未刪除,導致可以查到該表,但是其表結構數據已經不存在)
3.
在其他服務器創建數據庫:
mysqladmin -h
主機地址(IP)
create 要創建的數據庫名 -p密碼
4. 導出到文件:(需支持管道和gzip,-q指quick導出,不進緩沖區直接導入輸出流,默認開啟,使用--skip-quick來關閉)
mysqldump -q 數據庫名 -p | gzip now.gz
5.
導出到其他服務器:(--opt包含瑣表等多項操作,默認開啟,使用--skip-opt關閉)
mysqldump --opt -p密碼 數據庫名 | mysql -h 遠程數據庫地址(IP) 遠程數據庫名 -p遠程數據庫密碼
6.
同時導出存儲過程:(-R導出存儲過程和函數)
mysqldump --opt -p密碼 -R -B 數據庫名?> functions.sql
7.
單獨導出存儲過程:(-n指--no-create-db,-t指--no-create-info,分別表示不導出建數據庫和建表的語句,其中-n僅在-A導出所有數據庫或使用-B指定數據庫時才生效)
mysqldump 數據庫名 -p密碼 -ndtR | mysql -h 遠程數據庫地址(IP) 遠程數據庫名 -p遠程數據庫密碼
8.導出到其他服務器報錯:
ERROR 1235 (42000) at line 26: This version of MySQL doesn't yet support 'multiple triggers with the same action time and event for one table'
大意是說MySQL(5.0版)暫不支持在同一操作中導出一張表的多個觸發器。
解決辦法: 默認不帶任何參數的時候 tiggers 值為真,那么我們修改他的值為假,給mysqldump 加上開關: --triggers=false 即可。
9.查看存儲過程、函數和觸發器的語句:
SHOW PROCEDURE STATUS;
SHOW FUNCTION STATUS;
SHOW TRIGGERS FROM test;
MySQL5.0 - 5.1.20不支持“SHOW CREATE TRIGGER”,于是有大牛分別用函數和視圖寫了一個等價的方法:
CREATE FUNCTION SHOW_CREATE_TRIGGER(in_trigger varchar(255))
RETURNS text READS SQL DATA
BEGIN
DECLARE returnText text;
SELECT CONCAT_WS(
" ",
"CREATE TRIGGER",
TRIGGER_NAME,
ACTION_TIMING,
EVENT_MANIPULATION,
"ON",
EVENT_OBJECT_TABLE,
"FOR EACH ROW",
ACTION_STATEMENT) into returnText
FROM information_schema.triggers;
RETURN returnText;
END
10.如果不希望導出的數據中包含注釋,可以使用“--skip-comments”或“--compact”,后者包含了前者以及其他參數,但還是會有少量信息。使用“mysqldumpl --help”可以看到完整的參數信息。
11.后來發現低版本的mysqldump貌似不支持-R參數:mysqldump --version
mysqldump ?Ver 10.9 Distrib 4.1.20, for redhat-linux-gnu (i386)
參數說明:
-n: --no-create-db
-d: --no-data
-t: --no-create-info
-R: --routines Dump stored routines (functions and procedures)
Mysqldump是客戶端工具用來備份數據庫或在不同數據庫之間進行數據遷移。備份內容包含創建活裝載表的SQL語句:
主要參數介紹:
1.連接選項
-u,--user=name
-p,--password=name
-h,--host=name
-P,--port=#
2.輸出內容選項
--add-drop-database
--add-drop-table
-n;--no-create-db
-d;--no-data
-t;--no-create-info
3.輸出格式選項
--compact
-c --complete-insert
-T(指定數據表中的數據備份為單純的數據文件和建表SQL兩個文件)
注意:xx.sql建表文件是以linux的root用戶創建,而xx.txt文件則是一linux的mysql用戶創建,因此這兩個文件的存放路徑一定要保證mysql用戶有讀寫創建文件的權限。
--fields-terminated-by=name(域分隔符)
--fields-enclosed-by=name(域引用符)
--fields-optionally-enclosed-by=name(域引用可選字符)
--fields-escaped-by=name(轉義字符)
4.字符集選項
--default--character-set=xx
5.其他選項
-F --flush-logs(備份前刷新日志)
-l --lock-tables(給所有的表加讀鎖)