mysql定時備份

2021-09-19 21:14:22 字數 3385 閱讀 7470

最近把公司 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...