小花狸ITPUB部落格備份工具
小花狸ITPUB/CU部落格備份工具
由golang編寫,執行在Linux環境(CentOS 6測試透過)
1.編譯部落格備份工具的原始碼
[lihuilin@lihuilin src]$ go build Backup.go
2.找到自己的第一篇部落格.(最開始寫的那篇)
這塊做的有點傻,我是從第一篇部落格的內容,透過正則找到後續的部落格地址
其實完全可以從最後一篇部落格往前推..
3.執行備份工具,備份的路徑是/tmp/itpub
一定要改linux open file的設定
[lihuilin@lihuilin src]$ ulimit -n 10000
[lihuilin@lihuilin src]$ ./Backup --path http://blog.itpub.net/29254281/viewspace-775659/
2015/04/12 10:02:57 http://blog.itpub.net/29254281/viewspace-775660/
2015/04/12 10:02:58 http://blog.itpub.net/29254281/viewspace-775663/
2015/04/12 10:02:58 http://blog.itpub.net/29254281/viewspace-775788/
2015/04/12 10:02:59 http://blog.itpub.net/29254281/viewspace-775791/
...
2015/04/12 10:04:41 http://blog.itpub.net/29254281/viewspace-1482375/
2015/04/12 10:04:41 http://blog.itpub.net/29254281/viewspace-1518312/
2015/04/12 10:04:42 一共備份部落格313篇
未稽核透過的文章和設定為僅自己可見的文章,不能備份.
原始碼如下:
package main
import (
"flag"
"github.com/opesun/goquery"
"io"
"log"
"net/http"
"os"
"regexp"
"strconv"
"strings"
)
const (
_ITPUB = "http://blog.itpub.net"
_PATH = "/tmp/itpub"
)
var (
i int
)
func main() {
url := flag.String("path", "", "blog path")
flag.Parse()
getContent(*url)
log.Printf("一共備份部落格" + strconv.Itoa(i) + "篇")
}
func getContent(url string) {
i++
page, _ := goquery.ParseUrl(url)
title := page.Find("title").Text()
base := _PATH + "/" + title + "/"
os.MkdirAll(base, 0777)
htmlfile, _ := os.Create(base + title + ".html")
defer htmlfile.Close()
reg, _ := regexp.Compile("[^\"]*.png")
piclist := reg.FindAllString(page.Html(), -1)
//下載圖片
for _, pic := range piclist {
if !strings.HasPrefix(pic, "/") {
continue
}
dir := pic[0:strings.LastIndex(pic, "/")]
picResp, _ := http.Get(_ITPUB + pic)
defer picResp.Body.Close()
os.MkdirAll(base+dir, 0777)
picfile, _ := os.Create(base + pic)
defer picfile.Close()
io.Copy(picfile, picResp.Body)
}
htmlContent := reg.ReplaceAllString(page.Html(), ".$0")
htmlContent = strings.Replace(htmlContent, "href=\"/css/", "href=\""+_ITPUB+"/css/", -1)
io.WriteString(htmlfile, htmlContent)
nextBlog, _ := regexp.Compile("下一篇:.*\"")
nextUrl := nextBlog.FindString(htmlContent)
if nextUrl == "" {
return
}
log.Println(_ITPUB + nextUrl[21:len(nextUrl)-1])
getContent(_ITPUB + nextUrl[21:len(nextUrl)-1])
}
緣起
4月9日ITPUB發生了重大的線上事故,丟失了一天的資料.
原文如下:
2015年4月9日ITPUB部落格重大失誤道歉信
尊敬的各位ITPUB博主:
經過昨天部落格技術團隊的確認,我不得不告訴大家這個訊息,並代表我們的團隊誠心的向大家致歉,在此不奢求能得到大家的體諒,只願今後,能更謹慎努力的為大家服務,以微薄之力彌補大家辛苦寫作的損失!
2015年4月9日15點47分20秒時由於部落格上線了一個快速刪除廣告文及使用者的功能,未測試妥當後上線的直接操作,導致了有史以來第一次無法挽回的錯 誤及損失,當天所有資料徹底無法找回,伺服器上的備份是4月9日零晨2點的內容。具體損失內容的時間段為:4月9日02:00- 17:40所發的內容找不回來啦!真的對不住大家,在此說任何理由都是蒼白的,最終結果是這樣的!作為一個技術社群的部落格,我深知這種錯誤是遭受鄙視的, 但我只能祈禱這期間發出的博文,博主自己是有備份的!
我更深知,4月9日02:00- 17:40期間所發博文丟失,是一個重大失誤!對於我們自己更是需要深刻的反思!
DBA最不能失手的就是備份和恢復...
而有的時候,我感覺自己還是沒有從開發的角色轉換過來..
這個事故給我以非常大的警醒.
下階段加緊推進
1.集中備份,集中複製,集中監控
2.演練推進binlog
3.每週測試備份有效性
4.搭建Oracle DataGuard,並使用Rman備份
我希望自己永遠不要寫這樣的道歉信,不做那個愚蠢的人.
由golang編寫,執行在Linux環境(CentOS 6測試透過)
1.編譯部落格備份工具的原始碼
[lihuilin@lihuilin src]$ go build Backup.go
2.找到自己的第一篇部落格.(最開始寫的那篇)
這塊做的有點傻,我是從第一篇部落格的內容,透過正則找到後續的部落格地址
其實完全可以從最後一篇部落格往前推..
3.執行備份工具,備份的路徑是/tmp/itpub
一定要改linux open file的設定
[lihuilin@lihuilin src]$ ulimit -n 10000
[lihuilin@lihuilin src]$ ./Backup --path http://blog.itpub.net/29254281/viewspace-775659/
2015/04/12 10:02:57 http://blog.itpub.net/29254281/viewspace-775660/
2015/04/12 10:02:58 http://blog.itpub.net/29254281/viewspace-775663/
2015/04/12 10:02:58 http://blog.itpub.net/29254281/viewspace-775788/
2015/04/12 10:02:59 http://blog.itpub.net/29254281/viewspace-775791/
...
2015/04/12 10:04:41 http://blog.itpub.net/29254281/viewspace-1482375/
2015/04/12 10:04:41 http://blog.itpub.net/29254281/viewspace-1518312/
2015/04/12 10:04:42 一共備份部落格313篇
未稽核透過的文章和設定為僅自己可見的文章,不能備份.
原始碼如下:
package main
import (
"flag"
"github.com/opesun/goquery"
"io"
"log"
"net/http"
"os"
"regexp"
"strconv"
"strings"
)
const (
_ITPUB = "http://blog.itpub.net"
_PATH = "/tmp/itpub"
)
var (
i int
)
func main() {
url := flag.String("path", "", "blog path")
flag.Parse()
getContent(*url)
log.Printf("一共備份部落格" + strconv.Itoa(i) + "篇")
}
func getContent(url string) {
i++
page, _ := goquery.ParseUrl(url)
title := page.Find("title").Text()
base := _PATH + "/" + title + "/"
os.MkdirAll(base, 0777)
htmlfile, _ := os.Create(base + title + ".html")
defer htmlfile.Close()
reg, _ := regexp.Compile("[^\"]*.png")
piclist := reg.FindAllString(page.Html(), -1)
//下載圖片
for _, pic := range piclist {
if !strings.HasPrefix(pic, "/") {
continue
}
dir := pic[0:strings.LastIndex(pic, "/")]
picResp, _ := http.Get(_ITPUB + pic)
defer picResp.Body.Close()
os.MkdirAll(base+dir, 0777)
picfile, _ := os.Create(base + pic)
defer picfile.Close()
io.Copy(picfile, picResp.Body)
}
htmlContent := reg.ReplaceAllString(page.Html(), ".$0")
htmlContent = strings.Replace(htmlContent, "href=\"/css/", "href=\""+_ITPUB+"/css/", -1)
io.WriteString(htmlfile, htmlContent)
nextBlog, _ := regexp.Compile("下一篇:.*\"")
nextUrl := nextBlog.FindString(htmlContent)
if nextUrl == "" {
return
}
log.Println(_ITPUB + nextUrl[21:len(nextUrl)-1])
getContent(_ITPUB + nextUrl[21:len(nextUrl)-1])
}
緣起
4月9日ITPUB發生了重大的線上事故,丟失了一天的資料.
原文如下:
2015年4月9日ITPUB部落格重大失誤道歉信
尊敬的各位ITPUB博主:
經過昨天部落格技術團隊的確認,我不得不告訴大家這個訊息,並代表我們的團隊誠心的向大家致歉,在此不奢求能得到大家的體諒,只願今後,能更謹慎努力的為大家服務,以微薄之力彌補大家辛苦寫作的損失!
2015年4月9日15點47分20秒時由於部落格上線了一個快速刪除廣告文及使用者的功能,未測試妥當後上線的直接操作,導致了有史以來第一次無法挽回的錯 誤及損失,當天所有資料徹底無法找回,伺服器上的備份是4月9日零晨2點的內容。具體損失內容的時間段為:4月9日02:00- 17:40所發的內容找不回來啦!真的對不住大家,在此說任何理由都是蒼白的,最終結果是這樣的!作為一個技術社群的部落格,我深知這種錯誤是遭受鄙視的, 但我只能祈禱這期間發出的博文,博主自己是有備份的!
我更深知,4月9日02:00- 17:40期間所發博文丟失,是一個重大失誤!對於我們自己更是需要深刻的反思!
部落格運營
2015年4月10日09:37
作為一個剛入行的DBA,我反覆的將這個道歉信讀了很多遍.
出現這個事故的原因有三
1.沒有經過完備的測試或者根本沒有測試
2.遇到了一個愚蠢的研發
很有可能一個分支沒有where,導致了全部刪除
3.同時遇到了一個愚蠢的DBA(大哥,都是幹DBA的,小弟完全沒有說您的意思,我主要是想引以為戒,您多擔待)
在恢復全備的時候,沒有往前推進binlog或者沒有設定binlog
仔細考察這幾個因素,我們單位也存在類似的風險
大部分程式沒有經過測試.全憑開發的功力.但是人員素質卻可能參差不齊
Oracle採用的是Expdp每天一個備份,出現問題也是丟失一天的資料.
而且我對於前推binlog也不熟..一旦發生問題..不敢想
維護這個部落格,我花了很多時間和精力..
不僅把他當作網路記事本和分享的平臺.
更從中理解了資料對於使用者的意義.
己所不欲勿施於人
自己不想丟資料,更要以保護自己資料的心態,維護使用者的資料.
出現這個事故的原因有三
1.沒有經過完備的測試或者根本沒有測試
2.遇到了一個愚蠢的研發
很有可能一個分支沒有where,導致了全部刪除
3.同時遇到了一個愚蠢的DBA(大哥,都是幹DBA的,小弟完全沒有說您的意思,我主要是想引以為戒,您多擔待)
在恢復全備的時候,沒有往前推進binlog或者沒有設定binlog
仔細考察這幾個因素,我們單位也存在類似的風險
大部分程式沒有經過測試.全憑開發的功力.但是人員素質卻可能參差不齊
Oracle採用的是Expdp每天一個備份,出現問題也是丟失一天的資料.
而且我對於前推binlog也不熟..一旦發生問題..不敢想
維護這個部落格,我花了很多時間和精力..
不僅把他當作網路記事本和分享的平臺.
更從中理解了資料對於使用者的意義.
己所不欲勿施於人
自己不想丟資料,更要以保護自己資料的心態,維護使用者的資料.
DBA最不能失手的就是備份和恢復...
而有的時候,我感覺自己還是沒有從開發的角色轉換過來..
這個事故給我以非常大的警醒.
下階段加緊推進
1.集中備份,集中複製,集中監控
2.演練推進binlog
3.每週測試備份有效性
4.搭建Oracle DataGuard,並使用Rman備份
我希望自己永遠不要寫這樣的道歉信,不做那個愚蠢的人.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1569918/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【Python】備份itpub部落格Python
- 小花狸監控之安全加固expect備份指令碼指令碼
- 【Python】透過Python備份itpub部落格Python
- CSDN部落格匯出備份工具
- 部落格備份工具:Blog_Backup
- 部落格園部落格記錄備份
- 小花狸監控之MySQLMySql
- 小花狸監控之加密加密
- 小花狸監控之RedisRedis
- 小花狸監控之MongodbMongoDB
- Hexo部落格備份Hexo
- 開通ITPub部落格了!
- 小花狸監控之網路收發
- 今天剛開通ITPUB部落格
- 開通ITPub的部落格啦!
- 軟體工程教學部落格 (備份)軟體工程
- 部落格園資料備份相關
- 開啟ITPUB部落格專欄技能!
- Ubuntu 14下發布ITPUB部落格Ubuntu
- 部落格連結—Oracle備份與恢復Oracle
- 給ITPub部落格小編的幾句話
- 部落格地址http://space.itpub.net/24496749HTTP
- 如何利用客戶端在itpub發部落格客戶端
- ITPUB部落格頻道電子期刊上線
- ITPUB的部落格空間做的真爛
- Hexo部落格同步工具Hexo
- 轉載|如何利用客戶端在itpub發部落格客戶端
- ITPUB部落格全新升級 夜間維護暫停公告
- ITPUB部落格技術文章推薦標準和規範
- ITPUB部落格新版上線,小編手把手教你發博文
- ITPUB部落格新版本上線啦,意見反饋收集!
- (Ⅰ)基於Hexo+GitHub Page搭建部落格,繫結域名及備份HexoGithub
- 【備份工具】mydumper
- mysql備份工具MySql
- 【系列博文管理】ITPUB部落格文集啟動啦! 初期有獎徵集
- 我的第一份部落格!
- 部落格園部落格撰寫工具【開源】(可以直接黏貼圖片)
- 部落格轉發小工具1