テックブログ

【phpMyAdmin】データベースのバックアップはこまめに取っておこう【MySQL】

2017年12月28日

どーも、「大谷翔平(野球)」「羽生結弦(スケート)」「山﨑賢人(俳優)」と同い年のヨシダ(凡人)です。今年最後の投稿になりそうです。来年もどんどんブログをあげていくので、宜しくお願い致します。

よく、「データが改ざんされて、復旧できない…」や「操作ミスで、必要なデータの削除、上書きをしてしまった。どうしよう…」等の事態がありますが、このようなことが発生してもデータをバックアップをしていれば、インポートをするだけですぐに復旧できます。

しかし、なぜかバックアップをとるという作業が面倒くさいのか、定期的にバックアップ作業をしている人が少ないです。もちろん攻撃者からデータを守るためのセキュリティ対策というのは大事ですが、もしもの事態に備えてバックアップをとるということの方が大事です。

とういうわけで、今回はデータベース(MySQL)のデータをWebブラウザから管理できる「phpMyAdmin」の使い方を解説したいと思います。

 

phpMyAdminとは

phpMyAdminとはMySQLデータベースを使うためのインターフェースが備わったWebアプリケーションで、その名の通り、phpで実装されています。MySQLは世界でもっとも普及されているオープンソースのデータベースであり、例えば、WordPressのデータベースはこれを使用しています。

MySQLはコマンドで操作(SQL文を記述)するのが基本になりますが、phpMyAdminを使用することによって簡単にWebブラウザから様々な操作が可能になります。
主にできることは「データベースの作成、編集、削除」「テーブルの作成、編集、削除」「カラムの作成、編集、削除」「インデックスの作成、編集、削除」「データベース内、テーブル内でのデータの挿入、編集、削除、ソート、検索」になります。また、ユーザが任意のSQL文を記述して実行することもできます。

しかし、phpMyAdminはWebサーバに設置するため、容易にアクセスされてしまう危険性がある。
また、有名な管理ツールであるため攻撃の対象とされやすい弱点もある。

そのため、最新のバージョンに更新、厳重なパスワード管理、IPSやWebアプリケーションファイアーウォールを設置する等の対策が必要になってきます。

 

phpMyAdminのダウンロード

こちらhttps://www.phpmyadmin.net/)のサイト右上にある「Download」からダウンロードします。
※2017年12月27日現在の最新バージョンは4.7.7です。

phpMyAdmin公式サイトのトップページ。「Bringing MySQL to the web」の見出しと、「Download 4.7.7」ボタンが赤枠で強調表示されている
「phpMyAdmin-4.7.7-all-languages.zip」を解凍したら、任意の場所に保存しておいて下さい。ダウンロードは以上で完了です。

なおダウンロード開始と同時に次のような画面が表示されます。開発元に寄付をされる場合は「Donate to phpMyAdmin」をクリックして下さい。行わない場合は「Close」をクリックして下さい。
phpMyAdmin公式サイトの「Thank you for downloading phpMyAdmin」ダイアログ。ダウンロード完了メッセージとSHA256ハッシュ値による検証方法が表示されている

 

phpMyAdminのインストール

続いてインストールを行います。phpMyAdminはPHPを使って記述されたスクリプトですので、ダウンロードして解凍したファイルをブラウザ経由でアクセスすることができるApacheのドキュメントルート内に配置してください。

例えば、僕のWordPressで作ったサイトでは、こちら(https://www.yoshidamasaaki.com/phpMyAdmin-4.7.7-all-languages/)にアクセスした時に、phpMyAdminの管理画面が表示できるように、scpコマンドを使用してローカルからリモート先にファイルを/opt/bitnami/apps/wordpress/htdocs以下に配置してみました。

scpは、sshを使ってネットワーク・ホスト間でファイルを安全にコピーするためのコマンドです。
なお、このままでも構いませんが、ディレクトリ名が長いので「phpmyadmin」のように変更しても問題ありません。

ターミナル画面。「scp」コマンドでphpMyAdmin-4.7.7-all-languagesをEC2インスタンスにアップロードしている様子。各ファイルの転送進捗(100%)と速度が表示されている

 

phpMyAdminへのログイン

先ほどファイルを設置したページ(例:https://www.yoshidamasaaki.com/phpMyAdmin-4.7.7-all-languages/)へアクセスして、ユーザー名とパスワードにMySQLで作成済のユーザー名とパスワードを入力します。
ブラウザに表示されたphpMyAdminのログインページ。「phpMyAdminへようこそ」の見出しと、言語選択、ユーザ名・パスワードの入力欄が表示されている
root権限で入らないと、権限の問題でデータベースを作成したりできません。

bitnamiを使用の方は、rootのパスワードはアプリケーションと一緒になっております。ユーザー名とパウワードを入力して「実行」をクリックすると、phpMyAdminへログインできます。ログアウトするにはphpMyAdminの画面左上に表示されているアイコンの中で左から二番目のドアのアイコンをクリックして下さい。
phpMyAdminの管理画面。サーバー「localhost」への接続後の画面で、データベース一覧、サーバー情報、ウェブサーバー情報、phpMyAdmin情報が表示され、下部に設定に関する警告メッセージが出ている

 

phpMyAdminの設定

上図を見てもらうとわかるのですが、下の方に「phpMyAdmin 環境保管領域が完全に設定されていないため、いくつかの拡張機能が無効になっています。」と「設定ファイルに、暗号化 (blowfish_secret) 用の非公開パスフレーズの設定を必要とするようになりました。」というエラーが出ています。
これらについて、適切に設定していきます。

まずは、暗号化 (blowfish_secret) 用の非公開パスフレーズの設定についてですが、対処方法としてconfig.inc.phpファイルを作成し設定を追加していきます。phpMyAdminをインストールしたディレクトリから、「config.sample.inc.php」をコピーして、名前を「config.inc.php」に変更して下さい。

ターミナル画面。「ls」コマンドでphpMyAdminディレクトリ内のファイル一覧を表示し、「config.inc.php」が赤枠で強調表示されている

config.inc.phpファイルの中で「blowfish_secret」という項目に値を設定する必要があります。ファイルの先頭付近に次のような記述があるので、空欄になっているところに、任意の32文字以上の文字列を入力して下さい。
ターミナル画面。phpMyAdminの「config.inc.php」ファイルの内容。「blowfish_secret」の設定行が赤枠で強調表示されている
入力したら保存(esc+:wq)して閉じてください。

次に、環境保管領域の設定についてですが、設定の保存場所となるデータベースをMySQLに作成してから、設定ファイルに必要な情報を設定します。最初に設定の保存場所となるデータベースを作成します。

phpMyAdminをインストールしたディレクトリの中の「sql」ディレクトリの中に作成用のスクリプトである「create_tables.sql」を使います。phpMyAdminの画面上部に表示されている「インポート」をクリックして下さい。
phpMyAdminの管理画面。上部メニューの「インポート」タブが赤枠で強調表示されている
File to importの中にある「ファイルを選択」をクリックし、sqlディレクトリの中に用意されている「create_tables.sql」を選択して下さい。その他、Partial importなどの設定はデフォルトのままでいいです。選択したら、実行をクリックしてください。
phpMyAdminの「インポート」画面。「create_tables.sql」ファイルが選択された状態で、フォーマットやオプション設定項目、下部の「実行」ボタンが赤枠で強調表示されている
実行されると、「phpMyAdmin」という名前のデータベースが作成されたのを確認してください。
phpMyAdminの管理画面。「create_tables.sql」のインポートが成功し、21個のクエリが実行された結果一覧が表示され、左側のデータベース一覧に「phpmyadmin」が赤枠で強調表示されている
続いて先ほどの「config.inc.php」ファイルをviコマンドで編集していきます。「/* Storage detabase and tables */」以下にある「//」でコメントアウトされている「// $cfg[‘Servers’][$i][‘XXX’] = ‘XXX’;」の「//」を全て削除して下さい。
ターミナル画面。「config.inc.php」の設定ストレージ用コメントアウトが解除された部分。pmadbやbookmarktableなど各種テーブル名の設定行が表示されている
削除したら保存(esc+:wq)して閉じてください。
ターミナル画面。「config.inc.php」の設定内容。pmadbや各種テーブル名の設定行がすべて表示され、下部にvimの保存終了コマンド「:wq」が入力されている
これで完了です。エラーが表示されなくなったのを確認してください。

 

MySQLのバックアップ

phpMyAdminを使ってMySQLのデータをバックアップする方法を解説します。データベースやテーブル単位でデータをエクスポートすることができ、またエクスポートしたデータをインポートすることが可能です。まずは、データベースをエクスポートする方法について確認します。画面上部にある「エクスポート」メニューをクリックして下さい。
phpMyAdminの「エクスポート」画面。上部メニューの「エクスポート」タブが赤枠で強調表示され、エクスポート方法やフォーマットの設定項目が並んでいる
「Export method」はデフォルトで「簡易 – 最小限のオプションだけ表示」がチェックされていますので「詳細 – 可能なオプションを全て表示」の方をチェックして下さい。すると細かい設定可能な項目がいくつか表示されますがここでは対象となるデータベースの選択だけを行ないます。全てのデータベースをバックアップしたい場合は全選択を行なって下さい。特定のデータベースをエクスポートしたい場合には対象となるデータベースをクリックして選択して下さい。(Ctrlキーを押しながらクリックすることで複数同時に選択できます)。
phpMyAdminの「エクスポート」詳細設定画面。「詳細 - 可能なオプションをすべて表示」が赤枠で選択され、データベース一覧や出力形式の設定項目が表示されている
「フォーマット」はデフォルトの「SQL」を選択し、それ以外の設定についてもデフォルトのままで問題ありません。画面一番最後に表示されている「実行」ボタンを押すとエクスポートが開始されます。容量によっては時間がかかったりもします。
phpMyAdminの「エクスポート」設定画面下部。作成するクエリの最大長やエンコーディング設定と、「実行」ボタンが赤枠で強調表示され、下部に「localhost.sql」のダウンロード表示がある
次に、MySQLのテーブル単位及び行単位でデータをエクスポートする方法について解説します。画面上部にある「データベース」メニューをクリックすると、データベースの管理画面が表示されます。ここではデータベースを作成したり、削除したりすることもできます。
phpMyAdminの「データベース」画面。上部メニューの「データベース」タブが赤枠で強調表示され、「tst」という名前でデータベースを作成する入力欄と既存データベース一覧が表示されている
データベースリストの中からエクスポートしたいテーブルが含まれているデータベース名をクリックして下さい。すると、選択したデータベースのテーブル管理画面が表示されます。
phpMyAdminの「bitnami_wordpress」データベースの構造画面。wp_commentmetaやwp_posts、wp_usersなど12個のテーブル一覧が行数・データ型・サイズとともに表示されている
あとは、先ほどと同じく「エクスポート」メニューから対象となるテーブルの選択だけ行い「実行」します。
phpMyAdminの「bitnami_wordpress」データベースのエクスポート画面。詳細オプション表示で、wp_linksやwp_posts、wp_usersなど各テーブルがすべてチェックされた状態で表示されている
最後に、データを復旧するためにエクスポートしたファイルをインポートする方法を解説します。インポートに関してもデータベース単位、テーブル単位、行単位、などで行なうことができます。先ほど同様、「データベース」メニューから対象となるテーブルが含まれているデータベース名をクリックして下さい。選択したデータベースのテーブル管理画面が表示されたら、「インポート」メニューをクリックして、インポートするファイルを選択します。
phpMyAdminのデータベース「tst」へのインポート画面。「tst2.sql」ファイルが選択された状態で、上部「インポート」タブとファイル選択欄が赤枠で強調表示されている
「フォーマット」についてはインポートするファイルのフォーマットに合わせて選択して下さい。今回はデフォルトの「SQL」のままです。その他の設定についてはデフォルトのままでいいので、画面一番最後に表示されている「実行」ボタンを押せば完了です。

 

最後に

phpMyAdminは他にも、たくさんの機能がありますが、説明しきれないので省略させていただきます。
このアプリケーションを使えば、MySQLからコマンドベースの操作(CUI)をしなくても、簡単にWebブラウザから分かりやすく操作(Web UI)できるようになりますので、サイトを運営している方はぜひ導入してみてください。

ただ、冒頭でも述べましたが、Webから容易にアクセスできますし、有名な管理ツールであるため攻撃の対象とされやすい弱点もあります。
そのため、最新のバージョンに更新、厳重なパスワード管理、IPSやWebアプリケーションファイアーウォールを設置する等の対策が必要になりますので、対策についてはお気軽にお問い合わせしてください。

ありがとうございました。