mysqldump為了加快導入導出,默認把數據都縮減在一行里面。
查看和修改不方便,為此,我們可以使用--skip-extended-insert選項來使導出的數據,是多行插入形式的。
mysqldump --default-character-set=utf8 --skip-extended-insert DB TABLES > TABLES.sql
附加一些轉載的mysqldump選項
下面轉自:https://segmentfault.com/a/1190000002428533
1. 語法選項說明 -h, --host=name 主機名 -P[ port_num], --port=port_num 用於連接MySQL服務器的的TCP/IP端口號 --master-data 這個選項可以把binlog的位置和文件名添加到輸出中,如果等於1,將會打印成一個CHANGE MASTER命令;如果等於2,會加上注釋前綴。並且這個選項會自動打開--lock-all-tables,除非同時設置了--single-transaction(這種情況下,全局讀鎖只會在開始dump的時候加上一小段時間,不要忘了閱讀--single-transaction的部分)。在任何情況下,所有日志中的操作都會發生在導出的准確時刻。這個選項會自動關閉--lock-tables。 -x, --lock-all-tables 鎖定所有庫中所有的表。這是通過在整個dump的過程中持有全局讀鎖來實現的。會自動關閉--single-transaction和--lock-tables。 --single-transaction 通過將導出操作封裝在一個事務內來使得導出的數據是一個一致性快照。只有當表使用支持MVCC的存儲引擎(目前只有InnoDB)時才可以工作;其他引擎不能保證導出是一致的。當導出開啟了--single-transaction選項時,要確保導出文件有效(正確的表數據和二進制日志位置),就要保證沒有其他連接會執行如下語句:ALTER TABLE, DROP TABLE, RENAME TABLE, TRUNCATE TABLE,這會導致一致性快照失效。這個選項開啟后會自動關閉--lock-tables。 -l, --lock-tables 對所有表加讀鎖。(默認是打開的,用--skip-lock-tables來關閉,上面的選項會把關閉-l選項) -F, --flush-logs 在開始導出前刷新服務器的日志文件。注意,如果你一次性導出很多數據庫(使用 -databases=或--all-databases選項),導出每個庫時都會觸發日志刷新。例外是當使用了--lock-all-tables或--master-data時:日志只會被刷新一次,那個時候所有表都會被鎖住。所以如果你希望你的導出和日志刷新發生在同一個確定的時刻,你需要使用--lock-all-tables,或者--master-data配合--flush-logs。 --delete-master-logs 備份完成后刪除主庫上的日志。這個選項會自動打開``--master-data`。 --opt 同-add-drop-table, --add-locks, --create-options, --quick, --extended-insert, --lock-tables, --set-charset, --disable-keys。(默認已開啟,--skip-opt關閉表示這些選項保持它的默認值)應該給你為讀入一個MySQL服務器的盡可能最快的導出,--compact差不多是禁用上面的選項。 -q, --quick 不緩沖查詢,直接導出至stdout。(默認打開,用--skip-quick來關閉)該選項用於轉儲大的表。 --set-charset 將SET NAMES default_character_set加到輸出中。該選項默認啟用。要想禁用SET NAMES語句,使用--skip-set-charset。 --add-drop-tables 在每個CREATE TABLE語句前添加DROP TABLE語句。默認開啟。 --add-locks 在每個表導出之前增加LOCK TABLES並且之后UNLOCK TABLE。(為了使得更快地插入到MySQL)。默認開啟。 --create-option 在CREATE TABLE語句中包括所有MySQL表選項。默認開啟,使用--skip-create-options來關閉。 -e, --extended-insert 使用全新多行INSERT語法,默認開啟(給出更緊縮並且更快的插入語句) -d, --no-data 不寫入表的任何行信息。如果你只想得到一個表的結構的導出,這是很有用的。 --add-drop-database 在create數據庫之前先DROP DATABASE,默認關閉,所以一般在導入時需要保證數據庫已存在。 --default-character-set= 使用的默認字符集。如果沒有指定,mysqldump使用utf8。 -B, --databases 轉儲幾個數據庫。通常情況,mysqldump將命令行中的第1個名字參量看作數據庫名,后面的名看作表名。使用該選項,它將所有名字參量看作數據庫名。CREATE DATABASE IF NOT EXISTS db_name和USE db_name語句包含在每個新數據庫前的輸出中。 --tables 覆蓋--database選項。選項后面的所有參量被看作表名。 -u[ name], --user= 連接服務器時使用的MySQL用戶名。 -p[password], --password[=password] 連接服務器時使用的密碼。如果你使用短選項形式(-p),不能在選項和密碼之間有一個空格。如果在命令行中,忽略了--password或-p選項后面的 密碼值,將提示你輸入一個。 2. 示例 導出一個數據庫: $ mysqldump -h localhost -uroot -ppassword \ --master-data=2 --single-transaction --add-drop-table --create-options --quick \ --extended-insert --default-character-set=utf8 \ --databases discuz > backup-file.sql 導出一個表: $ mysqldump -u pak -p --opt --flush-logs pak t_user > pak-t_user.sql 將備份文件壓縮: $ mysqldump -hhostname -uusername -ppassword --databases dbname | gzip > backup-file.sql.gz 對應的還原動作為 gunzip < backup-file.sql.gz | mysql -uusername -ppassword dbname 導入數據庫: mysql> use target_dbname mysql> source /mysql/backup/path/backup-file.sql 或 $ mysql target_dbname <backup-file.sql 導入還有一個mysqlimport命令,暫未研究。 直接從一個數據庫向另一個數據庫轉儲: mysqldump -u用戶名 -p --opt dbname | mysql --host remote_host -C dbname2