データベースを定時バックアップする方法(毎日バックアップする処理)
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などでバックアップファイルを自動的に他のサーバにバックアップしておくといいです。
関連記事
- Seedの実行順(外部キー制約などを先に実行させる方法) Foreign key violation
- EC-CUBE2系で商品を大量にカートに入れると注文情報が抜けたりカートが消えたりする
- yumのius(iuscommunity.org)でエラーが出る場合
- iusリポジトリで公開されているパッケージの一覧
- phpMyAdminでログイン画面を出さずにデータベースに接続する方法
- MySQLやMariaDBは標準ではログローテートされない
- MySQL(MariaDB)をユーザー情報を含めてすべて移行する方法
- 4.0以前と4.1以降のパスワード方式の違い
- CakePHPでカラムを比較してSELECTする方法
- 『Table is marked as crashed and should be repaired』の修復方法
- コマンドやphpMyAdminで複数のデータベースに接続できるユーザーを作成する方法
- phpMyAdminで『information_schema』などを非表示にする方法
- PDO_MYSQLをインストールする方法
- 日付型のフォーマットにスラッシュを使ってはいけません(文字コードによって値が変わる)
- MySQLでdatetime型(日時)を日付で抽出するSQLの速度比較
- MySQL関数のまとめ
- MySQLの処理を停止させる方法
- MySQLサーバに接続できるかどうかを確認する
- 複数のデータベースを切り替える方法(別データベースを使用する)
- MySQLで文字化けを防ぐ方法
- 別テーブルでSELECT JOINしながらUPDATEする方法(SELECTした結果でUPDATEする)
- OpenPNE3のデータベースの設定
- MySQLのログファイル ログの種類と保存先
- 文字コードを指定する方法
- LIMITで件数制限をしつつ、全件数を取得する方法 SQL_CALC_FOUND_ROWS FOUND_ROWS()
- SQL Buddy ブラウザベースのMySQL管理ツール
- Got a packet bigger than 'max_allowed_packet' bytes
- CakePHPのDB接続情報設定
- SQL文で特定の曜日のみ抽出するには
- OpenPNE3のサーバ移行の方法
- EC-CUBEのサーバ移行の方法
- EC-CUBEのバックアップ機能とリストア
- EC-CUBEでMySQLデータベースのデータ取得で文字化けするときの対処法
- symfonyのORマッパ(Propel、Doctrine)
- Ruby on Railsのマイグレーションの型とMySQLの型の対応表
- MySQLでランダムな数字を得る方法
- MySQLでBeep音を消す設定
- Zend_DBのSELECTメソッドのまとめ
- Zend_DBの基本
- MySQLでクエリーをログに記録する方法
- MySQLのインストール
- Zend Frameworkのデータベース接続
- WordPressのインストール
- DB設計を見直してEC-CUBEを高速化する
- WindowsでMySQLを再起動する方法
- レコード挿入時の #1364 - Field doesn't have a default value
- オフセットの後半になると急に遅くなる MySQLの高速化
- Beep音を無効にする
- MySQL Query Browser 本家GUIツール
- CSE(Common SQL Environment) SQL便利ツール
- Symfony PropelでのMySQLの設定方法
- MySQLのソケットエラー
- utf8_general_ci と utf8_unicode_ci の違い
- 文字列型(データ型)のまとめ
- 日付と時刻型(データ型)のまとめ
- 数値型(データ型)のまとめ
- 個体識別情報・UIDの取得方法
- Windows MySQLインストール後の設定
- Windows MySQLのインストール
スポンサーリンク