Mysql匯出檔案及備份操作筆記

kuqlan發表於2020-03-28

透過 SELECT ... INTO OUTFILE 語句 匯出某個表

 

MariaDB [(none)]> show databases;

+--------------------+

| Database           |

+--------------------+

| acs                |

| auth               |

| information_schema |

| mysql              |

| performance_schema |

| test               |

+--------------------+

6 rows in set (0.01 sec)

 

MariaDB [(none)]> use test

 

Database changed

MariaDB [test]> show tables;

+----------------+

| Tables_in_test |

+----------------+

| sheet1         |

+----------------+

1 row in set (0.01 sec)

 

MariaDB [test]> select * from sheet1 into outfile '/tmp/sheet1.txt';

Query OK, 239 rows affected (0.02 sec)

 

MariaDB [test]> select * from sheet1 into outfile '/tmp/sheet2.txt'

    -> FIELDS TERMINATED BY ',' ENCLOSED BY '"'

    -> LINES TERMINATED BY '\r\n';

Query OK, 239 rows affected (0.00 sec)

 

      LOAD DATA INFILE是SELECT ... INTO OUTFILE的逆操作,SELECT句法。為了將一個資料庫的資料寫入一個檔案,使用SELECT ... INTO OUTFILE,為了將檔案讀回資料庫,使用LOAD DATA INFILE。

 

 

 

  透過 mysqldump 匯出表作為原始資料

如下語句將 test 資料庫的 sheet1 表匯出到 /tmp 目錄下,執行後在 /tmp 目錄下回生成 sheet1.txt 文字檔案:

[root@bogon ~]# mysqldump -u root -p --no-create-info  --tab=/tmp test sheet1

Enter password:

 

 

 

  透過 mysqldump 匯出某個表定義及資料

[root@bogon ~]# mysqldump -u root -p test sheet1 > /tmp/sheet1dump.txt

Enter password:

[root@bogon ~]#

[root@bogon tmp]# more sheet1dump.txt

-- MySQL dump 10.16  Distrib 10.1.25-MariaDB, for Linux (x86_64)

--

-- Host: localhost    Database: test

-- ------------------------------------------------------

-- Server version       10.1.25-MariaDB

 

--

-- Table structure for table `sheet1`

--

 

DROP TABLE IF EXISTS `sheet1`;

/*!40101 SET @saved_cs_client     = @@character_set_client */;

/*!40101 SET character_set_client = utf8 */;

CREATE TABLE `sheet1` (

  `Code` varchar(255) DEFAULT NULL,

  `Name` varchar(255) DEFAULT NULL,

  `Continent` varchar(255) DEFAULT NULL,

  `Code2` varchar(255) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

/*!40101 SET character_set_client = @saved_cs_client */;

 

--

-- Dumping data for table `sheet1`

--

 

LOCK TABLES `sheet1` WRITE;

/*!40000 ALTER TABLE `sheet1` DISABLE KEYS */;

INSERT INTO `sheet1` VALUES ('ABW','Aruba','North America','Caribbean','193.00','','103000','78.4','828.00','793.00','Aruba','

….

 

8670.00','Zimbabwe','Republic','Robert G. Mugabe','4068','ZW');

/*!40000 ALTER TABLE `sheet1` ENABLE KEYS */;

UNLOCK TABLES;

-- Dump completed on 2020-03-27 18:04:43

 

 

全庫備份:

[root@bogon ~]# mysqldump -u root -p --all-databases > /home/dbbakups/Test_DB_dump20200327.txt

Enter password:

 

 

將資料表及資料庫複製至其他主機

如果你需要將資料複製至其他的 MySQL 伺服器上, 你可以在 mysqldump 命令中指定資料庫名及資料表。

 

在源主機上執行以下命令,將資料備份至 dump.txt 檔案中:

 

$ mysqldump -u root -p database_name table_name > dump.txt

password *****

 

[root@bogon ~]# mysqldump -u root -p test sheet1 > /tmp/sheet1dump.txt

 

如果完整備份資料庫,則無需使用特定的表名稱。

[root@bogon ~]# mysqldump -u root -p acs  > /tmp/acsdump.txt

 

[root@bogon tmp]# ls -alh

-rw-r--r--.  1 root     root     5.2M Mar 27 18:54 acsdump.txt

 

 

如果你需要將備份的資料庫匯入到MySQL伺服器中,可以使用以下命令,使用以下命令你需要確認資料庫已經建立:

 

建立資料庫 語法 :     

                create   database   db1   DEFAULT   CHARSET   utf8   COLLATE   utf8_general_ci;       # utf8編碼  

               create database db1 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci; # gbk編碼

使用資料庫:       use   db1;

在另一個本地PC上建立名稱為acstest的資料庫:

mysql>  create database acstest  DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

Query OK, 1 row affected, 2 warnings (0.09 sec)

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| acstest            |

| information_schema |

| kuqlan             |

| mysql              |

| performance_schema |

| sakila             |

| sys                |

| world              |

+--------------------+

8 rows in set (0.00 sec)

 

mysql> exit

Bye

 

C:\Users\yspmm>mysql -u root -p acstest < D:\acsdump.txt

Enter password: ********

 

 

 

匯入語法:

$ mysql -u root -p database_name < dump.txt

password *****

 

 

 

你也可以使用以下命令將匯出的資料直接匯入到遠端的伺服器上,但請確保兩臺伺服器是相通的,是可以相互訪問的:

 

$ mysqldump -u root -p database_name \

       | mysql -h other-host.com database_name

 

 

 

將指定主機的資料庫複製到本地

如果你需要將遠端伺服器的資料複製到本地,你也可以在 mysqldump 命令中指定遠端伺服器的IP、埠及資料庫名。

在源主機上執行以下命令,將資料備份到 dump.txt 檔案中:

請確保兩臺伺服器是相通的:

 

mysqldump  - h other - host . com  - P port  - u root  - p database_name  dump . txt
password 
****

 

 

 

一般在匯出檔案目錄沒有在 mysql  引數檔案 my .ini my .cnf 裡進行配置會出現如下錯誤:

The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

 

出現這個錯誤是因為沒有給資料庫指定寫出檔案的路徑或者寫出的路徑有問題。錯誤解決方法:

首先使用下面的命令  show variables like '%secure%';  檢視資料庫的儲存路徑。如果查出的 secure_file_priv 是 null 的時候就證明在 my.ini 檔案裡面沒有配置寫出路徑。

這時候就可以在 mysql.ini 檔案的 [mysqld] 程式碼下增加 secure_file_priv= D :/ tmp  再重啟 mysql 就可以了。

 

 

 

參考文章:




來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18841027/viewspace-2683050/,如需轉載,請註明出處,否則將追究法律責任。

相關文章