1. 程式人生 > >MySQL-06 數據備份和恢復

MySQL-06 數據備份和恢復

linux 導出表 www. imp 文本文件 enable word roo sqli

學習目標

  • 數據備份
  • 數據恢復
  • 數據庫遷移
  • 導入和導出

數據備份

系統意外崩潰或者服務器硬件損壞都有可能導致數據庫丟失,因此生產環境中數據備份非常重要。

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

  

綜合練習

需求說明

  1. 使用mysqldump導出myschool數據庫
  2. 刪除myschool數據
  3. 使用mysql命令恢復myschool數據庫

MySQL-06 數據備份和恢復