程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 搞定linux上MySQL編程(四):數據導入導出和備份

搞定linux上MySQL編程(四):數據導入導出和備份

編輯:MySQL綜合教程

搞定linux上MySQL編程(四):數據導入導出和備份


 在MySQL中提供多種數據導入方法,比如mysqlinport、sql語句導入以及編寫專門導入程序等。通常情況下,數據導入基本步驟科分成3步: 1. 確定導入的數據源,按固定格式存儲的文本文件或者SQL文件。
2. 依照導入的文件格式,確定目標數據表,這個數據表如果沒有,可以依照導入的文本文件格式,創建一個相對應的數據表。
3. 執行導入命令,將數據導入數據表中。

下面分別介紹MySQL提供的各種導入數據方法,此處設計一張表,一個一個要導入的數據,已文本格式存儲。
1.數據源
創建一個如下文本文件,各字段已tab鍵隔開:
# 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
2. 然後創建一張目標數據庫表,表的數據結構要和文本文件一一對應,如下:
[root@localhost db_bak]# mysql -u root -p
Enter password:

mysql> use db_users;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> create table user_import ( name varchar(32) not null primary key, age int, level int, login_date date );
Query OK, 0 rows affected (0.02 sec)

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    |       |
+------------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> 
3.導入數據,mysqlimport是MySQL提供的導入工具,該工具可以把文本文件導入到用戶指定的數據表中。
mysqlimport 使用格式為: mysqlimport [-d/f...] tablename data.txt
其中[-d/f...] 是可選參數。 tablename用於表示數據庫名稱。 data.txt用於表示記錄的文本文件,通常要導入的數據表名默認是與文本文件同名的。 例如下面運行mysqlimport命令將文本數據導入到MySQL中:
# 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
# mysqlimport -uroot -p  db_users user_import.txt        
Enter password: 
mysqlimport: Error: 1062, Duplicate entry 'zhao' for key 'PRIMARY', when using table: user_import
# mysqlimport -d -uroot -p  db_users user_import.txt
Enter password: 
db_users.user_import: Records: 8  Deleted: 0  Skipped: 0  Warnings: 0
然後查看數據導入後的情況如下:
# mysql -u root -p
Enter password:
......
mysql> use db_users;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
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 |
+-------+------+-------+------------+
8 rows in set (0.00 sec)
有時候數據源的間隔符可能不是默認tab鍵,有可能是逗號,這時可以加入參數--field-terminatied-by=str, 導入的命令為:
# mysqlimport -uroot -pxxx --fields-terminated-by=, db_users user_import2.txt
db_users.user_import2: Records: 8  Deleted: 0  Skipped: 0  Warnings: 0
數據導出是將數據庫中已存的數據導出到固定文本記錄,mysqldump是MySQL中專門僅數據導出服務的工具,它可以將一個數據庫、表,設置存儲過程一SQL語句的形式導出,另外在數據備份中也會使用該工具。其使用格式為: mysqldump [-r/...] databsesname < data.sql [-r/...]為可選參數;
databsesname為數據庫名稱;
data.sql表示亞導出的SQL的腳本。
# mysqldump -u root -p db_users  > db_userr.sql        
Enter password: 
# ls -al db_userr.sql
-rw-r--r--. 1 root root 6366 Jun 10 22:52 db_userr.sql

# vim db_userr.sql
-- MySQL dump 10.13  Distrib 5.1.66, for redhat-linux-gnu (i386)
--
-- Host: localhost    Database: db_users
-- ------------------------------------------------------
-- Server version       5.1.66
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `password`
--
DROP TABLE IF EXISTS `password`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
"db_userr.sql" 163L, 6366C                                                1,1           Top
-- MySQL dump 10.13  Distrib 5.1.66, for redhat-linux-gnu (i386)
--
-- Host: localhost    Database: db_users
-- ------------------------------------------------------
-- Server version       5.1.66
......
數據導出成功。 數據庫導出文件可以通過如下幾種方式來恢復到數據庫中: 1 利用mysql命令執行數據的恢復操作:
# mysql -u root db_users2 < db_userr.sql -p        
Enter password: 
[root@localhost allen]# mysql -u root -p
Enter password: 
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db_users           |
| db_users2          |
| mysql              |
| test               |
+--------------------+
5 rows in set (0.00 sec)

mysql> 
2. sql語句source 來導入。
mysql> create database db_users3;
Query OK, 1 row affected (0.00 sec)
mysql> use db_users3;
Database changed
mysql> source db_userr.sql
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
對於單個表示的數據備份可以采用select into ... outfile ... 進行數據導出,利用load data ... 方式進行數據導入。 數據表備份執行如下:
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)
Records: 13  Deleted: 0  Skipped: 0  Warnings: 13



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved