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