HOME  /Synology
 /mysqldumpでMySQLを定期的にバックアップする方法
2019年05月30日

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

定期的にバックアップタスクを実行する為には下記のタスクスケジューラの機能を利用します。

この中に定期的に動くバックアップタスクを作成します。

バックアップタスクの中で指定したシェルスクリプトを使ってMySQLのDBをバックアップします。

1.全体の流れと基本サンプル

下記サンプルは最低限の事だけを記述しています。全体の動きを理解して下さい。

1-1.タスクスケジューラの中に下記コマンドを登録します。

sh /volume1/web/mysql_backup/mysql.sh>>/volume1/web/mysql_backup/mysql_backup.log

①sh /volume1/web/mysql_backup/mysql.sh
これは指定ディレクトリの中にある「mysql.sh(シェルスクリプト)」のを実行しなさい。という意味です。

②>>/volume1/web/mysql_backup/mysql_backup.log
これはログを指定ディレクトリの中の「mysql_backup.log(ログファイル)」に書き込みなさいという意味です。

 

1-2.シェルスクリプトに記述されている内容

シェルスクリプトの記述方法はDSMのバージョンによって異なります。

下記サンプルはDSM6系でMariaDB10のDBをバックアップする時のシェルスクリプト例です。

#job1(oldies)のバックアップ
/usr/local/mariadb10/bin/mysqldump --single-transaction --databases oldies --user=×× --password=×× > /volume1/web/mysql_backup/out_oldies.sql

#バックアップログの書き出し
echo 'oldies=' $?

mysqldumpはmysqlをバックアップするコマンドです。

②ダンプした結果は「out_oldies.sql」ファイルとして書き出されます。

③mysqldumpの実行結果(エラーコード)は「$?」に出力されます。

 

1-3.mysql_backup.logに書かれたログの例

oldies= 0

 

基本の流れは上記になりますが、下記に詳細な内容を解説していきます。

2.具体的なバックアップタスクの作成方法

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

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

 

 

②Webフォルダを選択して「作成→新規フォルダの作成」で「mysql_backup」フォルダを作成してください。

フォルダ名は任意ですが大文字小文字は識別しますので小文字が推奨です。

 このdb_backフォルダの中に

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

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

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

が入ります。

2.バックアップスクリプトを作成する。

「mysql_backup.sh」のファイル名でmysqldumpを使ったシェルスクリプトを作成します。

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

 

2-1.mysqldumpの基本形

mysqldump オプション  > /フォルダ名/ファイル名.sql

※1.ダンプデータの保存先、ファイル名は任意です。

 

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系でMaraiDB5にあるoldiesDBをダンプする場合は下記になります。

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

例②DSMのバージョンが6系で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.サンプルスクリプト 

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

#job_errのリセット
job_err=false
#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=true
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=true
fi
#日付及びバックアップ結果の出力
date_stamp=`date '+%Y-%m-%d %H:%M'`
echo "#"$date_stamp
echo '  oldies=' ${job1} ',ec01=' ${job2} 

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

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

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

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

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

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

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

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

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

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

スペースを入れてはいけない所(数値の代入)や、必要な所(if文)は「シェルスクリプトの書き方」を調べてください。

〇の例 job_err=true if [ $job_err = true ]; then

×の例 job_err = true if [$job_err=true]; then

③シェルスクリプトの変数名には「ハイフン」は使えません。「アンダースコア」を使ってください。

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

 

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

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

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

 

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

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

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

 

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

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

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

­ ­メモ

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

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

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

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

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

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

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

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

 

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

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

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

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

 

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

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

­ ­メモ

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

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

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

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

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

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

 

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

­ ­メモ

上記のスクリプトは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データで内容が更新されます。