mysql全庫備份恢復某個表


早上小紅過來問我說網站的一個功能沒了,看了下數據庫,少了個表。好吧,心里mmp,開始恢復數據

環境: 全庫備份 恢復某一個表

1.1 查看備份數據

[aiye@aiye mysql_backup]$ ls -lh
total 16G
-rw-r--r-- 1 root root 5.4G May 21 00:58 2018_05_21_00_30_01.all.sql.zip     ##找到了備份數據

1.2  查看備份文件類型

[machao@iZ233xdnwmfZ mysql_backup]$ file 2018_05_21_00_30_01.all.sql.zip   ##查看文件類型

2018_05_21_00_30_01.all.sql.zip: Zip archive data, at least v3.0 to extract

1.3  解壓

將壓縮文件“2018_05_21_00_30_01.all.sql.zip”在當前目錄下解壓縮。

[aiye@aiye mysql_backup]$ unzip 2018_05_21_00_30_01.all.sql.zip

將壓縮文件“2018_05_21_00_30_01.all.sql.zip”在指定目錄/tmp下解壓縮,如果已有相同的文件存在,要求unzip命令不覆蓋原先的文件

[aiye@aiye mysql_backup]$ unzip -n  2018_05_21_00_30_01.all.sql.zip -d /tmp 

1.4 恢復數據

如何從全庫備份中抽取某張表呢,全庫恢復,再恢復某張表小庫還可以,大庫就很麻煩了,那我們可以利用正則表達式來進行快速抽取,具體實現方法如下:

1.從全庫備份中抽取出t表的表結構    sed -e'/./{H;$!d;}' -e 'x;/CREATE TABLE `domain`/!d;q'

查找到了domain表的結構

[aiye@aiye mysql_backup]$ sed -e'/./{H;$!d;}' -e 'x;/CREATE TABLE `domain`/!d;q' 2018_05_22_00_30_01.all.sql    
DROP TABLE IF EXISTS `domain`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `domain` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主鍵id',
  `domain_name` varchar(255) NOT NULL DEFAULT '' COMMENT '域名',
  `create_time` int(11) unsigned DEFAULT '0' COMMENT '創建時間',
  `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '域名狀態(0- 正常 1-封禁 -1 刪除)',
  PRIMARY KEY (`id`)
) ENGINE=MEMORY AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
2. 從全庫備份中抽取出t表的內容

[aiye@aiye ~]$ grep'INSERT INTO `domain`'  2018_05_22_00_30_01.all.sql

INSERT INTO `domain`
VALUES
    (
        1,
        www.baidu.com',
        1523781065 ,- 1
    ),
 
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM