1. 程式人生 > >使用load匯出mysql表資料

使用load匯出mysql表資料

  當我們需要備份資料庫時,需要匯出資料,我們一般是使用mysqldump命令來進行資料的匯出,下面我們先來試驗一下,

  首先建立一張表

CREATE TABLE `t1` (
  `id` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8

建立t1表,只有一個欄位,往資料表中插入幾行資料

insert into t1 values(1),(2),(3);

然後開始備份


可以看到已經匯出的資料

下面這樣我們就備份完畢了,我們可以檢視一下test.sql

--
-- Table structure for table `t1`
--


DROP TABLE IF EXISTS `t1`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `t1` (
  `id` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;


--
-- Dumping data for table `t1`
--


LOCK TABLES `t1` WRITE;
/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
INSERT INTO `t1` VALUES (1),(2),(3);
/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET

[email protected]_TIME_ZONE */;

這只是一部分,我們可以看到裡面有一大堆表結構的語句和表建立的語句,當我們的資料量非常大的時候,匯出的速度就可想而知,於是我們就需要在匯出的時候避開這些語句,這裡就要用到load的infile和outfile來匯入匯出資料

我們先來看下outfile的語法

Syntax:
SELECT
    [ALL | DISTINCT | DISTINCTROW ]
      [HIGH_PRIORITY]
      [STRAIGHT_JOIN]
      [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
      [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
    select_expr [, select_expr ...]
    [FROM table_references
    [WHERE where_condition]
    [GROUP BY {col_name | expr | position}
      [ASC | DESC], ... [WITH ROLLUP]]
    [HAVING where_condition]
    [ORDER BY {col_name | expr | position}
      [ASC | DESC], ...]
    [LIMIT {[offset,] row_count | row_count OFFSET offset}]
    [PROCEDURE procedure_name(argument_list)]
    [INTO OUTFILE 'file_name'
        [CHARACTER SET charset_name]
        export_options
      | INTO DUMPFILE 'file_name'
      | INTO var_name [, var_name]]
    [FOR UPDATE | LOCK IN SHARE MODE]]

下面舉個例子

select * from t1 into outfile "/tmp/test.sql"

這樣就可以把t1表的所有列都匯出來,當然,也可以只匯出某一列的資料

這是匯出,下面看下匯入

匯入要用到我們的load data來實現,看下語法

Syntax:
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
    [REPLACE | IGNORE]
    INTO TABLE tbl_name
    [CHARACTER SET charset_name]
    [{FIELDS | COLUMNS}
        [TERMINATED BY 'string']
        [[OPTIONALLY] ENCLOSED BY 'char']
        [ESCAPED BY 'char']
    ]
    [LINES
        [STARTING BY 'string']
        [TERMINATED BY 'string']
    ]
    [IGNORE number LINES]
    [(col_name_or_user_var,...)]
    [SET col_name = expr,...]

同樣的一個例子來說明

load data infile "/tmp/test.sql" into table t1
或者匯入到某一列或幾列中
load data infile "/tmp/test.sql" into table t1(id)

下面進行一下實際操作,在t1表中插入1000萬行資料

mysql> select count(*) from t1;        
+----------+
| count(*) |
+----------+
| 10485760 |
+----------+
1 row in set (0.00 sec)

下面來匯出資料

mysql> select * from t1 into outfile "/tmp/outfile.sql";
Query OK, 10485760 rows affected (2.43 sec)

發現匯出的速度非常快,1000萬行資料只需要2秒多

下面看一下outfile.sql中的資料是什麼樣子的


我們發現,檔案中只有資料,而不存在表的結構和其他不相干的語句,這樣就大大減少了匯出資料的量

下面來匯入資料,這裡需要注意的是,有outfile匯出的資料不包含表結構,所以,我們不能夠刪除表或者資料庫來進行操作

下面我們清空一下t1表,進行一下操作

mysql> truncate t1;
Query OK, 0 rows affected (0.12 sec)


mysql> select count(*) from t1;
+----------+
| count(*) |
+----------+
|        0 |
+----------+
1 row in set (0.00 sec)

下面使用load data infile來匯入

mysql> load data infile "/tmp/outfile.sql" into table t1;    
Query OK, 10485760 rows affected (12.46 sec)
Records: 10485760  Deleted: 0  Skipped: 0  Warnings: 0


mysql> select count(*) from t1;                      
+----------+
| count(*) |
+----------+
| 10485760 |
+----------+
1 row in set (0.00 sec)

發現匯入的速度也是不慢的

下面為了對比一下mysqldump的匯出,來用mysqldump進行一下操作


對比一下outfile,mysqldump匯出花費了大約12秒,大概是outfile的5倍左右

下面看一下這兩個檔案的大小


可以看到mysqldump匯出的資料是outfile的2倍,這也就說明了outfile的優勢所在。

因此,當有海量資料時,使用outfile和load data infile的速度會更快,消耗的資源更少。

相關推薦

使用load匯出mysql資料

  當我們需要備份資料庫時,需要匯出資料,我們一般是使用mysqldump命令來進行資料的匯出,下面我們先來試驗一下,   首先建立一張表 CREATE TABLE `t1` ( `id` int(11) DEFAULT NULL ) ENGINE=MyISAM DE

mysql 資料匯入和匯出

一、匯出資料庫用mysqldump命令(注意mysql的安裝路徑,即此命令的路徑): 1、匯出資料和表結構: mysqldump -u使用者名稱 -p密碼 資料庫名 > 資料庫名.sql #/usr/local/mysql/bin/   mysqldump -uro

根據MySQL資料匯出INSERT INTO語句的方法

因專案中有需要需根據MySQL表資料生成INSERT INTO語句,在網上找了些現成的程式碼,原作者是誰就不知道了,但是發現有BUG,不能適用,遂對他人程式碼進行了修改。修改後能較好的匯出INSERT INTO語句。程式碼如下: package dwz.interactio

mysql 資料操作

INSERT INTO USER VALUES(10,'root','root','[email protected]'); INSERT INTO USER(username,password,email) VALUES('admin','123','[email pr

plsql 工具怎樣匯出 oracle 資料

一、雙擊 plsql 工具,輸入登陸使用者、登陸密碼以及登陸資料庫名稱,如下圖:   二、選單 Tools --> Export Tables...,如下圖:   三、進入匯出介面後,可以選擇單個表,進行單個表資料匯出,也可以選擇多個數據表,進行

navicat匯出sqlserver資料字典

use ZFine go SELECT   表名=case when a.colorder=1 then d.name else '' end, 表說明=case when a.colorder=1 then isnull(f.value,'') else '' end, 欄位序號=a

geoserver釋出mysql資料

1.環境部署 Geoserver中並不自帶mysql資料釋出功能,需要下載對應外掛。     將其放入geoserver的lib中,釋出,檢視新增資料來源會出現mysql資料來源:   2.Mysql資料釋出 2.1配置資料來源   2.2釋出圖層 2.2.1原始表釋出 需要有geometry型別的欄位。

基於C#語言MVC框架NPOI控制元件匯出Excel資料

控制元件bin檔案下載地址:https://download.csdn.net/download/u012949335/10610726 @{ ViewBag.Title = "dcxx"; } <script type="text/javascript"

利用Flume將MySQL資料準實時抽取到HDFS、MySQL、Kafka

軟體版本號 jdk1.8、apache-flume-1.6.0-bin、kafka_2.8.0-0.8.0、zookeeper-3.4.5叢集環境安裝請先測試; 參考以下作者資訊,特此感謝;http://blog.csdn.net/wzy0623/article/detail

MySQL資料的增刪改查

mysql入門(三) 查詢: 1)、查詢所有行 命令: select <欄位1,欄位2,...> from < 表名 > where < 表示式 > 例如:查看錶MyClass 中所有資料    mysql> sele

匯出hive資料的5種方法

下面介紹一下hive 匯出的幾種方式 本地檔案直接匯出 insert overwrite local directory '/data/hive/export/student_info' select * from default.student 修改分

使用Flume將MySQL資料實時抽取到hadoop

一、為什麼要用到Flume 在以前搭建HAWQ資料倉庫實驗環境時,我使用Sqoop抽取從MySQL資料庫增量抽取資料到HDFS,然後用HAWQ的外部表進行訪問。這種方式只需要很少量的配置即可完成資料抽取任務,但缺點同樣明顯,那就是實時性。Sqoop使用MapReduce

Windows匯出mysql結構到word文件

推薦一個實用的工具DBExportDoc V1.0 For MySQL,直接使用其中的Word文件 首先需要安裝mysql-connector-odbc,安裝完成後,在控制面板\系統和安全\管理工具\資料來源(ODBC)中配置資料庫資訊 然後根據文件提示一步步操作即可,如果匯出來的是中文亂碼

利用Flume將MySQL資料準實時抽取到HDFS

一、為什麼要用到Flume        在以前搭建HAWQ資料倉庫實驗環境時,我使用Sqoop抽取從MySQL資料庫增量抽取資料到HDFS,然後用HAWQ的外部表進行訪問。這種方式只需要很少量的配置即可完成資料抽取任務,但缺點同樣明顯,那就是實時性。Sqoop使用MapRe

db2匯入匯出資料 db2備份恢復

db2look –d dbname –e –o db.sql –i username –w passworddb2 -tf db.sql 單表匯出db2move web export -tn yc_news -u db2user -p psw  (db2move cqycnw

mysql資料以本地檔案方式匯入Hive

1、mysql生成資料 1)建立資料庫和資料表,指令碼如下: SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0; SET @[email protected]@FOREIGN_KEY_CHECKS

Flume將MySQL資料存入到HDFS

浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>   

Flume將MySQL資料存入到HBase

浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>   

java匯出mysql資料的結構生成word文件

使用sql查詢表的結構是比較簡單,其實這裡難就是難在匯出結構到word文件中。。。,使用poi-tl程式碼也簡單 一、首先jdbc工具類,這個不多說了 public class SqlUtils { private static String url = "jdbc:mysql://lo

mysql匯入資料load data infile用法(將txt檔案中的資料匯入中)

我們常常匯入資料!mysql有一個高效匯入方法,那就是load data infile 下面來看案例說明   基本語法: load data  [low_priority] [local] infile 'file_name txt' [replace | ignor