MySQLdumpファイルを別サーバーにSSH&CRONで定期バックアップ

MySQLのdumpファイルを、別サーバーにSSHとCRONで定期バックアップします。そして一週間後からのファイルは削除するようなスクリプトを組みます。

環境はCentOS:6.2、MySQL:5.5.23です。

  • Aサーバー:MySQLのデータ元(example.com)
  • Bサーバー:バックアップ用サーバー(example.jp)

Aサーバーでバックアップ用のユーザー作成。

[root@localhost ~]# useradd {ユーザー名}

ssh公開鍵をBサーバーにインストールします。

Aサーバー側でSSH公開鍵をつくります。

[root@localhost ~]# su - //まずrootになります。
[root@localhost ~]# su - {ユーザー名} // 次にバックアップユーザーになります。
//キーの作成
[{ユーザー名}@localhost ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/{ユーザー名}/.ssh/id_rsa):[Enter]
Created directory '/home/{ユーザー名}/.ssh'. [Enter]
Enter passphrase (empty for no passphrase): [Enter]
Enter same passphrase again: [Enter]
Your identification has been saved in /home/{ユーザー名}/.ssh/id_rsa.
Your public key has been saved in /home/{ユーザー名}/.ssh/id_rsa.pub.
The key fingerprint is:
フィンガープリント {ユーザー名}@{ホスト名}
[{ユーザー名}@localhost ~]$ exit
[root@localhost ~]# cd /home/{ユーザー名}/.ssh
[root@localhost .ssh]# vi id_rsa.pub

id_rsa.pubの内容が公開鍵になりますのでコピーしてバックアップ先のBサーバーにインストールします。

次の設定はBサーバーのものです。

[root@localhost ~]# useradd {ユーザー名} //同じくバックアップユーザーを作成。

.sshフォルダを作ります。

[{ユーザー名}@localhost ~]$ ssh -p sshのポート番号 localhost

次にキーのコピーです。

[{ユーザー名}@localhost ~]$ cd /home/{ユーザー名}/.ssh
[{ユーザー名}@localhost .ssh]$ vi authorized_keys //公開カギを貼り付けます。
[{ユーザー名}@localhost .ssh]$ exit
[root@localhost ~]# chmod 600 /home/{ユーザー名}/.ssh/authorized_keys

サーバー間でのSSH許可設定

バックアップ用のBサーバーに、SSHでdumpファイルをバックアップする許可設定を行います。

hostsの設定。

[root@localhost ~]# vi /etc/hosts
  127.0.0.1 localhost.localdomain localhost
  192.168.1.10 example.com  //データベース元Aサーバー

hosts.allowの設定。

[root@localhost ~]# vi /etc/hosts.allow
  sshd : 192.168.1.10 : allow //Aサーバーの許可設定(グローバルIPアドレスを入力)
---
sshd : ALL :deny  //上記で許可した以外は拒否

CRON&SSHでMySQLダンプファイルバックアップ

rootでsshログインは許可しない設定にしていますので、次のようなコマンドをAサーバーのCRONに登録します。

[root@localhost ~]# crontab -e
  10 4 * * * su - {SSHユーザー名} -c "mysqldump -u mysqlユーザー名 -pmysqlパスワード データベース名 | gzip | ssh {BサーバーSSHユーザー名}@example.jp -p SSHポート番号 'cat > db_backup.sql.gz'"

なお、sshログインユーザーを制限している場合、今回新規作成したユーザーをBサーバーで許可設定します。

[root@localhost ~]# vi /etc/ssh/sshd_config
AllowUsers user1 {ユーザー名} //スペースで区切って指定します。(user1は既存許可ユーザー)
[root@localhost ~]# service sshd restart
sshd を停止中:                                             [  OK  ]
sshd を起動中:                                             [  OK  ]

一週間分までのバックアップファイルを保管する設定

そして出来たファイルを一週間分保管、その後削除するスクリプトをBサーバーに用意します。

[root@localhost ~]# vi /usr/local/bin/backup.sh
 #!/bin/sh
period=7
dirpath=/home/{ユーザー名}
filename=`date +%y%m%d`
mv $dirpath/db_backup.sql.gz $dirpath/$filename.sql.gz
oldfile=`date --date "$period days ago" +%y%m%d`
rm -f $dirpath/$oldfile.sql.gz
[root@localhost ~]#chmod 700 /usr/local/bin/backup.sh
[root@localhost ~]#ctontab -e
30 4 * * * /usr/local/bin/backup.sh

もう少しスマートなやり方があるとは思いますが、とりあえずこれで目的は果たせることができました。

参照させていただいたサイト様

http://blog.necosuke.jp/archives/133

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です