データベースを定時バックアップする方法(毎日バックアップする処理)

LinuxサーバなどでMySQLのデータベースを毎日自動的にバックアップする方法です。

バックアップを実行するシェルファイルを作成します。
backup_mysql.sh

#!/bin/sh

mysqldump -u 【ユーザー名】 -p【パスワード】 【バックアップするデータベース名】 > 【出力先】

-pの後にはスペースは入りません。

#!/bin/sh

mysqldump -u username -ppassword hoge_db > /home/user/backup/dump.sql

この時のMySQLユーザーは読み出しのみ可能なユーザーを使用したほうがいいです。

MySQLサーバがlocalhostではない別サーバの場合は-hでホスト名を指定します。

#!/bin/sh

mysqldump -u username -ppassword -h 192.168.1.100 hoge_db > /home/user/backup/dump.sql

SSHやtelnetなどのコマンドプロンプトで、このシェルファイルが正しく実行できるか確認します。

$ sh backup_mysql.sh

として、出力先にバックアップファイルが作成されていることを確認します。

/bin/sh: mysqldump: command not found

のようなエラーが出た場合には

$ which mysqldump

を実行して、mysqldumpの絶対パスを確認します。
普通は

/usr/bin/mysqldump
か
/usr/local/bin/mysqldump

です。
確認したらbackup_mysql.shファイル内の『mysqldump』の部分を絶対パスに書き換えます。

#!/bin/sh

/usr/bin/mysqldump -u username -ppassword hoge_db > /home/user/backup/dump.sql
ERROR 1045 (28000): Access denied for user 'username'@'localhost' (using password: YES)

のようなエラーが出た場合には、MySQLに接続できていないのでユーザー名、パスワードが間違っています。
127.0.0.1の権限があってlocalhostに権限がないときもエラーが出る場合があります。

ERROR 1044 (42000): Access denied for user 'username'@'localhost' to database 'hoge_db'

のようなエラーが出た場合には、MySQLには接続できていますが、データベースにはアクセスできないのでアクセス権限(特権)があるかを確認します。

シェルファイルが正しく実行できた場合には、定時実行するようにcronに登録します。

$ crontab -e

viというテキストエディタでの編集になります。
『a』とタイプすると編集モードになり、編集モードを終了するにはESCキーを押します。
間違った場合にはBackSpaceキーで文字を消せますが、消えない時には『dd』とタイプすると1行消えます。
保存するときには『:wq』と入力すると保存してcrontabを終了します。
保存せずに終了するときには『:q』と入力すると終了しますが、編集してしまった場合には『:q!』と入力すると保存せずに終了します。

分 時 * * * sh /home/user/backup_mysql.sh 1> /dev/null

夜中の3時10分に実行するときには

10 3 * * * sh /home/user/backup_mysql.sh 1> /dev/null

のように書きます。

cronを設定した時間が経過してバックアップファイルが作成されていれば成功です。

保存先のディレクトリにcdコマンドで移動して更新日時を確認する。

$ cd /home/user/backup
$ ls -a
-rw-r--r--   1 user  user        149  7月 16 03:10 2014 dump.sql

この場合、2014年7月16日3時10分に出力されたファイルとなります。

cronでエラーが発生していた場合は、実行ユーザー宛にエラーメールが飛びます。
[参考記事] cronのメール送信先を指定する方法(cronごとに送信先のメールアドレスを指定する方法)

/bin/sh: mysqldump: command not found

のようなエラーメールが届いていた場合にはmysqldumpの部分を絶対パスで書きます。
[参考記事] cron実行時のPATHなどの環境変数を確認する方法

データベースのバックアップを自動で行ったとしても、サーバ自体が壊れてしまった場合は意味がありません。
rsyncなどでバックアップファイルを自動的に他のサーバにバックアップしておくといいです。

関連記事

スポンサーリンク

両端揃えした要素内で「ー」と直後の文字が重なる

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る