【これだけ】リモートのMySQLに接続する方法【現役エンジニアが解説】

PROGRAM

リモートのMySQLに接続する方法について、簡単に解説していきます。

直接リモートのMySQLに接続する方法

直接接続する方法は最も簡単です。いつもローカルのMySQLに接続する時と同じ方法を使ってアクセスします。

mysql -h {host} -u {user} -p

コマンドではローカルの場合にはhオプションを指定しませんが、リモートのMySQLを使用する場合は明示する必要があります。

php等のアプリケーションからPDOクラスを使ってアクセスする場合はローカルでもIPアドレスを指定されていると思いますので、その接続先を変更するだけでOKです。

「Can’t connect to MySQL」や「Access dined・・・」と表示される場合は、リモートのMySQLまでのルーティング設定がされていないか、権限が付与されていない可能性があります。

FEDERATEDエンジンを使ってリモートのMySQLに接続する方法

FERERATEDエンジンを使うと、お手元のMySQLサーバにリモートのMySQLをマウントすることができます。

ローカルのMySQLサーバのmy.cnfを以下の一文を追記しておきましょう。

federated = 1

次に、リモートのMySQLと全く同じ定義で、リモートで使用したいテーブルを作成します。

CREATE TABLE users (
    user_id INT NOT NULL AUTO_INCREMENT,
    NAME VARCHAR(50) NOT NULL,
    PRIMARY KEY (user_id),
)
ENGINE=FEDERATED
CONNECTION='mysql://{user}:${password}@{host}/{database}/users';

例えば、リモートのusersテーブルを参照する場合は、上記のようなCREATE文を流すことになります。

これで、あたかもローカルのMySQLにリモートのMySQLがあるかのようにリモートのデータベースを扱うことができるようになります。

実際に使ってみて出した結論

ユーザ様の環境でいずれの方法も使う機会がありましたが、自分に選択肢がある場合には断然直接接続する方法をおすすめします。

理由としては、FEDERATEDエンジンではリモートのMySQLのインデックスが使われるようですが、このケースでは使われず、SELECTにかなりの時間がかかってしまいました。

したがって、セッションが分かれてしまうことに特に何も問題がないようであれば、直接接続で接続を二つに分けてローカルとリモートを使い分けることが最善の選択と言えるでしょう。