使用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
- oracle使用儲存過程將表資料以excel格式匯出Oracle儲存過程Excel
- 使用Mysqldump備份和恢復MySQL資料庫MySql資料庫
- 使用 antd 的 form 元件來自定義提交的資料格式ORM元件
- 詳解MySQL資料備份之mysqldump使用方法MySql
- 使用binlog2sql工具來恢復資料庫SQL資料庫
- mysqldump 資料庫備份程式MySql資料庫
- mysqldump 恢復單個資料庫MySql資料庫
- 【資料分析師_02_SQL+MySQL】030_MySQL的資料備份和效能管理(MYSQLDUMP,MYSQLHOTCOPY,INDEX,EXPLAIN)MySqlIndexAI
- Laravel 使用 sql 語句 和 sql 檔案 來建立執行資料庫遷移LaravelSQL資料庫
- mysqldump使用方法(MySQL資料庫的備份與恢復)MySql資料庫
- mysqldump 使用規範MySql
- SQLServer 如何收集資料以排除 SQL 死鎖問題SQLServer
- 重新學習MySQL資料庫11:以Java的視角來聊聊SQL隱碼攻擊MySql資料庫Java
- mysqldump同步生產到生產資料MySql
- Blazor使用sql server 資料庫BlazorSQLServer資料庫
- Python匯入Excel表格資料並以字典dict格式儲存PythonExcel
- 如何在MapReduce中使用SequenceFile資料格式?
- 如何在MapReduce中使用Avro資料格式?VR
- Linux core dump使用Linux
- windows下使用mysqldump備份資料庫並上傳到阿里雲OSSWindowsMySql資料庫阿里
- MySQL使用mysqldump+binlog完整恢復被刪除的資料庫(轉)MySql資料庫
- Linux基礎命令---mysqldump資料庫備份LinuxMySql資料庫
- Mysql備份和還原資料庫-mysqldumpMySql資料庫
- 使用Visual Studio分析dump
- 資料包格式
- pg_dump 備份,恢復資料庫資料庫
- goutil/dump - 列印漂亮易讀的go資料Go
- 10個SQL技巧之二:使用遞迴SQL生成資料SQL遞迴
- 使用Oracle SQL Developer匯入Excel資料OracleSQLDeveloperExcel
- 3.1.1.1 使用 SQL*Plus 啟動資料庫SQL資料庫
- 使用binlog2sql恢復資料SQL
- 13 使用SQL Apply 升級資料庫SQLAPP資料庫
- 在登入資料庫的使用!sql資料庫SQL
- redis資料備份和遷移工具redis-dump安裝和使用初探Redis
- sql server日期格式 sqlserver的日期格式SQLServer
- 在.NET使用JSON作為資料交換格式JSON
- SQL資料同步到ElasticSearch(三)- 使用Logstash+LastModifyTime同步資料SQLElasticsearch