mysql表的匯入匯出

來源:互聯網
上載者:User

標籤:mysql表匯入匯出

⒈select ... into outfile匯出資料/load data infile匯入資料
⑴建立新表,定義表結構
  ⅰ方法一:在同一資料庫中
      ①複製表結構及資料到新表
      CREATE TABLE newtable  SELECT * FROM oldtable
      ② 只複製表結構到新表
       CREATE TABLE newtable  SELECT * FROM oldtable WHERE 1=2
  ⅱ方法二:適應庫與庫之間,或者單庫
      ①只複製表結構到新表
     匯出:
     mysqldump -uroot -pdbpasswd -d dbname [tablename]>createtable.sql;
     匯入:
      mysql>source /path/createtable.sql  or  mysql -u root -p <createtable.sql;
    mysql> source /usr/yzx_loadtest/createbus_dt.sql;
   Query OK, 0 rows affected (0.01 sec)
⑵匯出/匯入表資料
匯出數
select * from mytbl into outfile ‘/tmp/mytbl2.txt‘ fields terminated by ‘,‘ enclosed by ‘"‘ lines terminated by ‘\n‘;
select * from bus_dt into outfile ‘/usr/yzx_loadtest/bus_dtbackdata.txt‘ fields terminated by ‘,‘ enclosed by ‘"‘ lines terminated by ‘\n‘;
匯入資料
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE ‘file_name.txt‘  [REPLACE | IGNORE]  INTO TABLE tbl_name  [FIELDS  [TERMINATED BY ‘string‘]  [[OPTIONALLY] ENCLOSED BY ‘char‘] [ESCAPED BY ‘char‘ ] ]     [LINES  [STARTING BY ‘string‘]  [TERMINATED BY ‘string‘] ]
load data infile ‘/usr/yzx_loadtest/bus_dtbackdata.txt‘ into table bus_dt fields terminated by ‘,‘ enclosed by ‘"‘ lines terminated by ‘\n‘;
關於NULL值
null值被處理成\N

⑶大資料表如何節省匯入/匯出的時間


ⅰ對於Myisam類型的表,可以通過以下方式快速的匯入大量的資料。 ALTER TABLE tblname DISABLE KEYS; loading the data ALTER TABLE tblname ENABLE KEYS; 這兩個命令用來開啟    或者關閉Myisam表非唯一索引的更新。在匯入大量的資料到一個非空的Myisam表時,通過設定這兩個命令,可以提高匯入的效率。 對於匯入大量資料到一個空的Myisam表,預設就是先    匯入資料然後才建立索引的,所以不用進行設定。


ⅱ對於Innodb類型的表,有以下幾種方式可以提高匯入的效率:
①因為Innodb類型的表是按照主鍵的順序儲存的,所以將匯入的資料按照主鍵的順序排列,可以有效提高匯入資料的效率。如果Innodb表沒有主鍵,那麼系統會預設建立一個內部列作    為主鍵,所以如果可以給表建立一個主鍵,將可以利用這個優勢提高匯入資料的效率。
②在匯入資料前執行SET UNIQUE_CHECKS=0,關閉唯一性校正,在匯入結束後執行SET UNIQUE_CHECKS=1,恢複唯一性校正,可以提高匯入的效率。
③如果應用使用自動認可的方式,建議在匯入前執行SET AUTOCOMMIT=0,關閉自動認可,匯入結束後再執行SET AUTOCOMMIT=1,開啟自動認可,也可以提高匯入的效率。


ⅲ對於表級上千萬或者上億,需要分檔案進行匯入;
為什嗎?load data file需要寫二進位日誌,另外如果是主從複製,還會有延遲,如果失敗,回退仍需要時間。
查看插入資料的行數:
[[email protected] yzx_loadtest]# wc -l bus_dtbackdata.txt
1021 bus_dtbackdata.txt
利用split進行分割:
[[email protected] yzx_loadtest]# split -l 500 bus_dtbackdata.txt bus_dtbackdata.txt001
[[email protected] yzx_loadtest]# ls -l
total 48
-rw-rw-rw- 1 mysql mysql 17247 Apr  9 11:45 bus_dtbackdata.txt
-rw-r--r-- 1 root  root   7907 Apr  9 13:40 bus_dtbackdata.txt001aa
-rw-r--r-- 1 root  root   8939 Apr  9 13:40 bus_dtbackdata.txt001ab
-rw-r--r-- 1 root  root    401 Apr  9 13:40 bus_dtbackdata.txt001ac
-rw-r--r-- 1 root  root   1640 Apr  9 11:50 createbus_dt.sql
[[email protected] yzx_loadtest]#

分割之後使用:
load data infile ‘/usr/yzx_loadtest/bus_dtbackdata.txt001aa‘ into table bus_dt fields terminated by ‘,‘ enclosed by ‘"‘ lines terminated by ‘\n‘;
load data infile ‘/usr/yzx_loadtest/bus_dtbackdata.txt001ab‘ into table bus_dt fields terminated by ‘,‘ enclosed by ‘"‘ lines terminated by ‘\n‘;

注意事項:必須保證匯入的庫與匯出的庫的字元集相同
 show variables like ‘char%‘
 set ...=gbk;

本文出自 “風聲水起” 部落格,請務必保留此出處http://linuxybird.blog.51cto.com/5689151/1638053

mysql表的匯入匯出

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.