最近把公司 devops 總算搞起來了,然後把線上的 mysql 資料庫定期備份到 oss 上。
中間遇到不少頭痛問題,比如 oss 掛載到 centos 中,docker 備份時指令碼直接執行正常,放到 crontab 中執行失敗,不能傳送郵件等。
系統: centos 7
硬體: aliyun ecs
安裝ossfs
在 aliyun 倉庫 中存在 類似 亞馬遜雲 oss mount 的工具,然後通過如下方式進行安裝即可:
# wget
# yum localinstall ossfs_1.80.5_centos7.0_x86_64.rpm --nogpgcheck
賬戶配置
建立/etc/passwd-ossfs
檔案並新增如下內容:
--- 在 passwd-ossfs 檔案中放入 bucket:accesskeyid:accesskeysecret 格式存放即可 ---
# echo bucket:***x:***xx > /etc/passwd-ossfs
--- 修改 passwd-ossfs 訪問許可權 ---
# chmod 640 /etc/passwd-ossfs
手動掛載
--- 非阿里雲主機 url 使用外部訪問鏈結 ---
# ossfs bucket /srv/ossfs -ourl=
--- 阿里雲主機中 url 使用 內部鏈結 節約流量 ---
# ossfs bucket /srv/ossfs -ourl=
自動掛載
修改 /etc/fstab 檔案,實現自動 mount, 在其中增加如下配置即可
--- 非阿里雲主機 url 使用外部訪問鏈結 ---
ossfs#bucket /srv/ossfs fuse _netdev,url=,allow_other 0 0
--- 阿里雲主機中 url 使用 內部鏈結 節約流量 ---
ossfs#bucket /srv/ossfs fuse _netdev,url=,allow_other 0 0
然後使用mount -a
來進行測試即可,如果沒有報錯即配置正確
注
ossfs 只能用 root 來進行操作
由於 aliyun 主機把 25 埠封掉了,所以簡單的配置/etc/mail.rc
不一定好使,這裡需要配 465 埠來進行傳送郵件
工具安裝
# yum install -y mailx
配置帳號
阿里雲封掉 25 埠後,使用 465 埠進行傳送郵件,因此在 /etc/mail.rc 檔案中進行如下修改:
set from=***@***.com
set smtp=smtps:
set smtp-auth-user=***@***.com
set smtp-auth-password=******
set smtp-auth=login
set ssl-verify=ignore
# 證書存放位置
set nss-config-dir=/etc/pki/nssdb/
匯入證書:
# echo -n | openssl s_client -connect smtp.exmail.qq.com:465 | sed -ne '/-begin certificate-/,/-end certificate-/p' > /etc/pki/nssdb/exmail.qq.crt
# certutil -a -n "geotrust ssl ca" -t "c,," -d /etc/pki/nssdb/ -i /etc/pki/nssdb/exmail.qq.crt
# certutil -a -n "geotrust global ca" -t "c,," -d /etc/pki/nssdb/ -i /etc/pki/nssdb/exmail.qq.crt
# certutil -l -d /etc/pki/nssdb/
測試
$ echo '日誌內容' | mail -s '系統日誌' ***@qq.com
mysql 執行在 docker 環境中,在宿主機上執行docker
命令來生成相應的內容
#!/bin/bash
# 容器名稱
docker_name=mysql
data_dir="/srv/ossfs/backup/db/"
docker exec -t $ mysqldump -uuser -ppasswd --all-databases > "$data_dir/data_`date +%y%m%d`.sql"
if [ $? -ne 0 ];then
# 任務失敗,傳送郵件
echo -e "failed to backup the databases..." | mail -s 'backup failed!!!' admin@***.com
exit -1
fi# 刪除 7 天前的備份
find $data_dir -mtime +7 -name 'data_[1-9].sql' -exec rm -rf {} \;
然後通過crontab -e
新增如下內容
0 2 * * * sh /srv/crons/mysql-backup.sh > /srv/logs/backup/mysql_dumps.log 2>&1
注
通過上述方式備份時docker exec -it ...
中的i
選項需要去掉,詳細參考 #
error 「the input device is not a tty」
定義備份儲存位置:
# kubectl create -f - 《定義定時任務
# kubectl create -f - volumemounts:
- name: mysql-backup
mountpath: /mysql-backup
restartpolicy: onfailure
volumes:
- name: mysql-backup
persistentvolumeclaim:
claimname: mysql-backup
eof
參考
在k8s集群中一步步構建乙個複雜的mysql資料庫 mysql定時備份指令碼 MySql定時備份指令碼
最近需要對某服務的資料庫資料進行備份,因此參考網上教程完成資料庫備份指令碼.因為服務的使用頻率較低,因此設定定時任務,在每天的中午以及午夜時分進行備份操作.bin bash 設定mysql的登入使用者名稱和密碼 根據實際情況填寫 mysql user mysql password mysql hos...
MySql 定時備份
mysql bat echo off set month date 3,2 set day date 0,2 set year date 6,4 d redmine bitnam 1 mysql bin mysqldump opt ubackup pbackup h 192.168.122.111 ...
mysql定時備份
2009 01 191.cron介紹 分 時 日 月 星期 要執行的命令 crontab命令的一般形式為 crontab u user e l r 其中 u 使用者名稱。e 編輯crontab檔案。l 列出crontab檔案中的內容。r 刪除crontab檔案。2.mysqldump介紹 add d...