HOME  /Synology
 /mysqldumpでMySQLを定期的にバックアップする方法
2018年03月24日

mysqldumpでMySQLを定期的にバックアップする方法

定期的にMySQL(MairaDB)をバックアップするコマンドにmysqldumpがあります。

これをDSMの中で実行する方法を解説します。

手順は下記になります。

1.バックアップフォルダを作成する。

2.バックアップフォルダの中にバックアップ用のスクリプトを作成する。

3.タスクスケジューラに上記のスクリプトを実行するタスクを作成し実行する。

1.バックアップフォルダを作成する

①File Stationを開いて、Webフォルダを開いてください。

 

 

②作成→新規フォルダの作成でdb_backupフォルダを作成してください。

db_backupの名前は任意ですが大文字小文字は識別しますので小文字が推奨です。

結果は下記にようになります。

 

このdb_backフォルダの中に

・MySQLのDBをバックアップするスクリプト

・バックアップされたsqlファイル

・バックアップタスクの実行結果ログファイル

が入ります。

 

2.バックアップフォルダの中にバックアップ用のスクリプトを作成する。

項番1で作成したdb_backupフォルダの中にmysql_backup.shのファイル名でmysqldumpを使ったシェルスクリプトを作成します。

※mysql_backupのファイル名は任意です。

 

2-1.mysqldumpの基本形

mysqldump オプション  > /volume1/web/db_backup/ファイル名.sql

※1.mysqldumpのダンプデータの保存先をdb_backupフォルダにしています。

※2.ダンプのファイル名は任意ですが大文字、小文字を識別しますので小文字表記が推奨です。

 

2-2.mysqldumpプログラムの場所

mysqldumpプログラムはDSMのバージョンターゲットDBによって利用するプログラムの保存場所が異なります。

  MariaDB5 MariaDB10
DSM5.2 /usr/syno/mysql/bin/mysqldump
DSM6.0 /usr/bin/mysqldump
DSM6.1 /usr/bin/mysqldump /usr/local/mariadb10/bin/mysqldump

DSMのバージョンが6.1でMaraiDB5にあるoldiesDBをダンプする場合は下記になります。

/usr/bin/mysqldump --databases oldies --user=×× --password=×× > /volume1/web/db_backup/mysql_oldies.sql

DSMのバージョンが6.1でMaraiDB10にあるoldiesDBをダンプする場合は下記になります。

/usr/local/mariadb10/bin/mysqldump --databases oldies --user=×× --password=×× > /volume1/web/db_backup/mysql_oldies.sql

 

2-3.mysqldumpのオプション(抜粋)

オプション 説明
–single-transaction

このオプションはデータのダンプ前に、トランザクション分離モードをREPEATABLE READに設定し、START TRANSACTION SQL ステートメントをサーバーに送信します。

よってアプリケーションをブロックすることなく、START TRANSACTIONが発行された時点のデータベースの一貫した状態をダンプします。

–databases

ダンプを取るDB名です。(複数データベースの指定も可)

–user= phpMyAdminのログインユーザ名を記述します。
–password= 上記ユーザのパスワードを記述します。

 

2-4.サンプルスクリプト 

#mysqldumpによるバックアップスクリプト
#前回のバックアップデータの削除
cd /volume1/web/mysql_backup/
rm *.sql
#バックアップDATEの出力
date_stamp=`date '+%Y-%m-%d %H:%M'`
echo "#"$date_stamp
#oldiesDBのバックアップ(MariaDB10)
/usr/local/mariadb10/bin/mysqldump --single-transaction --databases oldies --user=×× --password=×× > /volume1/web/mysql_backup/out_oldies.sql
result1=$?
#ec01のバックアップ(MariaDB5)
/usr/bin/mysqldump --single-transaction --databases ec01 --user=×× --password=×× > /volume1/web/mysql_backup/out_ec01.sql
result2=$?
#エラーコードの出力
echo '  oldies=' $result1 ',ec01=' $result2 '

※1.上記はMariaDB10にあるoldiesデータベースと、MariaDB5にあるec01データベースをダンプするスクリプトサンプルになります。

­ ­シェルスクリプト作成時の注意点

①シェルスクリプトを実行するのはLinuxサーバになりますので改行は<LF>のみです。

Windowsのメモ帳を使うと改行は<LF><CR>になりますので正常に動きません。
EmEditorでスクリプトを作成する場合は『名前を付けて保存』時に改行方法指定で<LFのみ>で保存
して下さい。

何れにしてもスクリプトの作成ツールは改行が<LF>にできるテキストエディタを使ってください。

参考EmEditor Free版のインストールと利用事例

②スペースは必ず半角スペースを使ってください。全角スペースは誤動作の原因になります。

③mysqldumpの場所はDSMのバージョンやターゲットDBによって異なりますので気を付けて下さい。

 

3.タスクスケジューラに上記のスクリプトを実行するタスクを作成し実行する。

コントロールパネルからタスクスケジューラを起動します。

①下記画面の作成ボタン→予約タスク→『ユーザ指定のスクリプト』を実行します。

 

②下記画面が表示されます。全般タブにタスク名とユーザ名を選択します。

※1.タスク名の所は判り易いタスクの名前を入れて下さい

※2.ユーザの所はMariaDBにアクセスできるユーザ名を選択します。

 

③タスク設定タブ画面を開いてください。

ユーザ指定のスクリプトの所に実行するスクリプトとログファイルを記述します。

sh /volume1/web/db_backup/mysql_backup.sh>>/volume1/web/db_backup/mysql_log.txt

先頭のshは標準のシェルを実行するコマンドです。

/volume1/web/db_backup/mysql_backup.shは、実行するシェルスクリプトです。

>>/volume1/web/db_backup/mysql_log.txtは実行結果のログを記載するログファイル名です。
>>は追記指定です。これを>にすると上書きになります。

 

④総ての入力が終わったら『OK』を挿入しジョブを登録し、実行ボタンで検証してください。

上記の実行ボタンを挿入して、正常にバックアップデータとログが書き込まれるか?を確認してください。 

<実行後のdb_backupフォルダのファイル構成>

尚、mysl_log.txtは、メモ帳でなくEmEditorで開いてください。(改行が<LF>のみなので!)
またmysql_backup.sqlファイルもEmEditorで開くと、編集する事も可能です。 

 

⑤最後に、作成したユーザ指定スクリプトを呼び出し、スクジュールタブで実行時間と間隔を指定して下さい。

以上で定期的なMySQLDBのバックアップが完了しました。

­ ­メモ

上記のスクリプトはMariaDBに入っている特定DBをSQLファイルでダンプしただけです。

WordPressは上記のDBとWeb直下にあるフォルダから構成されています。

よって上記スケジューラが走った後で、下記の何れかのバックアップを実行する必要があります。

 ­無償クラウド(Google Drive)へのバックアップとリストア

 ­rsyncサーバへのバックアップとリストア

これで特定時点のDBダンプとWeb直下にあるフォルダが履歴を持ってバックアップされます。

 

4.バックアップ結果をメールで連絡する方法

上記のスクリプトだけでは、バックアップが成功したか否かは、バックアップのLogファイルを見るしか方法はありません。

しかしタスクの作成画面の通知設定でメールアドレスを指定すると実行結果がメールで送られます。

※1.『Eメールで詳細な実行情報を送信』にチェックを入れると、無条件に指定したメールに実行結果が通知されます。

※2.『スクリプトが異常終了した場合のみ詳細な実行情報を送信』にチェックを入れるとエラーがあった時だけメールが送られるようになります。

­ ­メモ

エラーがあった時を実現する為には、スクリプトの終了時に下記を指定すると実現できます。

exit 1:エラーがあった事を通知します。

exit 0:エラーが無かった事を通知します。

 

4-1.サンプルスクリプトにエラー有、無しの機能を追加する。

#旧バックアップファイルの削除
cd /volume1/web/mysql_backup/
rm *.sql

#job-errのリセット
job-err=0

#oldiesのバックアップ
/usr/local/mariadb10/bin/mysqldump --single-transaction --databases oldies --user=root --password=Take01kazu > /volume1/web/mysql_backup/out_oldies.sql
if [ $? = 0 ]; then
 job1=0
else
 job1=$? job-err=1
fi
#ec01のバックアップ
/usr/local/mariadb10/bin/mysqldump --single-transaction --databases ec01 --user=root --password=Take01kazu > /volume1/web/mysql_backup/out_ec01.sql
if [ $? = 0 ]; then
  job2=0
else
 job2=$? job-err=1
fi
#日付及びバックアップ結果の出力
date_stamp=`date '+%Y-%m-%d %H:%M'`
echo "#"$date_stamp
echo '  oldies=' ${job1} ',ec01=' ${job2} 

#終了処理(エラーがある場合は1でリターン)
if [ ${job-err} = 1 ]; then
  exit 1
else
  exit 0
fi

※1.上記はMariaDB10にあるoldiesとec01をmysqldumpでダンプしています。

※2.jobを実行した後にエラーがあったか否かを判断して変数にセットしています。

※3.job1又はJob2にエラーがあった場合はjob-errがセットさせるのでexit 1で終了させ、タスクスケジューラにエラーがあった事を通知しています。

以上で、エラーがあった時だけ、メールが送られる仕組みが出来上がりました。

尚、メールは『タスク スケジューラは、予定されているタスクを完了しました。』という件名で、エラー内容を含めて送信されます。

 

5.バックアップデータのリストア

­ ­メモ

上記のスクリプトはMariaDBに入っている特定DBをSQLファイルでダンプしただけです。

WordPressは上記のDBとWeb直下にあるフォルダから構成されています。

よって上記スケジューラが走った後で、下記の何れかのバックアップを実行する必要があります。

 ­無償クラウド(Google Drive)へのバックアップとリストア

 ­rsyncサーバへのバックアップとリストア

これで特定時点のDBダンプとWeb直下にあるフォルダが履歴を持ってバックアップされる様になります。

よってWordPressのDBを過去に戻す手順は下記になります。

Hyper Backupから、過去の特定時点の

・Web直下にあるフォルダ

・MariaDBのダンプデータ

をリストアします。

­ ­Web直下にあるフォルダのリストア時の注意点

リストア対象のフォルダは戻す前にリネーム又は削除して下さい。

理由は現在のディスクに新規に追加したプラグインがある場合、これはバックアップデータには無い為、上書きもされずにそのまま残っています。

よってリストア対象のフォルダが空でないと、正確に過去の時点に戻る事ができません。

MariaDBのダンプデータデータはSQLファイルですのでリストアはphpMyAdminでインポートします。

①phpMyAdminを起動してください。

 

②インポートタブを開いてください。

 

③インポートするSQLファイルを指定し、インポートを実行します。

上記のSQLファイルは、当該DBがある場合でも、ない場合でも項番3でバックアップしたSQLデータで内容が更新されます。