はじめに
さくらでレンタルサーバーとデータベースを借りている。
/wwwディレクトリ内のファイルについては、スタンダードプラン以上だと標準でバックアップ&ステージングの仕組みがあるのでそれを使えば常に定期バックアップは可能だ。
しかし、データベースについては、特段何か機能があるわけではない。
なんらかの何かで「間違って消しちゃった〜(てへぺろ)」となるのを防ぐためにも、
自動で定期的にバックアップをとる仕組みを構築したのでそのことを記載する。
なお、シェルスクリプトに関する部分はさくらインターネットと関係ない人にも利用できるネタだと思う。
自動バックアップの手順
SSH接続
まずはターミナルからスクリプトを動かしたり、バックアップを保存するサーバーに接続
$ ssh [契約アカウント名]@[契約アカウント名].sakura.ne.jp
パスワードを聞かれるので入力。
シェルスクリプト作成
接続できれば早速シェルスクリプトを保存するフォルダを作成。今回はwwwと同じ階層に作成
$ cd /home/[契約アカウント名]
$ mkdir backup
$ cd backup
$ mkdir script
$ cd script
上記のコマンドで/home/[契約アカウント名]/backup/script
に移動できれば以下のファイルを保存する。
viでファイルを作成してもいいし、ローカルでファイルを作成してFTPなどで保存しても何でもOK。
#!/bin/sh
# MySQL のバックアップ
# バックアップの保存期間(1ヶ月)
period=31
# バックアップを保存するディレクトリ
dirpath='/home/[契約アカウント名]/backup'
# ファイル名
prefix="mysql_"
filename="${prefix}`date +%Y%m%d`.sql.gz"
# mysqldump
# gzipで圧縮する
/usr/local/bin/mysqldump -u [契約アカウント名] -h [接続先データベース:*******.db.sakura.ne.jp] -p[パスワード] --no-tablespaces --single-transaction -B [データベース名1] [データベース名2] [データベース名3・・・] | gzip > $dirpath/$filename
# パーミッションの変更
chmod 0600 $dirpath/$filename
# 古いバックアップファイルを削除
oldfile="${prefix}`date -v-$(($period + 1))d +%Y%m%d`.sql.gz"
rm -f $dirpath/$oldfile
以上です。
以下の行について詳しく記載します。
/usr/local/bin/mysqldump -u [契約アカウント名] -h [接続先データベース:*******.db.sakura.ne.jp] -p[パスワード] --no-tablespaces --single-transaction -B [データベース名1] [データベース名2] [データベース名3・・・]
--no-tablespaces
についてはMySQL 5.7.31 以降、tabelspacesの仕様変更でつけないと以下のエラーが出るようになっています。
mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces
--single-transaction
はInnobDB メインな DBでデータの整合性保つように追加。
また、今回は複数のデータベースのバックアップを取得する前提で、-B [データベース名1] [データベース名2] [データベース名3・・・]
と記載しています。
単一のデータベースだけの場合、この部分は削除してデータベース名を1つだけ書いておけばOK。
なお、パスワードの前につける -p
オプションのあとは半角スペースが不要なので注意ください。
パーミッション変更
他のユーザーからスクリプトが見れないようにパーミッションを変更
$ chmod 0600 mysql_backup.sh
動作確認
動作確認をしてみる。
sh /home/[契約アカウント名]/backup/script/mysql_backup.sh
/home/[契約アカウント名]/backup/
のディレクトリ内に、mysql_20220226.sql.gz
のようなファイルが出力されていればOK。
さくらでcron設定
サーバコントロールパネルにログインして、スクリプト設定のメニューからCRON設定を選択
スケジュール追加から、実行したい間隔と時間を記入して保存。
細かい設定方法ついては さくらのマニュアルを参照
https://help.sakura.ad.jp/360000208761/
こちらでめでたく、定期的な自動バックアップの仕組みが整いました!
これで快適さくらライフを!
参考(感謝)