頑張らない!でも諦めない!必死にならずにええかげん

phpMyAdminを利用したMySQL同期とWM3500Rポート解放

      2014/11/22

本投稿においては、phpMyAdminを利用したMySQL同期について投稿します。
前回から続きで、レンタルサーバ環境へのphpMyAdminの設置まで完了しましたので、
私の本来の目的であった同期を行います。

はじめに

最初はphpMyAdminからレプリケーションを利用して、
リアルタイムに同期したいという目的がありましたが、
レンタルサーバ側にphpMyAdminをインストールしたところ、
レプリケーションが未実装なMySQLであったことが分かりました。
急遽、同期機能で代用することとしました。

レンタルサーバ側でどのような設定が有効であるかを確認するには、
phpMyAdminの[状態]タブから[レプリケーション]で確認ができます。

sync-mysql-by-phpmyadmin_st01

01_レプリケーション設定確認

sync-mysql-by-phpmyadmin_st02

02_レプリケーション設定情報

このレンタルサーバ上では「(未実装)」と表示されています。

これまでの投稿経緯は以下のようになっています。

  1. Webサーバ(Apache)インストール・導入設定
  2. PHPインストール・導入設定
  3. MySQLインストール・導入設定
  4. WordPressインストール・導入設定
  5. ローカル環境へのphpMyAdminの設置
  6. レンタルサーバ環境へのphpMyAdminの設置
  7. phpMyAdminを利用したMySQL同期設定(本投稿)

今回想定している同期の環境は、
これまでにインストールを行ってきた、
レンタルサーバーの公開ブログ(ここ)を
ローカル環境のMySQLに対して同期バックアップを取るという想定です。

本来ならここはリアルタイムで同期が可能な、
レプリケーションでバックアップしたいのですが、
レンタルサーバの負荷軽減を目的とした対応と思われる、
無効化であると思いますので今回はこの方法で行います。

注)同期は実行を行うたびにデータが直接ローカルに更新される為、
phpMyAdminのエクスポートインポートの手間が省けるだけで、
エクスポートのようにある時点のバックアップが残らないというデメリットがあります。
各自利用目的に応じて利用して頂けたらと思います。

手順としては以下の作業を行っていくことになります。

設定手順

事前準備

同期にてデータを受け取る側のデータベース名は、
同期元のデータベース名と同一名になります。
今回はwordpressにて利用するデータベースの
バックアップを目的としていますので、
同期先のwordpress設定も同期元のデータベース設定と、
同一にする必要があります。

wordpressのディレクトリ構成も同一とする必要があります。

またwordpressは内部的にURLを絶対パスで管理しているため、
同期先であるローカル環境でもリンクなどは、
すべて元URLにて取り込まれることに注意が必要です。

ただしこれはレンタルサーバの引っ越しなどで、
引越先のサーバにDNSを切り替える場合には、
特に問題になることはありません。

データベースの同期に合わせてwordPressのインストールディレクトリなどは、
別途FTP転送などで、同期先も同じように更新を行っておく必要があります。

ローカル環境のMySQLポートの解放

ローカル環境のポート解放については、
各自のインターネット接続環境に依存します。

自宅のルータなどのポートマッピング等に読み替えて頂ければと思います。
私の場合、WiMAXルータ AtermWM3500R に対して設定を行います。

投稿と関係ありませんが、WiMaxは結構安定していて便利です。
携帯のLTEでテザリング!という思惑も最近はありますが、
どうも公称されているほど速度もでず、安定性も悪い印象です。
携帯のバッテリの問題もありますし。

その為、現時点ではWiMaxが手放せない状況です^^;
但し、新幹線など高速移動を伴う場合には、
すぐにエリア外に出てしまうなどの不便さもありますが、
通常利用においては非常に安定して通信が可能です。
古い製品ですがクレードルで有線LANが使えるのも重宝してます。

NEC Aterm WM3500Rログイン

WiMAXルータのローカルIPアドレス(192.168.0.1など)に
Webブラウザからアクセスし、ユーザー名・パスワードを入力して、
クイック設定Web画面を表示します。

sync-mysql-by-phpmyadmin_st03

03_ルータ設定画面

パケットフィルタ設定

ナビゲーションの[詳細設定]-[パケットフィルタ設定]をクリックし、
[追加]から設定を追加します。

sync-mysql-by-phpmyadmin_st04

04_パケットフィルタ設定

本設定は、ポート3306に対して外部からのアクセスを許可する設定です。
ポート3306とはMySQLがデフォルトで利用するポート番号です。

sync-mysql-by-phpmyadmin_st05

05_パケットフィルタ設定内容

ポートマッピング設定

ナビゲーションの[詳細設定]-[ポートマッピング設定]をクリックし、
[追加]から設定を追加します。

sync-mysql-by-phpmyadmin_st06

06_ポートマッピング設定

追加を行うと一覧に表示されます。

sync-mysql-by-phpmyadmin_st07

07_ポートマッピング設定内容

本設定は、ポート3306に対して外部からのアクセスがあった場合に、
ローカルIPアドレス192.168.0.2に対して、パケットを送る設定です。
192.168.0.2はローカル環境でMySQLがインストールされており、
wordpressブログ用にデータベースを設置したホストです。

これで外部からMySQLに関するパケットが、
192.168.0.2に対して届くようになりました。
次は、外部からアクセスを行う為にDNS設定を行います。
グローバルIPの直接指定でも構いませんが、グローバルIPではIPが変更になった際に、
毎回変更する必要がある為、現在のIPをDDNSに登録するように、
DDNSクライアントを設定します。
※既にDNSサービスに対してAレコードの設定が終了しているものとします。

[rakuten]bookfan:10421700[/rakuten]

ローカル環境へのグローバルIPのDDNS登録

ここではレンタルサーバをGMOのサーバーとして紹介します。
同じくGMOのお名前.comのレンタルサーバをご利用の場合には、
以下のヘルプを参照してください。
ダイナミックDNSクライアントのダウンロードについて

DDNS設定の登録
DNSエントリの新規追加

[タスク]-[新規作成]をクリックし、タスクの追加ダイアログを表示します。

sync-mysql-by-phpmyadmin_st08

08_DDNSクライアント新規作成

DNSエントリの詳細設定

サブドメイン名の指定とドメインを入力し、
ドメインのユーザーIDとパスワードを入力します。

sync-mysql-by-phpmyadmin_st09

09_タスクの編集

DNSエントリの確認

登録したDNSエントリが表示されているかを確認し、
[実行]をクリックすると現在のグローバルIPが、
対象のDNS名に割り当てられます。

sync-mysql-by-phpmyadmin_st10

10_タスクの登録

これによって指定したドメイン名にて、
ルータモデムに対してアクセスが可能になります。
※但し、DNS名にてアクセスが可能になる為には、
最長で24時間程度がかかる場合があります。

同期実行前の注意事項

今回、wordpressブログのデータベースを対象として、
MySQLの同期を行いますが、
同期元のサーバー上wordpressにインストールされている
プラグイン、テーマなどに関しては極力同じものを、
同期先のローカル上wordpressに対しても
インストールされることをお勧めします。

まれにプラグインがそのプラグイン用として、
個別にテーブルを追加するような場合があり、
同期やエクスポートにて出力したデータのインポートに、
失敗しやすくなります(出力のオプションに依存しますが)

例)wp_tweet_urlsテーブルなどがデフォルトで存在しないテーブルです。

レンタルサーバ側のphpMyAdmin同期設定

ここまできてやっと、ローカル環境のMySQLが外部からアクセスが可能になります。
アクセスが可能になったローカル環境を、
サーバ側のphpMyAdminからアクセスを行って同期の実行を行います。

phpMyAdminへのログイン

phpMyAdminにログインを行い[同期]タブをクリックします。
ページサイズが小さい際には[その他]タブ内に集約されている場合があります。

sync-mysql-by-phpmyadmin_st11

11_phpMyAdmin同期

サーバー設定について

phpMyAdminのインストール時に行ったサーバー追加を
既に同期先であるMySQL(ローカル)に対しても設定が、
済んでいることとします。

sync-mysql-by-phpmyadmin_st12

12_phpMyAdminサーバ追加

ローカル側MySQLの状態

同期先であるMySQLにはデータベースが存在しており、
テーブルが存在していない状態であることを確認します。
※実際にはテーブルもデータも存在している場合でも、
データをすべて削除してから同期する設定が選択可能です。
ここでは同期をわかりやすくするためテーブルが存在していないこととしています。

sync-mysql-by-phpmyadmin_st13

13_ローカルDBの確認

同期設定画面の表示

phpMyAdminにログインを行い[同期]タブをクリックすると、
同期元と同期先をせっていする画面が表示されます。

sync-mysql-by-phpmyadmin_st14

14_同期設定画面

同期設定

サーバー側のデータベース指定(同期元)と、
先ほどDNS指定したローカル側のデータベース指定(同期先)をそれぞれ設定します。
設定を行ったら[実行する]をクリックします。

sync-mysql-by-phpmyadmin_st15

15_同期の設定

同期内容の確認

同期元と同期先それぞれの差分状態が表示されますので、
表示内容が自分が行った設定と相違がないことを確認し、
[データベースの同期]をクリックし処理を開始します。

sync-mysql-by-phpmyadmin_st16

16_同期内容の確認

[rakuten]book:16373495[/rakuten]

同期結果の確認

データの確認

MySQLワークベンチを開き、対象のデータベースに対して、
正しくデータが反映されているかを確認します。

sync-mysql-by-phpmyadmin_st17

17_ローカルDBの同期結果確認(ワークベンチ)

ローカル側のphpMyAdminで確認しても同様です。

sync-mysql-by-phpmyadmin_st18

18_ローカルDBの同期結果確認(phpMyAdmin)

同期自体に関しては以上で完了です。
しかしながら、wordpressは様々な部分で絶対パスのURLを保持しており、
このままの状態でwordpressで表示を行っても、
元のURLであるレンタルサーバ側の表示となってしまいます。

[rakuten]001:9784798111131[/rakuten]


設定テーブルのURL書き換え

サイト情報を管理しているテーブルのドメインをローカルに変更します。
内部データすべてのURLのドメインを変更しても構わないのですが、
取り急ぎローカル環境のテスト検証を目的として、
環境構築をしていますのでデータベースの内容の最小限の変更を行います。

wp_optionsテーブルデータの変更

option_name=’site_url’ データのURLをローカルドメインへ変更します。

変更前: http://algorhythnn.jp/blg/wp
変更後: http://(HOST).(DOMAIN)/blg/wp (またはlocalhostなど)

sync-mysql-by-phpmyadmin_st19

19_ローカルデータ変更(siteurl)

option_name=’home’ データのURLをローカルドメインへ変更します。

変更前: http://algorhythnn.jp/blg/
変更後: http://(HOST).(DOMAIN)/blg/ (またはlocalhostなど)

sync-mysql-by-phpmyadmin_st20

20_ローカルデータ変更(home)

この時点で表示を確認すると、以下のようになります。
一部、設定が違っている状態ですが、正しく移行されています。
但し、ローカル側の投稿内のURLなどに関しては、
ドメインの変更を行っていないので、同期元のURL指定のままになっています。

sync-mysql-by-phpmyadmin_st21

21_ローカルデータ確認(その他テーブル)

サーバー側(同期元)
sync-mysql-by-phpmyadmin_st22

22_ブログ表示(同期元)

ローカル側(同期先)
sync-mysql-by-phpmyadmin_st23

23_ブログ表示(同期先)

これによって、サーバー側で実際に投稿した内容を、
ローカル側の環境で表示の確認を行ったりする、
テストデータとして活用することができます。

実際に本番環境でCSSなどを触ってしまい、
体裁が崩れた状態を急いで復旧するといったことも、
事前にこうしてテストする環境があれば安心して修正ができると思います。

個人が運営するブログのレベルでこうした環境を持つのは、
少々やりすぎな感じもしますが、実際に仕事でやる場合には、
あって当然の環境なので、こうして構築を行ってみました。

[rakuten]001:9784774137278[/rakuten]


エクスポート・インポートによるデータ移行

同期設定によってデータベースの同期をとることは、
同期元からのプッシュによって1操作で完了する為、簡単に行うことができる反面、
ローカル側のMySQLを外部に公開しなければいけなかったり、
バックアップデータが残らなかったりといった面倒な面もあります。

通常、データの移行を行うには、
こうした同期よりもエクスポート・インポートを利用することの方が多いでしょう。
補足的に実際にエクスポートインポートを行う方法についても投稿しておきます。

エクスポート

同期元サーバからのエクスポート

エクスポート元サーバのphpMyAdminにログインし
[エクスポート]タブをクリックします。

sync-mysql-by-phpmyadmin_st24

24_phpMyAdminエクスポート

エクスポート方法の選択

エクスポート方法から[簡易]または[詳細]を選択し、
適宜目的に応じたエクスポート方法を設定します。
設定が終わったら[実行]をクリックします。

sync-mysql-by-phpmyadmin_st25

25_phpMyAdminエクスポート方法簡易

ファイルの保存

ブラウザからファイルの保存ダイアログが表示されますので、
ファイルを保存します。

sync-mysql-by-phpmyadmin_st26

26_phpMyAdminエクスポート方法詳細

インポート

同期先サーバでのインポート

インポート先サーバのphpMyAdminにログインし
[インポート]タブをクリックします。

sync-mysql-by-phpmyadmin_st27

27_エクスポート保存

インポートファイルの指定

先ほどエクスポートしたファイルを指定し、
[実行]をクリックします。

sync-mysql-by-phpmyadmin_st28

28_phpMyAdminインポート

インポート完了の確認

インポート完了のメッセージが表示されればインポート完了です。

sync-mysql-by-phpmyadmin_st29

29_phpMyAdminインポート完了

この本は結構わかりやすく説明されていて、
一冊あると重宝します。


私の場合、このインポートですが出力方法や取り込み方法などで、
sqlエラーがよく出ましてインポートに失敗することがよくありました。
エラー内容を見れば大体は分かるのですが、
出力時のオプションとの関係が少し分かりづらかった印象です。

今後、いろいろ試してどのようなSQLが出力されるのか、
他の出力形式ではどうかなど調べていきたいと思います。

[amazonjs asin=”4798034711″ locale=”JP” title=”オープンソース ブログ&ウェブサイト構築ソフト WordPressガイドブック Ver.3.X対応”]

*本ページ内に記載されされた各社ブランド、サービス名、商標、登録商標については、
各社ブランドのロゴや商標等に関する帰属についてをご確認ください


最後までお読みいただきありがとうございました。

アイキャッチ画像に利用させて頂いております、各社ブランドのロゴやシンボルに関しては、
各社ブランドのロゴや商標等に関する帰属についてをご確認頂けますようお願い致します。

AdMax Promotion

ブログ記事のご紹介
すべて展開 | すべて省略

Rakuten Promotion

ページ
すべて展開 | すべて省略

プロモーション(btm)

Google or AdMax Promotion (it)

 - MySQL, PHP, phpMyAdmin, 同期・シンク , , , , ,

  関連記事