WordPressは「PHPプログラム」と、MariaDBの中にある「DB」から構成されます。
一方、バックアップソフトの「Hyper Backup」は過去の「特定PHPプログラム」は戻す事が出来ますが「DB」は「MariaDB全体」しか戻せません。
そこで「MariaDBの中の1DBだけを過去に戻す」事を実現する為にはMariaDBの「特定DB」だけを別途バックアップする必要があり、これを行うのがコントロールパネルの中にある「タスクスケジューラ」になります。
下記の順番で説明していきます。
1.事前準備
1)バックアップフォルダを作成します。
このフォルダは「スクリプト」「バックアップデータ」及び「ログ」を入れる器です。
①「File Station」を開きます。
②「Web」フォルダを選択して「作成→フォルダの作成」で「mysql_backup」フォルダを作成します。
■「mysql_backup」のフォルダ名は任意ですが大文字小文字は識別しますので「小文字が推奨」です。
2)スクリプトを作成する
①下記のプログラムをEmEditor等のテキストエディタにコピーし編集します。
メモ帳は改行コードが<CR><LF>なので利用できません。
#!/bin/sh #古い旧バックアップファイルがあった場合は削除 cd /volume1/web/mysql_backup/ if [ -e *.sql ]; then rm *.sql fi #変数job_errのリセット job_err=false #JOB1(test01のバックアップ) /usr/local/mariadb10/bin/mysqldump --single-transaction --databases test01 --user=root --password=Password > /volume1/web/mysql_backup/out_test01.sql if [ $? = 0 ]; then job1=0 else job1=$? job_err=true fi #日時とダンプ結果のログ出力 date_stamp=`date '+%Y-%m-%d %H:%M'` #日時の取得 echo '#'$date_stamp #日時の出力 echo ' test01=' ${job1} #ダンプ結果の出力 #ダンプにエラーがあった場合はエラーで戻る if [ $job_err = true ]; then exit 1 else exit 0 fi
■上記は「test01」というDBをバックアップする例です。
下記の解説を参考に修正して下さい。
下記は「EmEditor」の行番号で解説します。
1行目
・「#!/bin/sh」は記述しなくても動きます。
2~6行目
・「mysql_backup」フォルダ配下にある前回のバックアップデータを総て削除しています。
・古いバックアップデータが残る事によるミスを防止します。
7~8行目
・ダンプエラーを判断する為の変数です。
10~16行目
・1つのDBをダンプするコマンド群です。
・11行目
--databases test01 --user=root --password=Password > /volume1/web/mysql_backup/out_test01.sql
上記の「test01」をにバックアップしたいDB名、「–user=」と「–password=」にMariaDBにログインするIDとパスワードに変更してください。
・12行目の「$?」の中11行目を実行した結果のステータスが入ります。
・複数のDBをダンプする場合は10~16行目をコピーし、job2、job3等で追加します。
18~20行目
・「#2022-09-04 09:36」の様なバックアップ日時を出力します。
21行目
・「test01= 0」の様にjob1の結果を出力します。
・複数のジョブを定義した時は下記の様にこの行を修正します。
echo ' test01=' ${job1}',test02=' ${job2}',test03='${job3}',test04='${job4}
23~28行目
・ダンプにエラーがあった場合はエラーでスクリプトを終了させます。
<参考情報>
1.ダウンププログラムの場所
プログラム「mysqldump」は「DSMのバージョン」により場所が異なります。
MariaDB10 | MariaDB5 | |
DSM5.2 | - | /usr/syno/mysql/bin/mysqldump |
DSM6.0 | - | /usr/bin/mysqldump |
DSM6.1以降 | /usr/local/mariadb10/bin/mysqldump | /usr/bin/mysqldump |
DSM7 | /usr/local/mariadb10/bin/mysqldump | ー |
※プログラムの場所の探し方はSynology NASをSSHでアクセスする方法を参照して下さい。
2.mysqldumpのオプションは下記になります。
オプション | 説明 |
–single-transaction | このオプションはデータのダンプ前に、トランザクション分離モードをREPEATABLE READに設定し、START TRANSACTION SQL ステートメントをサーバーに送信します。
よってアプリケーションをブロックすることなく、START TRANSACTIONが発行された時点のデータベースの一貫した状態をダンプします。 |
–databases | ダンプを取るDB名です。 |
–user= | phpMyAdminのログインユーザ名を記述します。 |
–password= | 上記ユーザのパスワードを記述します。 |
②修正が完了したら下記の方法で保存してください。※重要
■スクリプトファイル「mysql.sh」として保存します。
例)mysql.sh
■改行コードは「LFのみ」を選択して「保存」してください。
■作成した「mysql.sh」は「mysql_backup」に保存します。
以上でDB単位でバックアップを取る準備が出来上がりました。
2.タスクスケジューラの作成と実行
1)コントロールパネルから下記のタスクスケジューラを起動します。
サービスの所にある下記アイコンです。
2)タスクの作成を実行します。
■上記画面の「作成」→「予約タスク」→「ユーザ指定のスクリプト」を実行します。
3)タスクの設定を行います。
①「全般」タブの設定
■「タスク」の所は判り易いタスクの名を入れて下さい
ex)DB-Backup
■「ユーザ」の所は「root」を選択してください。
上記の「root」とは、Synologyのシステム構築IDです。
■「タスク設定タブ」をクリックします。
②「タスク設定」タブの設定
■『Eメールで詳細な実行情報を送信』にチェックを入れると、無条件に指定したメールに実行結果が通知されます。
■『スクリプトが異常終了した場合のみ詳細な実行情報を送信』にチェックを入れるとエラーがあった時だけメールが送られるようになります。
・スクリプトのデバックの時:チェックなし
・本番時:チェック
■『ユーザ指定のスクリプト』の所に下記をコピーして貼り付けて下さい。
/volume1/web/mysql_backup/mysql.sh>>/volume1/web/mysql_backup/mysql_backup.log
・「xx/mysql_backup.sh」は、実行するシェルスクリプトです。
・「>>xx/mysql_log.txt」は、実行結果のログを記載するログファイル名です。
メモ
「>>」は追記「>」は上書きになります。
■「スケジュールタブ」をクリックします。
③「スケジュール」タブの設定
■スケジュール設定のポイントはHyper Backupの「ローカル」や「他のSynologyNAS」でシステム全体をバックアップする直前にDBをバックアップする事です。
この設定を正しく行わないとその日のDBが取得できません。
④総ての入力が終わったら『OK』を挿入しジョブを登録します。
警告メッセージが表示されますが「OK」を挿入するとタスク一覧画面にジョブが追加されます。
4)マニュアルで「タスク」を実行させます
■上記の実行ボタンを挿入して、正常にバックアップデータとログが書き込まれるか?を確認してください。
■実行後のWebDAV接続で「mysql_backup」フォルダの中を確認します。
ログファイルとSQLファイルが追加されていたら成功です。
・「mysl_backup.log」は、メモ帳でなくEmEditorで開いてください。
・また「out_XX.sql」ファイルもEmEditorで開くと、中身が見れます。
以上で定期的なMySQLDBのバックアップが完了しました。
3.戻し方の事例
ここでは「test01」というWordPressを過去の時点に戻すケースで解説します。
戻すデータは下記になります。
①web直下にある「test01」フォルダ
②mysql_backupフォルダの中にある「out_test01.sql」ファイル
1.バックアップデータから戻す前にやる事
①「test01フォルダ」をリネームします
test01→_test01
理由
「Hyper Backup」のリストアは「上書き」です。
よって障害がある「プラグイン」や「ファイル」がバックアップデータに無い場合は、現在のファイルがそのまま残ります。
よって障害がそのまま残る可能性があります。
②「mysql_backup」フォルダの当該SQLファイルをリネームします。
out_test01.sql→_out_test01.sql
理由
過去のSQLファイルが戻った事を確認する為です。
2.「Hyper Backup」からバックアップデータを戻します。
1)下記アイコンをクリックします。
2)下図が表示されます
■戻し方は①と②があります。ここでは①を利用します。
■①を実行すると画面の下の方に下記が表示されます。
上記から戻す日時を選択します。
■webフォルダから戻したい「test01」フォルダを選択して「復元」ボタンを挿入します。
これで過去の「test01プログラム」が戻りました。
■「mysql_backup」フォルダを開いて、戻したい「out_test01.sql」を選択して「復元」ボタンを挿入します。
これで過去の「out_test01.sql」ファイルが戻りました。
3.DBを復元します
①phpMyAdminを起動してください。
②今まで使っていたDBの名前を変更する
対象のDBを選択すると下記メニュが表示されます。
■「操作」メニュをクリックします。
③データベース名の変更を実行する
■新しいDB名(例:_test01)を入力して「実行」ボタンを挿入します。
これでDB名が変更されました。
④左上にある「サーバ」選択して型、インポートタブを開いてください。
⑤インポートするSQLファイル「out_test01.sql」を指定し、インポートを実行します。
インポートでエラーになった時は下記ドキュメントを見て下さい。
phpMyAdminでSQLファイルをインポートする時のエラーと対策
メモ
「mysqldump」でダンプしたSQLファイルのの先頭に下記コマンドが入っています。
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `db名` /*!40100 DEFAULT CHARACTER SET utf8 */; USE `db名`;
上記は
①指定したDBが無い場合は、新しくDBを作ります。
②またこれから実行するSQLは「db名」に書き込みます。
を意味します。
よって、DBを選択しなくて新規にDBが作られて過去のDBが復元されます。
以上で「test01」のWordPressを過去の時点に戻す事ができました。
WordPareeno「test01」を起動して確認して下さい。
尚、障害を起こした「_test01」フォルダとその時のDBがありますで、ジックリ原因を解析する事ができます。
但し「_test01」でWordpressを起動させる場合は「wp-config.php」と「.htaccess」を「test01」から「_test01」に変更する必要があります。