參與的一個項目需要將mysql數據庫整個備份導出,我用百度大法學習了mysql的備份方法。
一. mysqldump常見用法
mysqldump指令詳見:
<pre>
mysqldump --help
</pre>
1.1 導出整個數據庫(包含結構和數據)
<pre>
mysqldump -u用戶名 -p密碼 -h主機 數據庫1 數據庫2 > 轉儲文件路徑
</pre>
上述命令將指定數據庫(可以是一個或多個)備份到某dump文件中,比如:
<pre>
mysqldump -u root -p123456 znms > znmsdump.sql
</pre>
上述命令將本機上的znms數據庫整個備份到當前路徑下的znmsdump.sql文件中。
1.2 導出數據庫結構(不含數據)
<pre>
mysqldump -u用戶名 -p密碼 -h主機 -d 數據庫1 數據庫2 > 轉儲文件路徑
</pre>
上述命令僅將指定數據庫的結構備份到某dump文件中,比如:
<pre>
mysqldump -u root -p -d znms > znmsdump.sql
</pre>
1.3 導出數據庫中的表
<pre>
mysqldump -u用戶名 -p密碼 -h主機 -d 數據庫名 表1 表2 表3 > 轉儲文件路徑
</pre>
上述命令將指定數據庫的指定表(一張或多張)導出到指定文件,例如:
<pre>
mysqldump -u root -p123456 znms user_info role user_role > znmsdump.sql
</pre>
如果加上 -d 或 --no-data,將只導出表結構,如:
<pre>
mysqldump -u root -p123456 -d znms user_info role user_role > znmsdump.sql
</pre>
加上--where="篩選條件" 可對表中數據進行篩選后再導出,例如:
<pre>
mysqldump -u root -p123456 znms user_info --where="id>10" > znmsdump.sql
</pre>
1.4 數據庫遷移
以下命令將數據庫導出然后通過管道導入到另一臺機子上的數據庫:
<pre>
mysqldump -u root -p123456 --single-transaction--databases db1 db2 | mysql -u root -p123456 -h 172.16.1.25
</pre>
二. 重要參數說明
--add-drop-database:每個數據庫創建之前添加drop數據庫語句。默認為打開狀態,使用--skip-add-drop-table取消。
--comments:附加注釋信息。默認為打開,可以用--skip-comments取消。
--lock-tables:在導出數據前先鎖表,導出完成后釋放。注意如果導出多個數據庫,則在前一個表導出完成后,后一個表才上鎖。
--lock-all-tables:它會在一開始就對所有的數據庫的所有表上鎖,請注意它會使用FLUSH TABLES。
--single-transaction:它設置整個導出的過程為一個事務,避免了鎖。
--master-data:它對所有數據庫的所有表上了鎖,并且查詢binlog的位置。請注意它會使用FLUSH TABLES。
--master-data --single-transaction:這種組合,會先對所有數據庫的所有表上鎖,讀取binlog的信息之后就立即釋放鎖,這個過程是十分短暫的,然后整個導出過程都在一個事務里。請注意它會使用FLUSH TABLES。
-F or -flush-logs:使用這個選項,在執行導出之前將會刷新MySQL服務器的log。
-f or -force:使用這個選項,即使有錯誤發生,仍然繼續導出。
-t or -no-create-info:這個選項使的mysqldump命令不創建CREATE TABLE語句,這個選項在只需要數據而不需要DDL(數據庫定義語句)時很方便。
-d or -no-data :這個選項使的mysqldump命令不創建INSERT語句,即不導出數據。