使用mysqldump以SQL格式來dump資料
Using mysqldump for Backups
使用mysqldump工具可以以以下幾種方式來生成dump檔案:
.作為備份在資料丟失的情況下來執行資料恢復
.作為源資料用來配置複製從伺服器
.作為源資料用來進行實驗:
-為了複製資料庫而不用改變源資料
-為了測試潛在的升級後不相容的問題
mysqldump生成兩種型別的輸出,這依賴於是否使用--tab選項:
.不使用--tab選項,mysqldump將輸出SQL語句到標準輸出。這類輸出由建立dump物件(資料庫,表,儲存過程等)的create語句組成,並且包含向表載入資料的insert語句。輸出可以被儲存大檔案中並且之後可以使用mysql來重新載入來重新建立被dump的物件。有一些選項可用於修改SQL語句的格式,以及控制轉儲哪些物件。
.使用--tab選項,mysqldump將為每個被dump的物件生成兩個輸出檔案。伺服器以製表符分隔的文字形式寫入一個檔案用來儲存表記錄,每條記錄一行。這個檔名為tbl_name.txt被儲存輸出目錄中。伺服器還會在輸出目錄中生成一個名為tbl_name.sql的檔案用來儲存create table語句。
使用mysqldump以SQL格式來dump資料
預設情況下,mysqldump以SQL語句來作為標準輸出。可以將輸出儲存到檔案中:
為了dump所有資料庫,可以使用--all-databases選項來呼叫mysqldump
[mysql@localhost ~]$ mysqldump -uroot -pabcd1234 --all-databases > all_db_dump.sql mysqldump: [Warning] Using a password on the command line interface can be insecure.
為了dump指定的資料庫,可以使用--databases選項來指定
[mysql@localhost ~]$ mysqldump -uroot -pabcd1234 --databases mysql query_rewrite > dump.sql mysqldump: [Warning] Using a password on the command line interface can be insecure.
--databases選項會讓命令列中的所有名字作為資料庫名字來對待。不使用這個選項,mysqldump將第一個名字作為資料庫名後面的作為表名對待。
使用--all-databases或--databases選項,mysqldump在dump每個資料庫之前會寫入create database和use語句。這確保了當dump檔案被重新載入時,如果不存在資料庫時會建立資料庫並使它作為預設資料庫使用資料庫的內容被載入到相同的資料庫中。如果想讓dump檔案在重建資料之前強制刪除每個資料庫,可以使用--add-drop-database選項。在這種情況下,mysqldump會在每個create database語句之前寫一個drop database語句。
為了dump單個資料庫,在命令列中指定資料庫名:
[mysql@localhost ~]$ mysqldump -uroot -pabcd1234 --databases mysql > dump_mysql.sql mysqldump: [Warning] Using a password on the command line interface can be insecure.
在dump單個資料庫的情況下,可以忽略--databases選項:
[mysql@localhost ~]$ mysqldump -uroot -pabcd1234 mysql > dump_mysql_1.sql mysqldump: [Warning] Using a password on the command line interface can be insecure. [mysql@localhost ~]$ more dump_mysql.sql -- MySQL dump 10.13 Distrib 5.7.26, for Linux (x86_64) -- -- Host: localhost Database: mysql -- ------------------------------------------------------ -- Server version 5.7.26-log /*!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 */; -- -- Current Database: `mysql` -- CREATE DATABASE /*!32312 IF NOT EXISTS*/ `mysql` /*!40100 DEFAULT CHARACTER SET utf8mb4 */; USE `mysql`; -- -- Table structure for table `columns_priv` -- [mysql@localhost ~]$ more dump_mysql_1.sql -- MySQL dump 10.13 Distrib 5.7.26, for Linux (x86_64) -- -- Host: localhost Database: mysql -- ------------------------------------------------------ -- Server version 5.7.26-log /*!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 `columns_priv` --
上面兩個命令之間的差異就在於不使用--databases選項時,dump輸出不會包含create database或use語句。這有幾種含義:
.當重新載入dump檔案時,你必須指定一個預設資料庫名因此伺服器就會知道那個資料庫會被載入。
.為了重新載入,可以指定一個不同於原始資料庫名的資料庫名,這能讓你載入資料到不同的資料庫中。
.如果被載入的資料庫不存在,你必須先建立資料庫。
.因為輸出將不會包含create database語句,--add-drop-database選項沒有影響。如果使用它,將不會生成drop database語句。
為了dump一個資料庫中的指定表,在命令列中指定資料庫名後指定表名:
[mysql@localhost ~]$ mysqldump -uroot -pabcd1234 mysql t t1 t2 > dump_tables.sql mysqldump: [Warning] Using a password on the command line interface can be insecure. [mysql@localhost ~]$ cat dump_tables.sql -- MySQL dump 10.13 Distrib 5.7.26, for Linux (x86_64) -- -- Host: localhost Database: mysql -- ------------------------------------------------------ -- Server version 5.7.26-log /*!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 `t` -- DROP TABLE IF EXISTS `t`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `t` ( `id` int(11) NOT NULL, `name` varchar(20) NOT NULL, `date` date DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `t` -- LOCK TABLES `t` WRITE; /*!40000 ALTER TABLE `t` DISABLE KEYS */; INSERT INTO `t` VALUES (1,'jingyong',NULL),(2,'yeyali',NULL),(3,'huangyan',NULL),(4,'wenyao',NULL); /*!40000 ALTER TABLE `t` ENABLE KEYS */; UNLOCK TABLES; -- -- 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` ( `c1` char(10) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; /*!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 ('xy'); /*!40000 ALTER TABLE `t1` ENABLE KEYS */; UNLOCK TABLES; -- -- Table structure for table `t2` -- DROP TABLE IF EXISTS `t2`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `t2` ( `i` int(10) NOT NULL, PRIMARY KEY (`i`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `t2` -- LOCK TABLES `t2` WRITE; /*!40000 ALTER TABLE `t2` DISABLE KEYS */; INSERT INTO `t2` VALUES (0),(1); /*!40000 ALTER TABLE `t2` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; -- Dump completed on 2020-07-10 17:19:42
重新載入SQL格式備份
為了重新載入由mysqldump工具生成的由SQL語句組成的dump檔案,使用這個dump檔案作為mysql客戶端的輸入。如果dump檔案是由使用--all-databases或--databases選項的mysqldump命令所生成,它將包含create database和use語句並且不需要為載入的資料指定預設資料庫。
[mysql@localhost ~]$ mysql -uroot -pabcd1234 mysql < dump_tables.sql mysql: [Warning] Using a password on the command line interface can be insecure.
一種替代的方式是透過在mysql命令提示符下使用source命令:
mysql> source /var/lib/mysql/dump_tables.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) 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) Query OK, 0 rows affected, 1 warning (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.10 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.12 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) Query OK, 4 rows affected (0.02 sec) Records: 4 Duplicates: 0 Warnings: 0 Query OK, 0 rows affected (0.01 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.08 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.12 sec) Query OK, 0 rows affected (0.01 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 1 row affected (0.02 sec) Query OK, 0 rows affected (0.02 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.07 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.12 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.01 sec) Query OK, 2 rows affected (0.02 sec) Records: 2 Duplicates: 0 Warnings: 0 Query OK, 0 rows affected (0.04 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected, 1 warning (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) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) mysql> select * from t; +----+----------+------+ | id | name | date | +----+----------+------+ | 1 | jingyong | NULL | | 2 | yeyali | NULL | | 3 | huangyan | NULL | | 4 | wenyao | NULL | +----+----------+------+ 4 rows in set (0.00 sec) mysql> select * from t1; +------+ | c1 | +------+ | xy | +------+ 1 row in set (0.00 sec) mysql> select * from t2; +---+ | i | +---+ | 0 | | 1 | +---+ 2 rows in set (0.00 sec)
如果dump檔案是單資料庫dump且不包含create database和use語句,那麼首先需要建立資料庫(必須的):
shell> mysqladmin create db1
然後在載入dump檔案時指定資料庫名:
shell> mysql db1 < dump.sql
另一種方式,在mysql提示符中,建立資料庫,選它作為預設資料庫,然後載入dump檔案:
mysql> create database if not exists db1; mysql> use db1; mysql> source /var/lib/mysql/dump_tables.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) 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) Query OK, 0 rows affected, 1 warning (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.10 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.12 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) Query OK, 4 rows affected (0.02 sec) Records: 4 Duplicates: 0 Warnings: 0 Query OK, 0 rows affected (0.01 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.08 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.12 sec) Query OK, 0 rows affected (0.01 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 1 row affected (0.02 sec) Query OK, 0 rows affected (0.02 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.07 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.12 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.01 sec) Query OK, 2 rows affected (0.02 sec) Records: 2 Duplicates: 0 Warnings: 0 Query OK, 0 rows affected (0.04 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected, 1 warning (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) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec) Query OK, 0 rows affected (0.00 sec)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-2707297/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用mysqldump以文字分隔格式來dump資料MySql
- mysqldump dump-slaveMySql
- mysqldump來備份MYSQL資料庫(指令碼)MySql資料庫指令碼
- Oracle使用dump匯入資料Oracle
- 使用data dump 恢復資料庫資料庫
- oracle使用儲存過程將表資料以excel格式匯出Oracle儲存過程Excel
- mysqldump匯出資料MySql
- 使用SQL來分析資料庫引數(二)SQL資料庫
- 使用awk來解析dump檔案
- dump資料塊
- MYSQLDUMP TABLE IN SQL FORMATMySqlORM
- 使用 antd 的 form 元件來自定義提交的資料格式ORM元件
- 通過pl/sql來格式化sqlSQL
- 使用Mysqldump備份和恢復MySQL資料庫MySql資料庫
- 通過oracle event來dump資料檔案頭資訊Oracle
- 使用AMDU DUMP ASM磁碟後設資料資訊ASM
- mysqldump使用MySql
- ORACLE空間管理實驗8:資料塊格式分析--DUMP結合BBEDOracle
- 詳解MySQL資料備份之mysqldump使用方法MySql
- 使用mysqldump進行mysql資料庫備份還原MySql資料庫
- sql server使用convert來取得datetime日期資料SQLServer
- 【實驗】【外部表】以資料泵檔案格式抽取and遷移資料演示
- JSON資料格式的使用JSON
- 使用events DUMP buffer cache中指定的資料塊
- mysqldump 資料庫備份程式MySql資料庫
- mysql 備份資料庫 mysqldumpMySql資料庫
- mysql資料庫遷移 mysqldumpMySql資料庫
- mysqldump 進行資料備份MySql
- 【SQL】使用v$license檢視獲得自啟動以來資料庫曾經達到的最大 session 數SQL資料庫Session
- 使用ms sql以來自認為寫的最好的過程SQL
- rhel5 mysqldump使用_匯出表結構_資料_結構及資料MySql
- (轉)oracle dump block格式說明OracleBloC
- dump表的資料塊
- 使用binlog2sql工具來恢復資料庫SQL資料庫
- 如何用fastq-dump把sra格式轉成fastq格式(fq格式)AST
- 關於表的資料塊驗證 DUMP 工具 使用
- 使用pprint模組格式化資料
- mysqldump 恢復單個資料庫MySql資料庫