読者です 読者をやめる 読者になる 読者になる

ショウジンブログ

Learn as if you will live forever, Live as if you will die tomorrow.

MySQLデータベースを作成@Cent OS 5.8

Sponsored Links

基礎からのMySQL 改訂版 (基礎からシリーズ)

基礎からのMySQL 改訂版 (基礎からシリーズ)

EX-CLOUDのCent OS 5.8でMySQLデータベースを作成します。

ハイスペックVPSが月額1,000円(税抜)~|エクスクラウド

EX-CLOUDではデフォルトでMySQLがインストールされています。

確認のためターミナルでmysqlと叩くと以下の情報が表示されます。

$ mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4138
Server version: 5.5.14 MySQL Community Server 5.5 (GPL)

バージョンは5.5.14でした。

なんかいろいろうまくいかないのでインストール済のMySQLをアンインストール。

$ sudo yum remove mysql
$ sudo yum remove mysql-server
$ sudo yum remove mysql-libs

アンインストールしたら再インストール。

$ sudo yum --enablerepo=remi,epel,rpmforge install mysql-server

MySQLを起動します。

$ sudo /etc/init.d/mysqld start

mysqlモニターでインストールした新しいMySQLのバージョンを確認します。

$ mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.29 MySQL Community Server (GPL) by Remi

バージョンは5.5.29であることを確認して進めます。

文字コードの設定を変更

デフォルト状態では文字コードの設定は以下のようになっていました。

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

latin1になっています。このままだと日本語等の2バイト文字が文字化けするので設定をutf8に変更します。

Cent OSのMySQLの設定ファイルは「/etc/my.cnf」ということを調べて、これを編集します。

$ sudo vim /etc/my.cnf

my.cnfを開いたら以下の記述を追記。

[mysqld]セクション内に以下を記述。

character-set-server=utf8

末尾に

default-character-set=utf8

を記述。

以前は他にも「skip-character-set-client-handshake」とかを記述していたけど、これはもう使わないほうがいいっぽいので、今後はこの二つだけを記述することにします。

設定を有効化するためにMySQLサーバを再起動。

$ sudo /etc/init.d/mysqld restart
mysqld を停止中:                                           [  OK  ]
mysqld を起動中:                                           [  OK  ]

ついでにMySQLサーバの自動起動を設定。

$ sudo /sbin/chkconfig mysqld on

自動起動の設定を確認。

$ sudo /sbin/chkconfig --list mysqld
mysqld              0:off     1:off     2:on     3:on     4:on     5:on     6:off

この設定になっていればオーケー。

文字コードの設定が繁栄されているか、mysqlモニターで確認。

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

オーケー。

MySQL rootパスワードの設定

rootユーザでMySQLモニターにログイン。

$ mysql -uroot

rootユーザのパスワードを変更。(PASSWORD部分を適宜書き換えて)

mysql> use mysql;
mysql> update user set password=password('PASSWORD') where user = 'root';

MySQLユーザの確認。

mysql> select host,user from mysql.user;
+-------------+------+
| host        | user |
+-------------+------+
| 127.0.0.1   | root |
| ::1         | root |
| example.com |      |
| example.com | root |
| localhost   |      |
| localhost   | root |
+-------------+------+

匿名ユーザを削除。

mysql> delete from user where user = '';

削除後、再度ユーザを確認。

mysql> select host,user from mysql.user;
+-------------+------+
| host        | user |
+-------------+------+
| 127.0.0.1   | root |
| ::1         | root |
| example.com | root |
| localhost   | root |
+-------------+------+

権限を反映させ、ここで一旦ログアウト。

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> quit;
Bye

データベースの作成

rootユーザでmysqlモニターにログイン。

$ mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

パーミッション関係で不備があるらしく蹴られました。
MySQLを一旦停止。

$ sudo /etc/init.d/mysqld stop
mysqld を停止中:                                           [  OK  ]

オプション付きで起動させます。

この「–skip-grant-tables」オプションを指定することによってMySQLの権限システムを使用せずに(さっきのように蹴られないように)MySQLを起動させることが出来ます。

$ sudo mysqld_safe --skip-grant-tables &

実行するとこんな感じ。

$ 121231 16:09:13 mysqld_safe Logging to '/var/log/mysqld.log'.
121231 16:09:13 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

この状態で再度mysqlモニターにログインします。

$ mysql -u root

今度は入れました。

あらためてrootユーザに全データベースの全権限を設定、パスワードを設定。さっきやったのはよくわからないでやっていた部分もあるので、ここでuserテーブルをすべて削除してから、あらためて設定し直します。

mysql> truncate table user;
Query OK, 0 rows affected (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> grant all privileges on *.* to root@localhost identified by 'パスワード' with grant option;
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

これでrootユーザの設定が完了しました。
内容を確認します。

mysql> select host, user from user;
+-----------+------+
| host      | user |
+-----------+------+
| localhost | root |
+-----------+------+
1 row in set (0.00 sec)

問題になっていたパーミッション問題が解決できたと思うので、ここでMySQLをさっきのオプションなしで起動させます。

いったんサヨナラして

mysql> quit
Bye

MySQLを再起動します。

$ sudo /etc/init.d/mysqld restart

MySQLのrootユーザのパスワードオプションをつけて

$ mysql -u root -p

パスワードを入力して実行し、ログインできたことを確認。

これでパーミッション問題による「MySQLを操作できない」問題は解消しました。

本題の「MySQLデータベースを作成」に入ります。

rootユーザでmysqlモニターにログイン。

$ mysql -u root -p

WordPress用のデータベースを作成します。

mysql> create database wordpress;
Query OK, 1 row affected (0.00 sec)

とくにユーザを作成してということもなくrootユーザで使う予定なので以上で完了です。

基礎からのMySQL [基礎からのシリーズ] (プログラマの種シリーズ)

基礎からのMySQL [基礎からのシリーズ] (プログラマの種シリーズ)