在 MySQL 中提供了多種數據導入方式,例如 mysqlimport 工具、SQL 語句導入以及編寫專屬導入程式。通常數據導入的基本流程可分為三步:
mysqlimport 導入文本數據建立一個以 Tab 鍵分隔字段的文本文件 myuser.txt:
# cat myuser.txt zhao 25 8 2015-1-1 qian 22 4 2014-5-6 sun 31 1 2013-12-7 li 40 6 2014-12-12 zhou 45 3 2015-2-8 wu 18 1 2014-9-12 zheng 44 9 2012-10-12 wang 29 12 2015-3-6
登入 MySQL 並建立結構對應的表 user_import:
mysql> use db_users;
mysql> create table user_import (
name varchar(32) not null primary key,
age int,
level int,
login_date date
);
mysql> desc user_import;
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| name | varchar(32) | NO | PRI | NULL | |
| age | int(11) | YES | | NULL | |
| level | int(11) | YES | | NULL | |
| login_date | date | YES | | NULL | |
+------------+-------------+------+-----+---------+-------+
mysqlimport 是 MySQL 官方提供的導入工具,語法為:
mysqlimport [options] db_name textfile.txt
實際操作示例:
# 將文件複製到數據目錄(視環境而定) # cp /home/allen/user_import.txt /var/lib/mysql/db_users/ # 執行導入 # mysqlimport -uroot -pxxx db_users user_import.txt db_users.user_import: Records: 8 Deleted: 0 Skipped: 0 Warnings: 0 # 若主鍵衝突可使用 -d 參數(刪除原有數據後導入) # mysqlimport -d -uroot -p db_users user_import.txt
mysql> select * from user_import; +-------+------+-------+------------+ | name | age | level | login_date | +-------+------+-------+------------+ | zhao | 25 | 8 | 2015-01-01 | | qian | 22 | 4 | 2014-05-06 | | sun | 31 | 1 | 2013-12-07 | | li | 40 | 6 | 2014-12-12 | | zhou | 45 | 3 | 2015-02-08 | | wu | 18 | 1 | 2014-09-12 | | zheng | 44 | 9 | 2012-10-12 | | wang | 29 | 12 | 2015-03-06 | +-------+------+-------+------------+
若數據源使用逗號或其他字符分隔,可透過 --fields-terminated-by 參數指定:
# mysqlimport -uroot -pxxx --fields-terminated-by=, db_users user_import2.txt
mysqldumpmysqldump 是 MySQL 專門用於數據導出與備份的工具,可將資料庫、表、存儲過程以 SQL 腳本形式導出。
# 導出整個資料庫 # mysqldump -u root -p db_users > db_users.sql # 查看導出文件 # ls -al db_users.sql -rw-r--r--. 1 root root 6366 Jun 10 22:52 db_users.sql
導出文件包含表結構、數據插入語句及必要的會話變量設置,可直接用於恢復。
mysql 命令管道導入# mysql -u root -p db_users2 < db_users.sql
source 命令mysql> create database db_users3; mysql> use db_users3; mysql> source db_users.sql
SELECT ... INTO OUTFILE 與 LOAD DATA INFILE針對單表數據備份,可使用以下組合:
-- 導出表數據到文件 mysql> select * into outfile 'tbbk_users' from tb_users; Query OK, 13 rows affected (0.00 sec) -- 從文件導入數據到表 mysql> load data infile 'tbbk_users' into table tb_users; Query OK, 13 rows affected, 13 warnings (0.00 sec)
提示:LOAD DATA INFILE 預設分隔符為 Tab,若文件格式不同需配合 FIELDS TERMINATED BY 等子句使用。