<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          備份 docker 容器內(nèi)的 mongo數(shù)據(jù)庫(kù)

          共 2062字,需瀏覽 5分鐘

           ·

          2021-03-14 13:30

          作者:追星人小豪
          來源:SegmentFault 思否社區(qū)




          前言


          之前自己寫了一個(gè)個(gè)人博客,整體技術(shù)棧為:Vue + node + mongo,之前就是一個(gè)小白,啥也不懂沒有設(shè)置權(quán)限,也沒有修改端口,也沒有限制遠(yuǎn)程登錄host......


          突然有一天,發(fā)現(xiàn)數(shù)據(jù)全部沒有了(被黑):



          后面小白不斷成長(zhǎng),摸索出了 jenkins + docker 實(shí)現(xiàn)了自動(dòng)構(gòu)建和部署,其中 mongo 被我部署進(jìn)了 docker 容器


          現(xiàn)在有個(gè)問題,我想定期的去備份數(shù)據(jù),以備不時(shí)之需




          人力備份


          什么叫人力備份,就是手工的把 mongo 容器內(nèi)的數(shù)據(jù)備份,流程:


          • 進(jìn)入 mongo 容器,備份數(shù)據(jù)
          • 拷貝 mongo 容器的數(shù)據(jù)到宿主機(jī)機(jī)器

          1. mongo 容器內(nèi)備份數(shù)據(jù)


          找到正在運(yùn)行中的 mongo 容器,這里是 3dcf2168ed94

          docker images


          進(jìn)入 mongo 容器

          docker exec -it 3dcf2168ed94 sh



          我們新建一個(gè)備份目錄,假設(shè)是 /root/blog


          執(zhí)行 mongodump 命令,導(dǎo)出 blog 整個(gè)數(shù)據(jù)庫(kù)到當(dāng)前目錄

          # 導(dǎo)出 blog 數(shù)據(jù)庫(kù) 到當(dāng)前目錄
          mongodump -h localhost:27017 -d blog -o ./


          可以看到,已經(jīng)成功備份了容器的數(shù)據(jù),我們退出,回到宿主機(jī)器

          exit

          2. 拷貝容器數(shù)據(jù)到宿主機(jī)


          執(zhí)行命令:

          # 拷貝 3dcf2168ed94容器內(nèi)的 /root/blog  => 當(dāng)前目錄(宿主機(jī)器)
          docker cp 3dcf2168ed94:/root/blog ./




          完美,數(shù)據(jù)成功備份出來了




          自動(dòng)備份


          每次都手工太費(fèi)勁了,于是偷懶的我想了個(gè)法子

          1. 自動(dòng)掛載


          docker 容器內(nèi)的目錄其實(shí)是可以自動(dòng)掛載到宿主機(jī)的

          # docker-compose.yml
          # 宿主機(jī)的 /root/blog-backend/data 映射到 容器內(nèi)的 /data/db
          /root/blog-backend/data:/data/db


          2. 定時(shí)任務(wù)備份數(shù)據(jù)


          我這里做的是定時(shí)任務(wù)每天都會(huì)去執(zhí)行一個(gè)函數(shù),這個(gè)函數(shù)的功能就是備份數(shù)據(jù)到某個(gè)目錄,然后該目錄會(huì)自動(dòng)映射到宿主機(jī)器,形成一個(gè)閉環(huán)

          我這里用的是 eggjg,每天備份一次

          # /app/schedule/backup.ts
          export default class BackUp extends Subscription {
            static get schedule() {
              return {
                interval: '1d'# 每天備份一次
                type'all',
              };
            }
            async subscribe() {
              try {
                // 備份數(shù)據(jù)
              } catch (e) {
                console.log(e);
                this.ctx.logger.error(`${new Date()}:備份數(shù)據(jù)失敗`);
              }
            }
          }


          完美,終于可以愉快地摸魚了~.~



          點(diǎn)擊左下角閱讀原文,到 SegmentFault 思否社區(qū) 和文章作者展開更多互動(dòng)和交流,掃描下方”二維碼“或在“公眾號(hào)后臺(tái)回復(fù)“ 入群 ”即可加入我們的技術(shù)交流群,收獲更多的技術(shù)文章~

          - END -


          瀏覽 62
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  福利看片| 免费黄色小网站 | 国产精品久久久久久久久动漫 | 男女激情综合福利网站在线观看 | 激情五色天 |