MySQLの文字コード関連の設定を調べる方法


前のエントリに引き続きMySQLについての話です。今回は、文字コードの設定を確認するためのコマンドを紹介します。

文字コード関係の設定を表示する

次のコマンドを実行すると、文字コードに関する設定が表示されます。

mysql> show variables like 'character_set%';

前回のエントリで書いたように、Ubuntuでは特に何もしないと、MySQLのデフォルトの文字コードはlatin1になっています。ですから、次のように表示されます。

mysql> show variables like 'character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| 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)

前のエントリで説明したように、my.cnfにcharacter_set_server = utf8という設定をしておくと、次のように文字コードがutf8となります。(character_set_filesystemはファイルシステムの文字コードで、binaryで構いません。)

mysql> show variables like 'character_set%';
+--------------------------+----------------------------+
| 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)

このような設定になっていれば、文字コードを指定しないでcreate databaseやcreate tableを実行した時に、データベースやテーブルの文字コードがutf8になります。

データベースの文字コード設定を表示する

特定のデータベースの文字コード設定を知るには、次のコマンドを実行します。

mysql> show create database データベース名;

次の例は、mydbデータベースの文字コードを表示しています。「DEFAULT CHARACTER SET utf8」となっているので、文字コードがutf8に設定されていることがわかります。

mysql> show create database mydb;
+----------+---------------------------------------------------------------+
| Database | Create Database                                               |
+----------+---------------------------------------------------------------+
| mydb     | CREATE DATABASE `mydb` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+---------------------------------------------------------------+
1 row in set (0.00 sec)

テーブルの文字コード設定を表示する

特定のテーブルの文字コード設定を知るには、次のコマンドを実行します。

mysql> show create table テーブル名;

次の例は、mydbデータベースのusersテーブルの文字コードを表示しています。11行目の「DEFAULT CHARSET=utf8」から、文字コードがutf8に設定されていることがわかります。

mysql> show create table mydb.users \G
*************************** 1. row ***************************
       Table: users
Create Table: CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

UbuntuでMySQLを使う際の文字コードの設定


Ubuntu (12.04LTS)でMySQLを使う際に必要な設定についてまとめてみました。

このように、最初に1回だけ行なう設定や手順は、次に必要になった時には忘れていて、改めて調べ直すことが多いものです。

MySQLをインストールする

mysql-serverパッケージをインストールすれば、最新版のMySQL一式がインストールされます。(2013/1時点では、MySQL 5.5系です。)

$ sudo apt-get install mysql-server

MySQLの起動と停止

起動や停止といったいわゆる運用系の操作は、Ubuntuの標準的なやり方で行ないます。

# MySQLを起動する
$ sudo /etc/init.d/mysql start

# MySQLを停止する
$ sudo /etc/init.d/mysql stop

# MySQLを再起動する
$ sudo /etc/init.d/mysql restart

# MySQLの現在の状態を表示する
$ sudo /etc/init.d/mysql status

utf8を使うように設定する

Ubuntuでは、MySQLの設定ファイルmy.cnfは、/etc/mysql/my.cnfに置かれています。

Ubuntuでは、デフォルトではサーバの文字コードは(utf8ではなく)latin1になります。そのために、文字コードを指定せずにデータベースやテーブルを作成すると、文字コードがlatin1となり日本語(utf8)が文字化けしてしまいます。

日本語のデータを扱うならば、デフォルトの文字コードをutf8としておくとよいでしょう。それには、my.cnfに次の設定を追加します。

[mysqld]
character_set_server = utf8

軽量で高速なウェブサーバNginxを、Ubuntu 12.04に導入する(設定編その2)


今回は、実際のNginxの設定ファイルの例を見てみましょう。(前回の設定編その1はこちら)

ここで説明する例は、2つの仮想ホストwww.alpha.comとwww.beta.comを運用するための設定です。

次のように、4つの設定ファイルが必要となります。

ファイル 目的
1 /etc/nginx/nginx.conf メインの設定ファイル
2 /etc/nginx/sites-available/default デフォルトホストの設定
3 /etc/nginx/sites-available/www.alpha.com 仮想ホストwww.alpha.comの設定
4 /etc/nginx/sites-available/www.beta.com 仮想ホストwww.beta.comの設定

もちろん、前回に説明したように、/etc/nginx/sites-enabledの中に、2、3、4に対して同じ名前のシンボリックリンクを作っておく必要があります。

これらの設定ファイルは、Nginxをインストールした際に用意されているデフォルトの設定ファイルの内容をベースにしています。

ここではポイントとなる点だけを説明します。具体的なディレクティブの意味については、Nginxの公式サイトのドキュメントなどを参照してください。

/etc/nginx/nginx.conf: メインの設定ファイル

1行目は、Nginxを、ユーザwww-data、グループwww-dataで実行するという意味です。4行目のworker_processesは、ワーカープロセスの個数を指定するもので、CPUのコア数を設定します。コメントにあるように、使用しているVPSは仮想3コアなので、3を指定しています。

8行目のworker_connectionsは、ワーカープロセスが同時にオープンするコネクション数の最大値を指定するものです。ここでは768にしています。

30〜31行目では、アクセスログとエラーログのパスを指定しています。

user www-data;

# Worker process setting for Sakura VPS 2G (3 Cores)
worker_processes 3;
pid /var/run/nginx.pid;

events {
	worker_connections 768;
}

http {

	##
	# Basic Settings
	##

	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;
	keepalive_timeout 65;
	types_hash_max_size 2048;

	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	##
	# Logging Settings
	##

	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;

	##
	# Gzip Settings
	##

	gzip on;
	gzip_disable "msie6";

	##
	# Virtual Host Configs
	##

	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;
}

/etc/nginx/sites-available/default: デフォルトホストの設定

デフォルトホストの設定ファイルです。設定されている仮想ホスト(www.alpha.com, www.beta.com)以外のホスト名、あるいはIPアドレスを指定してアクセスされた場合には、この設定にもとづいて処理されます。

ここでは、4行目のdeny allによって、常に403 Forbiddenをステータスとして返すようにしています。

server {
	listen 80 default_server;

	deny all;
}

/etc/nginx/sites-available/www.alpha.com: 仮想ホストwww.alpha.comの設定

仮想ホストwww.alpha.comの設定ファイルです。

5行目のlistenは、ポート80を使うことを指定しています。6行目のrootは、この仮想ホストのファイルは、/home/vh/www.alpha.com以下に置いてあることを意味します。7行目は、index.htmlをインデックスファイルとして認識するように設定しています。

9行目では、この仮想ホストの名前www.alpha.comを設定しています。

11〜12行目は、アクセスログとエラーログのパスを指定しています。

14行目の「location /」は、このサイトのパス”/”以下の部分に対して、ブレースで囲んだ宣言(15行目)を適用する、という意味です。パス”/”以下ということは、このサイトすべてが対象となります。

15行目のtry_filesは、指定されたパス($uriで表わされます)に対して、実際にどこを探すかを指定するものです。ここでは、「$uri」「$uri/」「=404」の3つを指定しています。

例えば、http://www.alpha.com/testにアクセスされたとしましょう。この場合、$uriには”/test”が入っています。

ですから、まずは/home/vh/www.alpha.com/testというファイルを探して、もしあればそれを返します。もしなければ、次は$uri/と指定されているので、後ろにスラッシュとindex.htmlを付けたもの、つまり/home/vh/www.alpha.com/test/index.htmlを探します。このファイルもなければ、次は「=404」と指定されていますが、これはエラーコード404を返すという意味です。ですから、「404 File Not Found」を返します。

#
#  www.alpha.com
#
server {
	listen 80;
	root /home/vh/www.alpha.com;
	index index.html;

	server_name www.alpha.com;

	access_log /var/log/nginx/www.alpha.com-access.log;
	error_log /var/log/nginx/www.alpha.com-error.log;

	location / {
		try_files $uri $uri/ =404;
	}
}

/etc/nginx/sites-available/www.beta.com: 仮想ホストwww.beta.comの設定

仮想ホストwww.beta.comの設定ファイルです。ファイルやディレクトリのパス名が違うだけで、それ以外の内容はwww.alpha.comと同じです。

#
#  www.beta.com
#
server {
	listen 80;
	root /home/vh/www.beta.com;
	index index.html;

	server_name www.beta.com;

	access_log /var/log/nginx/www.beta.com-access.log;
	error_log /var/log/nginx/www.beta.com-error.log;

	location / {
		try_files $uri $uri/ =404;
	}
}

これら4つの設定ファイルによって、2つの仮想ホストwww.alpha.com、www.beta.comを運用することができます。

軽量で高速なウェブサーバNginxを、Ubuntu 12.04に導入する(設定編その1)


今回は、特にUbuntu個有の設定ファイルの書き方やコンベンションについて説明します。(前回の起動・停止編はこちら)

Ubuntuでは、Nginxの設定ファイルは/etc/nginx以下に置かれています。

メイン設定ファイル: nginx.conf

/etc/nginxには、メインの設定ファイルnginx.confがあります。nginx.confには、サイト全体の設定を記述します。Nginxをインストールした状態では、サンプルの設定が入っています。

/etc/nginxの直下には、この他にもいろいろな設定ファイルがありますが、通常はnginx.conf以外をいじる必要はないでしょう。

追加設定用ディレクトリ: /etc/nginx/conf.d

このディレクトリには、追加の設定を行なうためのファイルを入れます。nginx.confの末尾では、このディレクトリと/etc/nginx/sites-available(この後すぐに説明します)の中にある*.confを読み込むようになっています。

Nginxをインストールした状態では、このディレクトリには何も入っていません。

仮想ホスト設定用ディレクトリ: /etc/nginx/sites-{available,enabled}

2つのディレクトリ/etc/nginx/sites-availableと/etc/nginx/sites-enabledは、仮想ホストを設定するためのものです。

/etc/nginx/sites-availableには、仮想ホストの設定ファイルを入れます。1つの設定ファイルで、仮想ホスト1個を定義します。設定ファイル名は、仮想ホストのドメイン名と同じにすると管理が楽です。

インストール時には、このディレクトリにはdefaultというファイルが入っています。この内容を参考にして、仮想ホストの定義を書くとよいでしょう。

Nginxは、起動時に、ディレクトリ/etc/nginx/sites-enabledに入っている設定ファイルを読み込みます。ですから、有効にしたい仮想ホストについては、sites-available/にある設定ファイルへのシンボリックリンクを、sites-enabled/の中に作っておかなければなりません。

例えば、仮想ホストwww.foo.comを定義するには、次のようにします。

1. ディレクトリ/etc/nginx/sites-availableの中に、仮想ホストwww.foo.comの設定を記述したファイルwww.foo.comを作成する。

$ sudo vi /etc/nginx/sites-available/www.foo.com
....
     仮想ホストwww.foo.com の設定を入力する
....

2. ディレクトリ/etc/nginx/sites-enabledの中に、1で作成した設定ファイルwww.foo.comへのシンボリックリンクを作る。シンボリックリンクの名前は、設定ファイルと同じ名前www.foo.comにする。

$ sudo ln -s /etc/nginx/sites-available/www.foo.com /etc/nginx/sites-enabled

3. Nginxをリスタートする

$ sudo /etc/init.d/nginx restart

また、仮想ホストwww.foo.comを(一時的に)無効にするには、ステップ2で作成したシンボリックリックを削除して、Nginxをリスタートしてやります。

つまり、シンボリックリンクを作成すれば仮想ホストは有効になり、シンボリックリンクを削除すれば、仮想ホストは無効になります。

余談ですが、Ubuntuでは、apacheでも、2つのディレクトリsites-availableとsites-enabledを使って、仮想ホストを管理します。さらに、apacheでは、コマンドa2ensite(仮想ホストを有効する)とa2dissite(仮想ホストを無効にする)が用意されています。

しかし、Nginxでは、このようなコマンドは用意されていないので、手作業でsites-enabledからsites-availableへのシンボリックを作成・削除する必要があります。

次回は、実際の設定ファイルをみてみます。

軽量で高速なウェブサーバNginxを、Ubuntu 12.04に導入する(起動・停止編)


今回は、Ubuntuで、ウェブサーバNginxを起動・停止する方法と、設定ファイルの内容をチェックする方法を説明します。(前回のインストール編はこちら)

Nginxを起動・停止する

UbuntuにNginxをインストールすると、ブート時に自動的に起動するように設定されます。ですから、普通にマシンをブートした場合には、手動でNginxを起動する必要はありません。

しかし、メンテナンスや設定を変更する際には、コマンドを使って手動で起動・停止する必要があります。起動や停止の方法は、Ubuntuの標準的なデーモンと同じです。

# 起動する
$ sudo /etc/init.d/nginx start

# 停止する
$ sudo /etc/init.d/nginx stop

# 再起動する
$ sudo /etc/init.d/nginx restart

# ステータスを表示する
$ sudo /etc/init.d/nginx status

Nginxの設定ファイルの内容をチェックする

Nginxの設定ファイルを書き換える時には、まず最初に、次のコマンドを実行して、設定ファイルの内容に誤りが無いことを確認してください。

# 設定ファイルの内容をチェックする
$ sudo /etc/init.d/nginx configtest

もしNginxの設定ファイルに何か誤りがあれば、次の例のように、エラーメッセージが表示されるので、設定ファイルを修正してください。

$ sudo /etc/init.d/nginx configtest
Testing nginx configuration: nginx: [emerg] unknown directive "http" in /etc/nginx/nginx.conf:12
nginx: configuration file /etc/nginx/nginx.conf test failed
$

設定ファイルに何も問題がなければ、次のように”Testing nginx configuration: nginx.”というメッセージだけが表示されます。

$ sudo /etc/init.d/nginx configtest
Testing nginx configuration: nginx.
$

設定ファイルに問題がなければ、次のコマンドでNginxを再起動させます。

$ sudo /etc/init.d/nginx restart

———————————————————————-

次のエントリでは、Nginxの設定ファイルについて解説しましょう。