MySQL mysqldump備份資料庫及恢復資料庫(mysql命令)
資料庫的主要作用就是對資料進行儲存和維護,所以備份資料是資料庫管理中最常用的操作。為了防止資料庫意外崩潰或硬體損傷而導致的資料丟失,資料庫系統提供了備份和恢復策略。
保證資料安全的最重要的一個措施就是定期的對資料庫進行備份。這樣即使發生了意外,也會把損失降到最低。
資料庫備份是指通過匯出資料或者複製表文件的方式來製作資料庫的副本。當資料庫出現故障或遭到破壞時,將備份的資料庫載入到系統,從而使資料庫從錯誤狀態恢復到備份時的正確狀態。
MySQL 中提供了兩種備份方式,即 mysqldump 命令以及 mysqlhotcopy 指令碼。由於 mysqlhotcopy 只能用於 MyISAM 表,所以 MySQL 5.7移除了 mysqlhotcopy 指令碼。
本節主要介紹如何使用 mysqldump 命令備份資料庫。
mysqldump 命令執行時,可以將資料庫中的資料備份成一個文字檔案。資料表的結構和資料將儲存在生成的文字檔案中。
備份一個數據庫
使用 mysqldump 命令備份一個數據庫的語法格式如下:
mysqldump -u username -p dbname [tbname ...]> filename.sql
對上述語法引數說明如下:
- username:表示使用者名稱稱;
- dbname:表示需要備份的資料庫名稱;
- tbname:表示資料庫中需要備份的資料表,可以指定多個數據表。省略該引數時,會備份整個資料庫
- 右箭頭“>”:用來告訴 mysqldump 將備份資料表的定義和資料寫入備份檔案;
- filename.sql:表示備份檔案的名稱,檔名前面可以加絕對路徑。通常將資料庫備份成一個字尾名為
.sql
的檔案。
注意:mysqldump 命令備份的檔案並非一定要求字尾名為.sql
,備份成其他格式的檔案也是可以的。例如,字尾名為.txt
的檔案。通常情況下,建議備份成字尾名為.sql
的檔案。因為,字尾名為.sql
的檔案給人第一感覺就是與資料庫有關的檔案。
例 1
下面使用 root 使用者備份 test 資料庫下的 student 表。開啟命令列(cmd)視窗,輸入備份命令和密碼,執行過程如下:
C:\Windows\system32>mysqldump -uroot -p test student>C:\student.sql
Enter password: ****
注意:mysqldump 命令必須在 cmd 視窗下執行,不能登入到 MySQL 服務中執行。
輸入密碼後,MySQL 會對 test 資料庫下的 student 資料表進行備份。之後就可以在指定路徑下檢視剛才備份過的檔案了。student.sql 檔案中的部分內容如下:
-- MySQL dump 10.13 Distrib 5.7.29, for Win64 (x86_64) -- -- Host: localhost Database: test -- ------------------------------------------------------ -- Server version 5.7.29-log /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; --此處刪除了部分內容 -- -- Table structure for table `student` -- DROP TABLE IF EXISTS `student`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `student` ( `id` int(4) NOT NULL, `name` varchar(20) DEFAULT NULL, `stuno` int(11) DEFAULT NULL, `age` int(4) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `student` -- LOCK TABLES `student` WRITE; /*!40000 ALTER TABLE `student` DISABLE KEYS */; INSERT INTO `student` VALUES (1,'zhangsan',23,18),(2,'lisi',24,19),(3,'wangwu',25,18),(4,'zhaoliu',26,18); /*!40000 ALTER TABLE `student` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; ...... -- Dump completed on 2019-03-09 13:03:15View Code
student.sql 檔案開頭記錄了 MySQL 的版本、備份的主機名和資料庫名。
檔案中,以“--”開頭的都是 SQL 語言的註釋。以 “/*!40101” 等形式開頭的是與 MySQL 有關的註釋。40101 是 MySQL 資料庫的版本號,這裡就表示 MySQL 4.1.1。如果恢復資料時,MySQL 的版本比 4.1.1 高,“/*!40101”和“*/”之間的內容被當作 SQL 命令來執行。如果比 4.1.1 低,“/*!40101”和“*/”之間的內容被當作註釋。“/*!”和“*/”中的內容在其它資料庫中將被作為註釋忽略,這可以提高資料庫的可移植性。
DROP 語句、CREATE 語句和 INSERT 語句都是資料庫恢復時使用的;“DROP TABLEIF EXISTS 'student' ”語句用來判斷資料庫中是否還有名為 student 的表,如果存在,就刪除這個表;CREATE 語句用來建立 student 表;INSERT 語句用來恢復所有資料。檔案的最後記錄了備份的時間。
注意:上面 student.sql 檔案中沒有建立資料庫的語句,因此,student.sql 檔案中的所有表和記錄必須恢復到一個已經存在的資料庫中。恢復資料時,CREATE TABLE 語句會在資料庫中建立表,然後執行 INSERT 語句向表中插入記錄。
備份多個數據庫
如果要使用 mysqldump 命令備份多個數據庫,需要使用 --databases 引數。備份多個數據庫的語法格式如下:
mysqldump -u username -P --databases dbname1 dbname2 ... > filename.sql
加上“--databases”引數後,必須指定至少一個數據庫名稱,多個數據庫名稱之間用空格隔開。
例 2
下面使用 root 使用者備份 test 資料庫和 mysql 資料庫。命令如下:
mysqldump -u root -p --databases test mysql>C:\testandmysql.sql
執行完後,可以在C:\
下面看到名為testandmysql.sql 的檔案,這個檔案中儲存著這兩個資料庫的資訊。
備份所有資料庫
mysqldump 命令備份所有資料庫的語法格式如下:
mysqldump -u username -P --all-databases>filename.sql
使用“--all-databases”引數時,不需要指定資料庫名稱。
例 3
下面使用 root 使用者備份所有資料庫。命令如下:
mysqldump -u root -p --all-databases > C:\all.sql
執行完後,可以在C:\
下面看到名為 all.sql 的檔案,這個檔案中儲存著所有資料庫的資訊。
MySQL恢復資料庫(mysql命令)
當資料丟失或意外損壞時,可以通過恢復已經備份的資料來儘量減少資料的丟失和破壞造成的損失。本節主要介紹如何對備份的資料進行恢復操作。
備份檔案中通常包含 CREATE 語句和 INSERT 語句。
在 MySQL 中,可以使用 mysql 命令來恢復備份的資料。mysql 命令可以執行備份檔案中的 CREATE 語句和 INSERT 語句,也就是說,mysql 命令可以通過 CREATE 語句來建立資料庫和表,通過 INSERT 語句來插入備份的資料。
mysql 命令語法格式如下:
mysql -u username -P [dbname] < filename.sql
其中:
- username 表示使用者名稱稱;
- dbname 表示資料庫名稱,該引數是可選引數。如果 filename.sql 檔案為 mysqldump 命令建立的包含建立資料庫語句的檔案,則執行時不需要指定資料庫名。如果指定的資料庫名不存在將會報錯;
- filename.sql 表示備份檔案的名稱。
注意:mysql 命令和 mysqldump 命令一樣,都直接在命令列(cmd)視窗下執行。
例 1
下面使用 root 使用者恢復所有資料庫,命令如下:
mysql -u root -p < C:\all.sql
執行完後,MySQL 資料庫就已經恢復了 all.sql 檔案中的所有資料庫。
注意:如果使用--all-databases
引數備份了所有的資料庫,那麼恢復時不需要指定資料庫。因為,其對應的 sql 檔案中含有 CREATE DATABASE 語句,可以通過該語句建立資料庫。建立資料庫之後,可以執行 sql 檔案中的 USE 語句選擇資料庫,然後在資料庫中建立表並且插入記錄。