MySQLを操作するには、サーバーにログインしてコマンドラインから操作しなければならない、ということはありません。パソコンにインストールしたグラフィックな管理ツールを使って、スマートに管理することも可能です。ここでは、そういったリモート接続に必要なスキルについてご紹介します。
MySQLのサービスの基本
MySQLは、オープンソースのデータベース管理システムの一つですが、通常はサーバーなど24時間稼働するコンピュータで実行されます。そして、そのサーバーのデータベースを利用するには、通常、サーバーで稼働するMySQLの常駐ソフトに接続して、SQLを実行します。これは、同じサーバー内で接続するケースの他に、ネットワークを経由して接続するケースもあります。
まずは、こういったMySQLのサービスの仕組みについて解説します。
MySQLは接続して利用するアプリ
MySQLに限らず、サーバー上でいろいろなサービスを提供しているプログラムは、常駐ソフトと呼ばれるタイプであり、人が直接操作はできません。しかし、サービスを提供するためには、常駐ソフトを通信しなければなりません。そのため常駐ソフトには、プログラム同士が通信する機能が用意されています。
なお、MySQLをインストールすると、サーバー用の常駐ソフトとクライアント用の人が操作するプログラムがインストールれます。このうち、データベースを管理するのは常駐ソフトの方です。そして、この常駐ソフトは、クライアント用のプログラムを介して操作できます。また、常駐ソフトには、プログラム言語から接続するための機能や、ネットワーク経由で接続する機能も用意されており、ネットワークを介してサーバーの外から接続して利用することも可能です。
ネットワークの基本、ホスト名とポート番号について
先ほど、MySQLのサーバー用プログラムをネットワーク経由で利用できると説明しましたが、ネットワークを介してサーバーの外からMySQLを利用するためには、ホスト名とポート番号を用います。MySQLをプログラム言語やphpMySQLなどの管理ツールから利用するには、ホスト名とポート番号を必ず指定するので、この仕組みも、ぜひ、理解してください。
なお、インターネットは、サーバーを検索する仕組みが世界標準として定められています。そして、その仕組みがDNSであり、DNSに登録されたサーバーには、ユニークなホスト名が割り振られます。つまり、正しく登録されたサーバーは必ずホスト名を持っており、そのホスト名で検索することでサーバーが特定でる仕組みです。
さらに、ネットワークを通じてサーバーにアクセスするには、ポート番号が使われます。なお、このポート番号とは、インターネットの通信で使われるサービスの種類を特定するために使われる番号です。例えば、Webブラウザでサーバーをアクセスするには、httpサービスのために決められたポート番号が使われます。そして、同じようにMySQLのサービスを利用する場合の番号も決められており、通常はその番号が使われます。
ポート番号は変更できる
先ほど、MySQLのポート番号が標準で決められた番号が使われると解説しましたが、これは、サーバーさえ特定できれば、誰でもMySQLのサーバーにアクセスできる、ということを意味します。そのため、もし管理者アカウントに簡単なパスワードが設定されていると、攻撃を受けて重要な情報が流出しかねません。
そのため、セキュリティ対策として、MySQLの標準のポート番号ではなく別の番号を設定できます。そして、この使用に合わせて、phpMyAdminなどのMySQLに接続するアプリでは、MySQLの標準ではないポート番号も設定できるように作られています。
MySQに接続するための設定
先ほど解説したように、MySQLの常駐ソフトに接続し、データベースを操作するためには、そのソフトが備えている接続機能を利用します。そして、ネットワークを介して接続するためには、先ほど解説したホスト名とポート番号、さらにMySQLを利用するためにアカウントとパスワードを設定します。
次から、MySQLのサーバーに接続するためのアプリを使う場合の設定について解説します。
コマンドで指定する
先ほども紹介しましたがMySQLをインストールすると、サーバー用の常駐ソフトムと、そのサーバーに接続して操作ができるクライアントプログラムがインストールされます。なお、このクライアントプログラムを利用するためには、Windowsならコマンドラインで、また、macOSやLinuxではターミナルを利用します。
このMySQLのクライアントプログラムでよく使われるのがmysqlです。なお、このコマンドには、多くのオプションがありますが、特定のオプションを使い、ホスト名、ポート番号、アカウント、パスワードなどを指定します。なお、オプションの中には省略できる項目もあり、全て設定する必要はありません。
MySQLのクライアントプログラムで接続する例
$ mysql -uuser -ppassword –host localhost –port3306
さらにmysqldumpなどの他のクライアントプログラムを利用する場合も、同じようにオプションで接続に必要な情報を設定します。詳しくは、クライアントコマンドのオプションを解説したマニュアルなどを参照してください。
MySQL :: MySQL 5.6 リファレンスマニュアル :: 4.5.1.1 mysql のオプション
アプリに設定する
LinuxをベースとしたWebサーバーの構成、LAMPスタックでMySQLを管理するアプリとしてよく利用されるのが、phpMyAdminです。そして、phpMyAdminを利用してMySQLを管理するためには、接続のための設定が必要です。
なお、同じホストでかつデフォルトのポート番号を使っている場合は、ログインさえできればすぐに利用できます。しかし、別のホストのMySQLを管理するためには、ホスト名とポート番号を、サーバーに合わせて設定しなければなりません。具体的には、phpMyAdminのディレクトリにある、onfig.inc.phpをサーバーに合わせて編集してください。
config.inc.phpの設定例
31行目 : $cfg[‘PmaAbsoluteUri’] = ‘http://ドメイン名/任意の名前/’;
57行目 : $cfg[‘Servers’][$i][‘host’] = ‘210.188.240.7’;
58行目 : $cfg[‘Servers’][$i][‘port’] = ‘3306’;
72行目 : $cfg[‘Servers’][$i][‘user’] = ‘DBユーザ名’;
73行目 : $cfg[‘Servers’][$i][‘password’] = ‘DBパスワード’;
363行目 : $cfg[‘DefaultLang’] = ‘ja’;
- MySQLへのリモート接続が可能なサーバーのホスト名
- MySQLサーバーに設定されているポート番号
- MySQLを利用するためのアカウント名
- アカウントに対応したパスワード
MySQLに接続する設定の具体例
先ほどご紹介したように、MySQLはネットワークを介して接続できますますが、Web開発で使われるプログラム言語からも、設定さすればネットワーク経由で接続して利用可能です。次から、Web開発でよく使われるフレームワークの設定例についてご紹介します。
Ruby on Railから接続する
Webシステムの開発によく使われるRuby on Railsは、データベースの設定を変更することで、リモート接続可能なMySQLサーバーに接続できます。そして、具体的には、データベース設定ファイルのconfig/database.ymlを変更します。なお、MySQLへの接続には、mysql2というrubygemを利用します。
Ruby on RailsでMySQLに接続するための設定例
development:
adapter: mysql2
encoding: utf8
reconnect: false
database: [アプリ名]_development
pool: 5
username: 設定したユーザー名
password: 設定したパスワード
host: MySQLサーバーホスト
port: MySQLサーバーに設定したポート番号
timeout: 5000
これは、developmentの設定例ですが、testとproductionも同じように設定します。
CakePHPから接続する
プログラム言語PHPでは、MySQLに接続するためのライブラリを追加することで、プログラムからMySQLのデータベースが利用できます。そして、PHPで開発されたフレームワークでは、MySQLの設定さえすれば、MySQLを利用する関数を意識せずに利用できるのがメリットです。
そういったPHPのフレームの中でも代表的なCakePHPで、MySQLのサーバーに接続するための設定は、database.phpに記述します。
CakePHPでMySQLに接続するための設定例
class DATABASE_CONFIG {
public $default = array(
‘datasource’ => ‘Database/Mysql’,
‘persistent’ => false,
‘host’ => MySQLサーバーホスト,
‘port’ => MySQLサーバーに設定したポート番号,
‘login’ => 設定したユーザー名,
‘password’ => 設定したパスワード,
‘database’ => データベース名,
‘prefix’ => ”,
‘encoding’ => ‘utf8’,
);
Python3のフレームワークDjangoの設定
最近、機械学習を活用したシステム開発でよく使われるPythonをWeb開発にも利用するケースが増えています。そして、Python向けのフレームワークも増えてきました。そうしたPython用のフレームワークでもよく使われるDjangoで、MySQLに接続するための設定は、setting.pyに記述します。
DjangoでMySQLに接続するための設定例
DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.mysql’,
‘NAME’: データベース名,
‘USER’: 設定したユーザー名,
‘PASSWORD’: 設定したパスワード,
‘HOST’: MySQLサーバーホスト,
‘PORT’: MySQLサーバーに設定したポート番号,
}
}
MySQLに接続できない場合の確認方法
リモートでMySQLに接続して利用する場合、必要な設定が漏れていることが原因で、接続できないことがよくあります。次から、接続できない場合の確認方法についてご紹介します。
ホスト名をチェックする
MySQLのサーバーとそのサーバーに接続するパソコンがネットワークに接続できているのをチェックしたものの、mysqlコマンドや管理ツールなどを使って接続できない場合は、まずはホスト名が合っているかをチェックしましょう。
MySQLのサーバーに接続するほかのアプリケーションで、そのホスト名で接続できるでしょうか。まずは、そこをチェックしてみてください。また、IPアドレスが解るのであれば、IPアドレスで接続できるか試してみてください。
ポート番号をチェックする
MySQLのサーバーで、リモートでSQLを受け付ける設定をすると、攻撃を受けやすくなるのがデメリットです。これは、MySQLのデフォルトのポート番号がよく知られているためで、最悪、管理者アカウントのパスワードがばれてしまい、重要な情報が流出することもあります。
そのため、インターネット上で使われるMySQLサーバーでは、デフォルトのポート番号から別の番号に変えているケースがよくあります。そして、そういった場合は、デフォルトのポート番号では接続できません。そのため、リモートからMySQLに接続する場合は、ポート番号に注意してください。
アカウントもチェックを
ホスト名とポート番号をチェックしても接続できない場合、アカウントが合っているかをチェックしてみてください。リモートでMySQLに接続する場合に必要な情報は、ホスト名とポート番号、そして、アカウント名とパスワードです。もし、接続できない場合は、この順序でチェックしてみてください。
MySQLサーバーに接続できない場合、まずはネットワークが通じているかをチェックしてみてください。そして、ネットワーク接続に問題なければ、上記の項目を順にチェックしてみましょう。
リモート接続はMySQL管理必須のスキル
MySQLは、Linuxサーバーをベースに構築されたWebサーバー、LAMPスタックでよく使われるデータベース管理ソフトです。しかし、リモートアクセスにも対応しているので、データベース専用サーバーとしても利用できます。
そして、MySQLをデータベース専用サーバーとして利用する場合、接続に必要な情報は、ホスト名、ポート番号、そしてアカウントとパスワードです。これさえチェックしておけば、MySQL専用の管理ソフトを使い、自分のパソコンからもデータベースを操作できます。MySQLの管理を任されたら、ぜひ、リモート接続の方法をマスターしましょう。
MySQLのデフォルトのポート番号は、3306です。ただし、ポートを公開するには、サーバーの設定が必要なため、全てのLinuxサーバーで利用できる訳ではありません。