レンタルサーバーの中でも最も有名といえるXserverですが、Xserver上では主に「MySQL」と「SQLite」というデータベースシステムを利用することができます。
今回は、両者の違いはいったいどこにあるのか? どちらを使うべきなのか解説していきたいと思います。
この記事の要点
- Xserverでは基本的にMySQLの方が直感的に扱いやすくなっている上に、同時アクセスなどに強いためおすすめ
- データベース名を同じサーバーの人に知られたくなかったり、作成したいデータベースの数やサイズが大きい人はSQLiteを使うべき
XserverにおけるMySQLとSQLiteの違い
まず最初にそもそもMySQL、SQLiteの違いについて解説します。
共通点
そもそも共通点から話した方が良さそうですね。
もちろんですが、両者ともにRDBMS(関係型データベース管理システム)なので、データベースやテーブルを作ってデータを管理することができます。 そして「SELECT * FROM test_table」のようなSQL文を使えることはもちろんのこと、データの型を決めたりインデックスを付与してデータ検索の高速化を図ることもできます。
だからMySQLに使い慣れている人は基本的にSQLiteもすぐに使うことができるといった感じです。
サーバーを建てるか否か
MySQLは専用のサーバーを建てて、そこにアクセス(基本3306番ポート)することで利用することができます。 一方でSQLiteではサーバーにアクセスせずに、dbなどの拡張子を持つファイルに対してアクセスすることで利用することができます。
そのため、サーバーを建てる手続きが不要だったりしてSQLiteの方が非常に楽に使えます。また、SQLiteではデータの引っ越しに関してもファイルを移動するだけなので非常に楽ですね。
一方でMySQLに関しては別のIPアドレスを持つ別のMySQLサーバーへの接続も容易ですので、データの処理と他の処理を異なるサーバーで行うなどの負荷分散がしやすくなります。
とはいえXserverではWebサーバーとデータベースサーバーは同じ物理サーバーに建てられているのであまり関係なさそうです。
拡張性と機能
MySQLでは基本的なSQL文以外にもストアドプロシージャ(事前にSQL文を組み立てて関数みたいに呼び出せるやつ) などを含むあらゆる機能を使うことができます。
一方でSQLiteは基本的なSQL文のみのサポートとなっていて、そこまで凝ったことはできないですね。とはいえ、XserverではMySQLの拡張機能等をうまく追加できなかったりするので、正直機能性はそこまで大きくは変わらない印象です。
ただ、MySQLについては、少なくともXserverではphpMyAdminなどの視覚的なデータベース管理ソフトウェアを使うことができ、データの構造等を一目でつかむことができ非常に良いです。
SQLiteについてもphpLiteAdminたるものが存在するみたいで、やろうと思えば同じように管理できるみたいですが…
ユーザーと権限
MySQLでは専用のユーザーを作って、各データベースに対する権限等をGRANT構文によって設定することができますが、SQLiteについてはそのようなことはできません。
ただ、データベースファイルの権限を変えることで何とかアクセス制限を行うことはできそうです。
パフォーマンス
同じサーバー上で動かしているならパフォーマンスも同じように発揮するのかと思ったらそうでもありませんでした。
MySQLはデータの整合性を保つためのロック処理などをより精密に行うことができる分、同時アクセス時のパフォーマンスを非常に高めることができています。
しかしSQLiteではデータベースが扱われている間はそのファイルごとロックしてしまうようなので、同時アクセスに非常に弱いです。一度に一人しかアクセスしないような処理においてはどうもSQLiteの方が高速だったりするみたいですが、Webアプリなど同時に多くの人がアクセスするような場面においてはMySQLの方に軍配が上がりそうです。
ただ、Xserverは個人利用が多いですし、そこまでの同時アクセスはないと思いますので、正直あまり気にしなくても良いかと思います。
XserverにおけるMySQLとSQLiteの使い方
MySQL
Xserver上ではどちらかというとMySQLの方がより簡単に使えるのではないかと思います。「サーバーパネル」という管理画面からMySQLの設定というところにアクセスすれば、以下のようにすぐに新しいデータベースを作ることができます。
データベース名を入力するだけで簡単にデータベースを作成することができ、自分で作ったユーザーにアクセス権限を付与することができます。 なお、データベース名の先頭には自分のサーバーIDをつけなければいけません。
ちなみにこのデータベース名についてですが、SSH接続を行ってMySQLのデータの実体の場所である/var/lib/mysqlというディレクトリの中をlsコマンド等で除けば、同じサーバーにある他のユーザーのデータベースの名前も見ることができてしまいます。
別にアクセス権限があるわけでもないので中のテーブル名とかまではわからないですが、データベース名が分かる以上、ユーザー名とパスワードさえ特定すれば他のユーザーのデータベースを操作することができてしまいそうで怖いです。
Xserverのデータベースサーバーはポート開放されていないのでリモートアクセスすることはできませんが、同じサーバーの中にある他のユーザーのデータベース自体にはlocalhostでアクセスできるのでちょっと危ないです。
しかも、Xserverの簡単インストールによって生成されるWordPress用のデータベースのユーザー名は~_wp1とかだったりするので、もはやあとはパスワードがばれてしまったらすぐにアクセスできそうです。冷静に考えて怖いですよね。
さてそれは置いておいて、サーバーパネルから「phpMyAdmin」に直接アクセスすることもできます。
超視覚的にデータベースの操作ができて良いですね。また、データベースのデータのインポート及びエクスポートも簡単にできて非常に素晴らしいです。
あと、phpMyAdminって新しめのバージョンのやつだとなんかめちゃくちゃ見にくかったりするのですが、Xserverの物はちょっと古い?のか、とても見やすいGUIで良いです。
ちなみにMySQLデータのダウンロードおよびバックアップなどの機能もサーバーパネルから利用できます。
また、当然ながらPHPプログラムのmysqliなどのモジュールを使って接続することができますし、Pythonに関してもPyMySQLなどのライブラリを使えば簡単にアクセスできます。(Anaconda3等の加藤環境を使う必要あり)
外部ネットワークからのアクセスについては基本的にデータベースサーバーのポートが解放されていないので無理ですが、SSHトンネルを構築することでSSHプロトコル経由でアクセスできるようになります。
SQLite
SQLiteは特にツールなどは提供されていませんが、既にインストールはしてくれているのでSSH接続をしてコマンドライン上から使うことができます。
$ sqlite3 test.db
SQLite version 3.40.1 2022-12-28 14:03:47
Enter ".help" for usage hints.
sqlite>
データベースファイルを設置したいディレクトリまで移動して、あとはsqlite3コマンドでデータベースを作成してアクセスするだけですね。
sqlite> というのが出てきたら、あとはSQL文を入力していくだけです。一昔前までXserverのSQLiteはバージョンが遅れていたらしいですが、現在は3.40.1ということでそこそこ新しいですね。
また、pythonの標準ライブラリであるsqlite3を使えばPythonプログラム上でもすぐにアクセスができます。
import sqlite3
dbname = 'test.db'
conn = sqlite3.connect(dbname) #データベースに接続
cur = conn.cursor()
cur.execute('SELECT * FROM test_table') #SQL実行
for row in cur: #取得したデータを一行ずつ出力
print(row)
cur.close()
conn.close()
例ですが、上のような感じです。MySQLとは違って追加でライブラリを入れなくても使えるのが良いですね。
XserverではMySQLとSQLiteどちらが良いの?
もちろん場合によりますが、基本的にMySQLを利用することをお勧めします。XserverではMySQLをより手軽に使うための様々なツールが用意されていますし、MySQLのデータベースのデータ量はサーバーのディスク使用量に反映されないのでディスクの節約になって良いかもしれないです。
ただスタンダードプランでは作成できるMySQLデータベースの上限が50個までであり、1個あたり合計サイズ5GB程度までが目安です。 昔までは厳しかったようですが、現在ではかなり規制が緩和されていますね。1つのデータベースで合計サイズが5GBを超えるなんて、Blob等を使わなければ滅多に無いと思うので心配いらなそうです。
ただしXserver上のMySQLだと先ほど説明したようにセキュリティ面で少し心配なところがありますね。そのため、めちゃくちゃ大事な情報を格納するならMySQLは使わない方が良いかもしれないです。
SQLiteだと完全に自分しかアクセスできないフォルダにデータベースを作成することができるので、安全だと言えます。また、データサイズやデータベース数の制約が無いのも良いところではありますね。
- Xserverでは基本的にMySQLの方が直感的に扱いやすくなっている上に、同時アクセスなどに強いためおすすめ
- データベース名を同じサーバーの人に知られたくなかったり、作成したいデータベースの数やサイズが大きい人はSQLiteを使うべき
といった感じでしょう。