數據庫的主要作用就是對數據進行保存和維護,所以備份數據是數據庫管理中最常用的操作。為了防止數據庫意外崩潰或硬件損傷而導致的數據丟失,數據庫系統提供了備份和恢復策略。
保證數據安全的最重要的一個措施就是定期的對數據庫進行備份。這樣即使發生了意外,也會把損失降到最低。
數據庫備份是指通過導出數據或者復制表文件的方式來制作數據庫的副本。當數據庫出現故障或遭到破壞時,將備份的數據庫加載到系統,從而使數據庫從錯誤狀態恢復到備份時的正確狀態。
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:15
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 TABLE IF 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 語句選擇數據庫,然后在數據庫中創建表並且插入記錄。