MySQL-06 數據備份和恢復
學習目標
- 數據備份
- 數據恢復
- 數據庫遷移
- 導入和導出
數據備份
系統意外崩潰或者服務器硬件損壞都有可能導致數據庫丟失,因此生產環境中數據備份非常重要。
MySQLdump命令備份
該命令可以將數據庫備份成一個文件文件,該文件包含了數據定義語句和數據操縱語句,可以執行重新創建數據庫表並插入數據。
語法格式:
mysqldump -u User -h Host -pPassword DBname[TableName,[TableName...]] > [dump file.sql]
示例:備份myschool數據庫
備份文本文件:
-- -- Dumping data for table `subject` -- LOCK TABLES `subject` WRITE; /*!40000 ALTER TABLE `subject` DISABLE KEYS */; INSERT INTO `subject` VALUES (1,‘數據庫基礎‘,1,20),(2,‘Java邏輯基礎‘,1,18),(3,‘SQL基礎‘,1,15),(4,‘HTML‘,1,20),(5,‘Control+Ajax‘,2,20),
(6,‘項目管理‘,4,40),(7,‘軟件工程‘,3,28),(8,‘算法與數據結構‘,2,15),(9,‘C語言‘,1,25),(10,‘鄧小平理論‘,1,18),(11,‘C#面向對象‘,2,16),
(12,‘JavaWeb‘,3,40),(13,‘數據挖掘‘,4,20),(14,‘英語‘,1,10),(15,‘JavaScript‘,1,15),(16,‘軟件分層架構‘,3,20); /*!40000 ALTER TABLE `subject` 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 */;
其中:
--:表示註釋內容。
/*!......*/:表示可執行註釋,在MySQL中可執行,在其他數據庫被當成註釋。
40101:表示mysql版本,表明此語句只有在4.01.01版本或者更高版本的MySQL中才能執行。
示例:備份myschool.student表
warning:在命令行中輸入密碼是不安全的。忽略。
示例:備份多個數據庫
備份多個數據庫需要添加“--databases”參數,之後跟隨多個數據庫名字
如果要備份全部數據庫,使用參數:--all-databases
mysqldump的選項
復制數據庫目錄
備份之前需要LOCK TABLES,然後對表執行FLUSH TABLES。也可以停止mysql服務進行備份。
缺點:1、InnoDB引擎表不支持;2、不同版本MySQL不支持。
MySQLhotcopy快速恢復
只能備份MyISAM引擎表。
示例:備份mysql到d:/目錄下
mysqlhotcopy -u root -p123 myschool d:/db.sql
數據恢復
將備份的數據進行恢復。
使用MySQL命令恢復
mysql命令的語法格式
mysql -u user -pPassword [DBName] < backdbfilename.sql
如果backdbfilename.sql是mysqldump命令創建的包含數據庫語句的文件,執行的時候不需要指定數據庫名。
示例:恢復myschool數據庫
註意:需要先手動創建myschool數據庫並指定。
直接復制到數據庫目錄
執行前停止mysql服務,拷貝後重啟mysql服務。
缺點:不支持InnoDB引擎表。
使用mysqlhotcopy快速恢復
將mysqlhotcopy導出的數據拷貝到mysql數據庫文件目錄下,重啟mysql服務即可。Linux中需要指定數據庫文件的所有者,使用chown命令。
如果恢復的數據庫已經存在,需要使用DROP命令刪除,再進行恢復。
數據庫遷移
將數據從一個數據庫系統移動到另一個數據庫系統上。
相同版本MySQL數據遷移
主版本號相同的數據庫遷移,本質是源數據庫的備份和目標數據庫的恢復過程。
(註意:復制數據庫文件只適合於MyISAM類型數據庫,不支持InnoDB類型數據庫)
示例:將A主機上的MySQL數據庫全部遷移到B主機上
mysqldump -h www.a.com -uUser -pPassword DBName | mysql -h www.b.com -uUser -pPassword
"|":管道連接符。
如果要全部遷移,使用--all-databases參數。
不同版本的遷移
建議導出SQL,在目標數據庫上執行SQL。
表的導出和導入
數據表可以導出為sql、xml或者html文件,同時支持導入。
使用select導出表
語法格式
SELECT 字段 FROM 表名 WHERE 條件 INTO OUTFILE ‘文件路徑‘ [選項]
註意實現:需要修改my.ini的“secure-file-priv=路徑名”,MySQL只支持導出到指定目錄。
使用MySQL命令導出文本文件
語法格式
mysql -uUser -pPassword --execute="SELECT 語句" DBName >FileName.txt
使用LOAD DATA INFILE導入文本文件
語法格式
LOAD DATA INFILE ‘filename.txt‘ INTO TABLE TableName
使用MySQLimport命令導入文本文件
語法格式
mysqlimport -uUser -pPassword DBName fileName.txt
綜合練習
需求說明
- 使用mysqldump導出myschool數據庫
- 刪除myschool數據
- 使用mysql命令恢復myschool數據庫
MySQL-06 數據備份和恢復