Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
9
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

CensOS 7 + mariaDB のソケットエラー & 日本語文字化け

mariaDB のインストールから始めて、簡単に遊べるようになるまでに打ったコマンドと出会ったエラーを自分用にメモ。
結果的にぶつかった問題はタイトルにある2点だった。

環境

  • Windows 8.1
  • VirtualBox 5.0.28
  • Vagrant 1.8.1
  • CentOS 7.0

仮想環境はWindows 8.1 + Cygwin + Vagrant で CentOS 7.0 に PHP 7 をインストールするで入れたやつ。

この記事のなかみ

mariaDB インストール&接続

[root@localhost /]# yum install mariadb mariadb-server
Complete!

socket エラー

[root@localhost /]# mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

( ゚д゚)

mysqlソケットエラー解決法 - ウマい話、ちょいくれや。
(2009年のブログに2015年までお礼コメントついてるの、なんか良い)

[root@localhost /]# cat /var/lib/mysql/mysql.sock         # このファイルあるのか
cat: /var/lib/mysql/mysql.sock: No such file or directory # 無い
[root@localhost /]# touch /var/lib/mysql/mysql.sock       # つくっちゃえ(空ファイル)
[root@localhost /]# mysql                                 # 途中だけど試しに
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)

再起動だけちょっと注意? 今回はmariadb

[root@localhost /]# chown mysql:mysql /var/lib/mysql      # 所有者変更
[root@localhost /]# ls -l /var/lib/mysql/                 # 所有者確認
drwx------ 2 mysql mysql     4096 Nov 27 12:17 mysql      # mysqlさんちのmysqlさんのものになった
[root@localhost /]# systemctl restart mariadb             # 再起動
[root@localhost /]# mysql
Welcome to the MariaDB monitor.                           # やったー

途中、エラーのおわりが(2)から(111)になってた。
ぐぐってもよくわからなかったので後日 φ(。。)

直打ちで DB 操作

ユーザー・パスワードの設定は措くとして、コマンド直打ちでデータを入れてみる。
データベース zoo にテーブル animals を作り、カラムに id(自動採番)と name を用意。
(SQL 文よくミスるのでついでに書いとく。)

MariaDB [(none)]> CREATE DATABASE zoo;
MariaDB [(none)]> USE zoo;
Database changed
MariaDB [(zoo)]> CREATE TABLE animals (
    -> id int auto_increment,
    -> name varchar(255),
    -> PRIMARY KEY (id)
    ->);
MariaDB [(zoo)]> SHOW COLUMNS FROM animals;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int(11)      | NO   | PRI | NULL    | auto_increment |
| name  | varchar(255) | YES  |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+

適当にねこさんたちを入れてみる。

MariaDB [zoo]> INSERT INTO animals (name) VALUES ('とびみけさん'), ('shironeko-san');
Query OK, 2 row affected, 1 warning (0.00 sec)
MariaDB [zoo]> SELECT * FROM animals;
+----+---------------+
| id | name          |
+----+---------------+
|  1 | ??????        |
|  2 | shironeko-san |
+----+---------------+

とびみけさん……

日本語が「?」になる

mysqlで文字コードをutf8にセットする
MariaDBの日本語の文字化けを解消する

データベースの文字コードが Latin-1 なるものになってるのが悪いんだそう。

MariaDB [(zoo)]> SHOW variables LIKE "chara%"; # 出力は一部抜粋
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_database   | latin1                     |
| character_set_server     | utf8                       |
+--------------------------+----------------------------+

とりあえず
1. mariaDB のデフォルトを変更する
2. 新しくデータベース作る
がよいっぽい。既存のデータベースを残したい場合は
1. 既存データベースの設定を変更する
2. 新しくテーブル作る(?)
って感じっぽい。テーブル作り直すなら既存のデータベースにこだわる必要もないかも?

mariaDB の文字コード設定を変更する方法から。
一度 mariaDB を抜けて /etc/my.cnf を編集。

MariaDB [zoo]> exit
Bye
[root@localhost /]# vim /etc/my.cnf

ここを書き足す。

/etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
character-set-server=utf8  # ここ

[client]                   # ここ
default-character-set=utf8 # ここ

再起動して入り直し。
文字コード確認するとちゃんと UTF-8 になってる。

MariaDB [none]> SHOW variables LIKE "chara%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_database   | utf8                       |
+--------------------------+----------------------------+

注意:既存のデータベース・テーブルの設定は Latin-1 のまま

書き換えたのはあくまでデフォルトなので、もう作っちゃったものは変わらない。

MariaDB [none]> USE zoo                    # my.cnf 編集前に作ったデータベース
MariaDB [zoo]> SHOW variables LIKE "chara%"; 
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_database   | latin1                     |
+--------------------------+----------------------------+
MariaDB [zoo]> CREATE DATABASE zoo_2;
MariaDB [zoo]> USE zoo_2                   # my.cnf 編集後に作ったデータベース
MariaDB [zoo_2]> SHOW variables LIKE "chara%"; 
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_database   | utf8                       |
+--------------------------+----------------------------+

この zoo_2 で新しくテーブル作って日本語入れると無事に表示される。わーい。
既存のデータベースの設定を変えるには↓

個別で設定を変更する

データベース zoo の文字コードを変えるにはこう。

MariaDB [zoo]> ALTER DATABASE zoo default charset=utf8;

↓変わってる。

MariaDB [zoo]> SHOW variables LIKE "chara%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_database   | utf8                       |
+--------------------------+----------------------------+

ただし変わったのは zoo のデフォルトであって(たぶん)、
既存のテーブルは Latin-1 のまま。
上記の注意と同じで、新しく作ったテーブルは UTF-8 になってる。

# テーブル animals はやっぱりだめ
MariaDB [zoo]> INSERT INTO animals (name) VALUES ('みけさん');
MariaDB [zoo]> SELECT * FROM animals;
+----+---------------+
| id | name          |
+----+---------------+
|  1 | ??????        |
|  2 | shironeko-san |
|  3 | ????          |
+----+---------------+
# テーブル animals_2 を作ってみたらいけた(CREATE TABLE コマンドは略)
MariaDB [zoo]> INSERT INTO animals_2 (name) VALUES ('みけさん');
MariaDB [zoo]> SELECT * FROM animals_2;
+----+--------------+
| id | name         |
+----+--------------+
|  1 | みけさん     |
+----+--------------+

上にリンク貼った記事では既存のテーブルでも ALTER TABLE 文で変わるって書いてあったけど
試してみたところ変わらなかった。なんでだろ。

ひとまずおわり

データベース niwasaki に nekosan テーブルを作るべきだった。
名前変えるの面倒くさいらしいのでデータベース名は慎重につけましょう。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
9
Help us understand the problem. What are the problem?