1. 程式人生 > >mysql全庫備份恢復某個表

mysql全庫備份恢復某個表

正則 signed set archive 1.4 sql IE ls -l SQ

早上小紅過來問我說網站的一個功能沒了,看了下數據庫,少了個表。好吧,心裏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 ),

mysql全庫備份恢復某個表