用 Docker 無腦備份資料庫
每次有一個新的資料庫,都要琢磨著配置一個備份。當然你可能有一個祖傳的 shell 指令碼,重新配置一下放到 crontab 裡就可以了。但是無論是檢視和修改配置,還是檢視 crontab 都不是那麼方便。
今天介紹一個 Docker 映象,只需要簡單的配置啟動,就可以。地址在這裡:https://hub.docker.com/r/deitch/mysql-backup/ 但你也許不需要點開連結,先看完我的例子吧。
version: '3.7' services: backup: image: databack/mysql-backup volumes: - /root/dbbackup:/db environment: - DB_DUMP_TARGET=/db - DB_USER=root - DB_PASS=root - DB_SERVER=xxx.xxx.xxx.xxx user: root deploy: placement: constraints: - node.id == YOURDOCKERSWARMNODEID
講要點
Version
我用了最新版的 docker-compose 格式,優點就是不用在裝 docker-compose … 使用新版 Docker 自帶的docker stack -c backup.yml backup
這樣子啟動 stack 就好。這樣機器就只用裝 docker 一個包。
如果你想用舊版的 docker-compose 點開上邊作者的 readme 裡有例子。
Volumes
這個映象支援備份到本地,檔案伺服器,雲端。這裡是備份到本地,需要 mkdir 創造一個目錄,並且 mount 到容器上。備份雲端自行去看相關的環境變數,就不用掛載資料捲了。
Environment
眾所周知用 docker 映象輸入和配置就靠環境變量了,像我這樣備份到本地可以複製我這個,記得填寫伺服器地址,也可以是 compose 或者 stack 中的一個服務名稱。別的情況就去 readme 中看說明吧。
User
這個作者比較謹慎,容器里居然用了 1005 的 uid ,儲存用雲端不用管,用本地就沒許可權了,這裡讓容器用 root 執行。
Deploy
這個是 docker stack 的配置,這裡為了讓它只在一個機器啟動一個例項,你要是 swarm 就一個機器也可以不配置這個。要是多個機器,要用docker node ls
看一下,填個指定 id 進來,相應的你就在那個機器上建目錄了。
就這樣,主要只是給大家介紹一下存在這麼個東西。有需要可以自己看說明的。我還搞過雲函式+物件儲存的備份方案,比如騰訊雲的 scf+cos ,好處是不要伺服器也基本不要錢……但還是比複製粘貼個配置檔案啟動 docker 服務麻煩太多了。