そういえば、ファイルのバックアップはcronで回すようにしたが、データベースが手付かずだった。
Redmineも運用し始めたことだし、データベースもバックアップしておかないと、何かあった時に面倒だ。
1. バックアップ処理用のユーザーを追加
cronでDBバックアップを回す場合、mysqldump コマンドを使うのだが、この場合、スクリプト中にパスワードを記載せざるを得ない。
root や対象のアプリで使っているユーザーのパスワードをスクリプトに直書きするのも気持ち悪いので、参照専用のユーザーを作成して、それでバックアップを回してみる。
GRANT RELOAD,SELECT,FILE,LOCK TABLES ON *.* TO 'backup_user'@'localhost' IDENTIFIED BY 'your_pass';
同じことができれば、phpMyAdminでも可。
2. バックアップスクリプト
単独でスクリプトを書いてもいいんだが、すでにファイルバックアップ用のスクリプトがあるので、それに追記する形とし、DB→ファイルの順でバックアップされるようにする。
そうすれば、ファイルに書き出したDBのバックアップをNASにバックアップできる。
vi /etc/cron.daily/auto_backup.sh
#!/bin/bash
DATE=`date +%Y%m%d`
BkupDir="/home/iwakiri/dbdump"
### ここはバックアップしたいデータベースの分だけ
mysqldump -u backup_user -pyour_pass -F --lock-all-tables --add-drop-database --databases postfix > ${BkupDir}/postfix_${DATE}.sql
mysqldump -u backup_user -pyour_pass -F --lock-all-tables --add-drop-database --databases redmine > ${BkupDir}/redmine_${DATE}.sql
chown hoge:hoge ${BkupDir}/*_${DATE}.sql
### ここは元々のスクリプトをそのまま
rsync -avh --delete --exclude={"/backup/","/dev/","/proc/","/sys/","/tmp/","/run/","/mnt/","/media/","/lost+found"} / /backup
mysqldump コマンドの”–databases”オプションを”–all-databases”に変えれば、全データベースをまとめてバックアップできるが、”information_schema”とかをリストアするシーンがあるのか不明だし、サービスごとにファイルが分かれてた方が楽そうなので、上記の方式とした。
サービスを増やして、その分データベースを増やせば、その都度スクリプトはいじらないといけないが・・・
まあ、もっとスクリプトを突き詰めれば、現在あるデータベースの一覧を取得して、それに応じてファイルを出力するなんてこともできるかもしれないが。
タグ:
#CentOS Stream #MariaDB #バックアップ