mysql全庫備份恢復某個表
阿新 • • 發佈:2018-05-23
正則 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全庫備份恢復某個表