Ubuntu MySQLバックアップ(cron,rsync)

cron

以下の3つの方法がある。

***

cd /etc/cron.d

拡張子がないファイルを直接保存する。
rootで644にする。

・記述方法

分 時 日 月 曜日 実行ユーザ 実行コマンド
となる。

(-)ハイフンでつなげて範囲を指定することもできるし、(,)カンマで区切って複数指定することもできる。(*)アスタリスクは全ての範囲という意味。

指定した数字は間隔ではなく、その数字と同じ値のときに実行されるという意味。間隔は(/)スラッシュで指定できる。

日と曜日については、2つとも(*)アスタリスクなら毎日。どちらか指定があればその指定した日となる。2つとも指定があればいずれかに当てはまる日となる。

指定がない場合の実行間隔は1分。例えば、 * */1 * * * とすると、(時=/1)は1時間ごとだが、(分=*)が1分ごと(*は全範囲)という意味なので、1分ごとになる。1時間ごとにしたい場合、0 * * * * のようにすればOK。ちなみに、(/)スラッシュを削除しただけの場合どうなるかというと、* 1 * * * となり、(時=1)なので、1時だけと思いがちだが、(分=*)が1分ごとなので、1:00から1:59まで1分ごとに実行されてしまう。

状態確認
sudo systemctl status cron

ログ確認
journalctl -e -u cron
uオプション:サービス指定
eオプション:最新のみ表示

***

/var/spool/cron/ユーザー名

ユーザー単位で管理される。
コマンドで管理する。

・基本コマンド

一覧
crontab -l

設定がなければ、crontab -e
で作成。

削除
crontab -r

編集
crontab -e

ユーザーの指定は不要。

***

/etc/crontab

root権限で管理される。

以下のファイルを変更すると反映される。

毎時実行
/etc/cron.hourly 
毎日実行
/etc/cron.daily
毎週実行
/etc/cron.weekly
毎月
/etc/cron.monthly

***

・タイムゾーン設定

sudo timedatectl set-timezone Asia/Tokyo
確認の場合、
sudo timedatectl
変更したら、
sudo systemctl restart cron

rsync

rsync オプション コピー元 コピー先
コピー元の最後に/があるとフォルダの中身だけ、/がないとフォルダ自身も含めてとなる。同期先の/は関係ない。

共有にバックアップでフルアクセスにしたい場合、
rsync -p –chmod=a+rwx -r src dst
chmodとpが必要でハマった。

送信元に無いファイルを削除、特定のファイルを除外する場合、
–exclude=’xxx’ –delete

・rsync + ssh

転送先で鍵作成
sudo ssh-keygen -t rsa

ファイル名を聞かれるのでidとする。パスフレーズも聞かれるが指定しない。

秘密鍵:id、公開鍵:id.pubが生成される。

公開鍵の内容は転送先にある
.ssh/authorized_keys
に記載する必要があるので、
sudo cat id.pub >> .ssh/authorized_keys
もし、
.ssh配下にauthorized_keysがない場合は、
mv id.pub authorized_keys
などとしてもOK。作成した場合、パーミッション注意
chmod 600 authorized_keys

(すでに.ssh/authorized_keysがある場合、複数可なので追記する)

秘密鍵:idを転送元に持ってくる。ここではid.keyという名前にしておく。
必要な場合、
sudo chown root:root id.key
sudo chmod 400 id.key

転送元で以下のように実行すればOK。

sudo rsync -auz -e “ssh -i /home/ubuntu/id.key” /home/ubuntu/mysql/ ubuntu@転送先アドレス:/home/ubuntu/share

MySQLのバックアップ

・rsyncスクリプト

sudo vim /home/ubuntu/backup.sh
にファイルを作成する。

所有者rootでパーミッションは700
sudo chmod 700 /home/ubuntu/backup.sh

フォルダを作成する
mkdir /home/ubuntu/mysql

・cron設定

/etc/cron.d
の中に、
適当な名前でファイル作成、今回は
sudo vim /etc/cron.d/mysql_backup
とする。

所有者rootで、パーミッションは644(rw/r/r)

中には、
0 2 * * * root /home/ubuntu/backup.sh
と記入する。

起動しているかどうか
sudo systemctl status cron

手動バックアップの場合

mysqldump –single-transaction –skip-lock-tables -u ユーザー名 -pパスワード -h ホスト名 db名 > xxx_date +%Y%m%d.sql