【最新版】#1073: 研究室のサーバ/DMZ/WordPressのバックアップ環境の構築
githubURL https://github.com/cdsl-research/dsm_wordpress_backup
ワードプレスが導入されたVMにSSH用鍵の作成¶
# WordPress VMで実行
ssh-keygen
cd ~/.ssh/
ls
バックアップ先VMに鍵を登録¶
# バックアップ先 VMで実行
install -m 0700 -d ~/.ssh
cd .ssh
sudo nano authorized_keys
chmod 600 authorized_keys
ワードプレスが導入されたVMにSSH接続情報を追加¶
# WordPress VMで実行
sudo nano ~/.ssh/config
~/.ssh/config
Host backup_vm
HostName 192.168.56.102
User wp
ワードプレスが導入されたVMから接続情報を使用してSSH接続できるか確認¶
# WordPress VMで実行
ssh backup_vm
ワードプレスが導入されたVMからバックアップ用VMへデータを転送¶
# WordPress VMで実行
cd ~
nano test_file.txt
scp -r test_file.txt backup_vm:~
# バックアップ先 VMで実行
cd ~
ls
ワードプレスのデータを集めて転送¶
# バックアップ先 VMで実行
cd ~
mkdir backup_data
# WordPress VMで実行
cd ~
mkdir backup_data
mkdir send_data
sudo mysqldump wp > ~/backup_data/wp_database.sql
sudo cp -r /var/www/html/ ~/backup_data/
data_var=`date "+%Y%m%d_%H%M%S"`
tar -czf ~/send_data/`echo $data_var`.tgz ~/backup_data
scp -r ~/send_data/`echo $data_var`.tgz backup_vm:~/backup_data/`echo $data_var`.tgz
sudo rm -r backup_data
sudo rm -r send_data
スクリプトにして実行してみる¶
# WordPress VMで実行
cd ~
sudo nano auto_backup.sh
auto_backup.sh
mkdir backup_data
mkdir send_data
sudo mysqldump wp > ~/backup_data/wp_database.sql
sudo cp -r /var/www/html/ ~/backup_data/
data_var=`date "+%Y%m%d_%H%M%S"`
tar -C -czf ~/send_data/`echo $data_var`.tgz ~/backup_data
scp -r ~/send_data/`echo $data_var`.tgz backup_vm:~/backup_data/`echo $data_var`.tgz
sudo rm -r backup_data
sudo rm -r send_data
# WordPress VMで実行
sudo chmod +x auto_backup.sh
./auto_backup.sh
slackにPOSTするスクリプトを作成する¶
初めにslackのカスタムインテグレーションでIncoming Webhookを追加し、POST用URLを取得する。
# WordPress VMで実行
cd ~
sudo nano slack_post.sh
slack_post.sh
URL='https://hooks.slack.com/services/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'
if [ $# != 2 ]; then
echo "ユーザー名とメッセージを指定してください"
exit 1
else
USER_NAME=`echo $1`
MESSAGE=`echo $2`
fi
payload="payload={
\"username\": \"${USER_NAME}\",
\"text\": \"${MESSAGE}\"
}"
curl -s -S -X POST --data-urlencode "${payload}" ${URL} > /dev/null
# WordPress VMで実行
sudo chmod +x slack_post.sh¥
./slack_post.sh ワードプレスVM バックアップ開始します
./slack_post.sh ワードプレスVM バックアップ成功しました
こちらを参考にしました
自動でスクリプトを実行するテスト¶
# WordPress VMで実行
crontab -e
crontab:
# 毎回0分に実行
0 * * * * ~/auto_backup.sh 2>>~/cron_err
バックアップのスクリプトを変更(管理者権限で実行する事)¶
(廃止)¶
# バックアップ先 VMで実行
sudo mkdir /var/backup_data
sudo chown -R wp:wp /var/backup_data
# WordPress VMで実行
cd ~
sudo nano auto_backup.sh
auto_backup.sh
# 管理者権限で実行
mkdir /var/backup_data
mkdir /var/send_data
mysqldump wp > ~/wp_database.sql
mv ~/wp_database.sql /var/backup_data/wp_database.sql
cp -r /var/www/html/ /var/backup_data/
data_var=`date "+%Y%m%d_%H%M%S"`
tar -C /var/send_data -czf /var/send_data/`echo $data_var`.tgz /var/backup_data
scp -r /var/send_data/`echo $data_var`.tgz backup_vm:/var/backup_data/`echo $data_var`.tgz
rm -r /var/backup_data
rm -r /var/send_data
# WordPress VMで実行
sudo crontab -e
バックアップ用ユーザーの作成¶
ユーザの作成とパスワードの設定¶
# WordPress VMで実行
sudo useradd -m backupuser
sudo passwd backupuser
sudo usermod -G sudo backupuser
exit
新しいユーザでログイン¶
# Macで実行
ssh backupuser@192.168.56.101
シェルの変更¶
# WordPress VMで実行
ssh backupuser@192.168.56.101
chsh
# /bin/bash を入力
再ログイン¶
# Macで実行
ssh backupuser@192.168.56.101
新規ユーザにSSH用鍵の作成¶
# WordPress VMで実行
ssh-keygen
cd ~/.ssh/
ls
バックアップ先VMに鍵を登録¶
# バックアップ先 VMで実行
install -m 0700 -d ~/.ssh
cd .ssh
sudo nano authorized_keys
sudo chmod 600 authorized_keys
ワードプレスが導入されたVMの新規ユーザにSSH接続情報を追加¶
# WordPress VMで実行
sudo nano ~/.ssh/config
~/.ssh/config
Host backup_vm
HostName 192.168.56.102
User wp
ワードプレスが導入されたVMから接続情報を使用してSSH接続できるか確認¶
# WordPress VMで実行
ssh backup_vm
ワードプレスが導入されたVMからバックアップ用VMへデータを転送¶
# WordPress VMで実行
cd ~
nano test_file.txt
scp -r test_file.txt backup_vm:~
# バックアップ先 VMで実行
cd ~
ls
新規ユーザがMYSQLを操作できる様にする¶
# バックアップ先 VMで実行
sudo mysql
# バックアップ先 VMで実行
CREATE USER backupuser@localhost;
GRANT ALL PRIVILEGES ON * . * TO 'backupuser'@'localhost';
exit
新規ユーザでバックアップをしてみる¶
ここではsudoは付けない様に¶
# WordPress VMで実行
# 作業フォルダを作成する
mkdir /var/tmp/backup_data
mkdir /var/tmp/send_data
chown -R backupuser:backupuser send_data
chown -R backupuser:backupuser backup_data
mysqldump wp > /var/tmp/backup_data/wp_database.sql
cp -r /var/www/html/ /var/tmp/backup_data/
data_var=`date "+%Y%m%d_%H%M%S"`
tar -C /var/tmp/send_data -czf /var/tmp/send_data/`echo $data_var`.tgz /var/tmp/backup_data
scp -r /var/tmp/send_data/`echo $data_var`.tgz backup_vm:~/backup_data/`echo $data_var`.tgz
rm -r /var/tmp/backup_data
rm -r /var/tmp/send_data
スクリプトの配置¶
今回は /usr/local/bin にスクリプトを配置する
# WordPress VMで実行
cd /usr/local/bin
sudo nano slack_post.sh
slack_post.sh
#!/bin/sh
URL='https://hooks.slack.com/services/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'
if [ $# != 2 ]; then
echo "ユーザー名とメッセージを指定してください"
exit 1
else
USER_NAME=`echo $1`
MESSAGE=`echo $2`
fi
payload="payload={
\"username\": \"${USER_NAME}\",
\"text\": \"${MESSAGE}\"
}"
curl -s -S -X POST --data-urlencode "${payload}" ${URL} > /dev/null
# WordPress VMで実行
sudo chmod +x slack_post.sh
./slack_post.sh ワードプレスVM_テスト バックアップ開始します
# WordPress VMで実行
cd /usr/local/bin
sudo nano auto_backup.sh
auto_backup.sh
#!/bin/sh
/usr/local/bin/slack_post.sh "ワードプレスVM_テスト" "バックアップを処理を開始します"
mkdir /var/tmp/backup_data
mkdir /var/tmp/send_data
chown -R backupuser:backupuser /var/tmp/backup_data
chown -R backupuser:backupuser /var/tmp/send_data
mysqldump wp > /var/tmp/backup_data/wp_database.sql
cp -r /var/www/html/ /var/tmp/backup_data/
data_var=`date "+%Y%m%d_%H%M%S"`
tar -C /var/tmp/send_data -czf /var/tmp/send_data/`echo $data_var`.tgz /var/tmp/backup_data
scp -r /var/tmp/send_data/`echo $data_var`.tgz backup_vm:~/backup_data/`echo $data_var`.tgz
rm -r /var/tmp/backup_data
rm -r /var/tmp/send_data
/usr/local/bin/slack_post.sh "ワードプレスVM_テスト" "バックアップを処理を終了します"
# WordPress VMで実行
sudo chmod +x auto_backup.sh
./auto_backup.sh
テスト環境で実行できた為,実際の環境でユーザー作成から開始¶
差分だけ記載 ↓
ワードプレスが導入されたVMの新規ユーザにSSH接続情報を追加¶
# WordPress VMで実行
sudo nano ~/.ssh/config
~/.ssh/config
Host backup_vm
HostName 192.168.201.69
User web
IdentityFile ~/.ssh/id_rsa
auto_backup.sh
何故か,ssh送信時にパスワードを求められるため,未完成
#!/bin/sh
/usr/local/bin/slack_post.sh "ワードプレスVM_テスト" "バックアップを処理を開始します"
mkdir /var/tmp/backup_data
mkdir /var/tmp/send_data
chown -R backupuser:backupuser /var/tmp/backup_data
chown -R backupuser:backupuser /var/tmp/send_data
mysqldump wordpress > /var/tmp/backup_data/wp_database.sql
cp -r /var/www/html/ /var/tmp/backup_data/
data_var=`date "+%Y%m%d_%H%M%S"`
tar -C /var/tmp/send_data -czf /var/tmp/send_data/`echo $data_var`.tgz /var/tmp/backup_data
scp -r /var/tmp/send_data/`echo $data_var`.tgz backup_vm:~/backup_data/`echo $data_var`.tgz
rm -r /var/tmp/backup_data
rm -r /var/tmp/send_data
/usr/local/bin/slack_post.sh "ワードプレスVM_テスト" "バックアップを処理を終了します"
バックアップ先に世代に応じた自動削除スクリプトを配置¶
# バックアップ先 VMで実行
cd /usr/local/bin
sudo nano slack_post.sh
slack_post.sh
#!/bin/sh
URL='https://hooks.slack.com/services/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'
if [ $# != 2 ]; then
echo "ユーザー名とメッセージを指定してください"
exit 1
else
USER_NAME=`echo $1`
MESSAGE=`echo $2`
fi
payload="payload={
\"username\": \"${USER_NAME}\",
\"text\": \"${MESSAGE}\"
}"
curl -s -S -X POST --data-urlencode "${payload}" ${URL} > /dev/null
# バックアップ先 VMで実行
cd /usr/local/bin
sudo nano auto_remove.sh
auto_remove.sh
FilePath=~/backup_data/
Generations=2
rm_num=`expr $Generations + 1`
file_num=`ls -1 ${FilePath} | wc -l`
array=($(ls ${FilePath} | tail -n+$rm_num))
echo バックアップファイル総数は${file_num}です。
/usr/local/bin/slack_post.sh "バックアップVM_テスト" "バックアップファイル総数は${file_num}です。"
echo 世代数は${Generations}でセットアップされています。
/usr/local/bin/slack_post.sh "バックアップVM_テスト" "世代数は${Generations}でセットアップされています。"
for eachValue in ${array[@]}; do
echo ${eachValue}を削除します。
/usr/local/bin/slack_post.sh "バックアップVM_テスト" "${eachValue}を削除します。"
rm m ${FilePath}${eachValue}
done
# バックアップ先 VMで実行
sudo chmod +x auto_remove.sh
sudo chmod +x slack_post.sh
./auto_remove.sh
自動削除スクリプトの自動化¶
# バックアップ先 VMで実行
crontab -e
# 以下を記述
0 * * * * /usr/local/bin/auto_remove.sh 2>>~/cron_err
バックアップの自動化¶
# ワードプレス VMで実行
crontab -e
# 以下を記述
0 * * * * /usr/local/bin/auto_backup.sh 2>>~/auto_backup_err.log
次やること¶
- sshを使用して送信時,鍵を配置しているのにパスワードが求められる為 原因特定
- 実行結果をslackにポストしたい
2/12¶
鍵を設置しているのにも関わらずパスワードを求められた原因¶
authorized_keysの所有者がrootだった(sudoを付けて新規ファイル作成してしまったのだろう)
# ワードプレス VMで実行
chown -R $(whoami).$(id `whoami` -gn) ~/.ssh
cronの頻度変更¶
1日1回のバックアップに変更(仮)
# ワードプレス VMで実行
crontab -e
# 以下を記述
0 0 * * * /usr/local/bin/auto_backup.sh 2>>~/auto_backup_err.log
バックアップスクリプト改良¶
ファイル名を表示させたい
# ワードプレス VMで実行
sudo nano /usr/local/bin/auto_backup.sh
auto_backup.sh
#!/bin/sh
/usr/local/bin/slack_post.sh "ワードプレスVM_テスト" "バックアップを処理を開始します"
mkdir /var/tmp/backup_data
mkdir /var/tmp/send_data
chown -R backupuser:backupuser /var/tmp/backup_data
chown -R backupuser:backupuser /var/tmp/send_data
mysqldump wordpress > /var/tmp/backup_data/wp_database.sql
cp -r /var/www/html/ /var/tmp/backup_data/
data_var=`date "+%Y%m%d_%H%M%S"`
tar -C /var/tmp/send_data -czf /var/tmp/send_data/`echo $data_var`.tgz /var/tmp/backup_data
scp -r /var/tmp/send_data/`echo $data_var`.tgz backup_vm:~/backup_data/`echo $data_var`.tgz
rm -r /var/tmp/backup_data
rm -r /var/tmp/send_data
/usr/local/bin/slack_post.sh "ワードプレスVM_テスト" "バックアップを処理を終了します"
メモ¶
1つのバックアップが522MBぐらい VM 40GB? 1つのバックアップが1GBとして 40世代は残しておけそう.
とりあえず,30世代の設定で 毎日0時にバックアップを作成する.