MySQLを使い始めるときの必須事項!OSとの相性を確認しよう

SRE

はじめに

こんにちは株式会社TIELECのタカシユウトです。 この記事ではMySQLをセットアップする前に注意してほしいことについて紹介します。 MySQLを使ってアプリケーションを構築しようとしている方の参考になれば幸いです。

キーワード MySQL5.6,Ubuntu 16.04,Oracle Linux 7,my.cnf,文字化け,文字コード,utf8,latin1

MySQL をインストールするその前に

まず、先に結論を言いますと、MySQLをインストールする際には必ず OSのサポートバージョンを確認しましょう。

これをしておかないと何が起きるか。

当然ですが、MySQLを開発している人たちが本来意図していない問題が起きる可能性があります。 例えば、文字コードの設定が反映できないなど。

私はこの確認を怠ってMySQLのセットアップをしたために、Webアプリの文字化けが解消できずに時間を浪費しました。

下記のページにMySQLのバージョンとOSのサポート状況のマッピングが記載されていますので必ず確認しましょう!

MySQL :: Supported Platforms: MySQL Database

MySQL 5.6をubuntu 16.04 にインストールしようとしたら...

MySQL 5.6 を使ったWebアプリケーションの開発環境を用意しようとしておりハマりました。 もともと用意されていた手順書にはDBの条件はMySQL5.6を利用とだけ書かれていたので、そこで、普段使い慣れているubuntu 16.04 にセットアップしようとして作業を実施していたのです。

MySQLのインストールと,Webアプリケーションの設定自体はうまく行ったのですが、動作確認をしていてデータが文字化けしていることが発覚。調べてみると、文字コードの設定は my.cnf というファイルで設定できることがわかりました。

my.cnfを設定してみる

ubuntu 16.04 の場合のパス: /etc/mysql/my.cnf

my.cnfに設定を加えるとデフォルトの文字コードが変更されるといろんなサイトに書いてあったので実際に試してみました。

設定内容

[client]
default-character-set=utf8
[mysqld]
collation-server=utf8_general_ci
init-connect='SET NAMES utf8'
character-set-server=utf8
skip-character-set-client-handshake
[mysql]
default-character-set=utf8

参考にしたページ

Change MySQL default character set to UTF-8 in my.cnf?
Currently we are using the following commands in PHP to set the character set to UTF-8 in our application. Since this is...

文字コードを確認してみると。

mysql> show variables like "chara%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

character_set_serverlatin1となっています。 これだと文字化けしてしまいます。

DBを再起動してみましたが、、、 character_set_server はそのまま。変更されていません。

SQLで設定してみる

他にも以下のコマンドを実行することで回避できるという記載もありました。

mysql> set character_set_server = utf8;
Query OK, 0 rows affected (0.01 sec)

このやり方は、一時的に文字コードを変更することができるのですが、再起動で元に戻るので、文字コードの問題解消には繋がりませんでした。

Oracle Linux 7.7 を使って再セットアップを実施

ここで、セットアップしている環境がおかしいのではないかと考え、OSとサポートバージョンを確認することに。 https://www.mysql.com/support/supportedplatforms/database.html MySQL 5.6 と Ubuntu 16.04 の組み合わせは○がついていません。

ここで初めてOSとの相性の問題に気づきました。。 MySQLのバージョンを上げるわけには行かなかったので、Oracle Linux 7 を使ってMySQL5.6 をセットアップすることにしました。

セットアップは以下のサイトを参考に実施。 https://weblabo.oscasierra.net/installing-mysql-rhel6-with-yum/ Oracle Linux 7.7 にセットアップした場合の my.cnf のパスは/etc/my.cnfでした。 ここにubuntu のときと同様に文字コードの設定を書きました。

[client]
default-character-set=utf8
[mysqld]
collation-server=utf8_general_ci
init-connect='SET NAMES utf8'
character-set-server=utf8
skip-character-set-client-handshake
[mysql]
default-character-set=utf8

再起動して確認してみます。

mysql> show variables like "chara%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

character_set_server 含めすべての文字コードが utf8 になっていることが確認できました。

まとめ

MySQLのセットアップ方法はいろんなサイトにナレッジがあるので簡単にできると思うかもしれません。 しかし、その前にきちんとOSとMySQLのサポートバージョンをしっかりと確認しましょう。

サポートされている組み合わせでないと、良からぬ動作が発生したときに問題の解決に時間がかかる恐れがあります。 私もこの基本的なことに気づかず作業をしてしまったので、かなりの時間を無駄にしました。

[

MySQL徹底入門 第4版 MySQL 8.0対応

[

サーバ/インフラエンジニアの基本がこれ1冊でしっかり身につく本

コメント

タイトルとURLをコピーしました