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 インストール&接続
-
直打ちで DB 操作
- 日本語が「?」になる
デフォルト書き換え or データベース個別設定
- 日本語が「?」になる
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 |
+--------------------------+----------------------------+
とりあえず
- mariaDB のデフォルトを変更する
- 新しくデータベース作る
がよいっぽい。既存のデータベースを残したい場合は - 既存データベースの設定を変更する
- 新しくテーブル作る(?)
って感じっぽい。テーブル作り直すなら既存のデータベースにこだわる必要もないかも?
mariaDB の文字コード設定を変更する方法から。
一度 mariaDB を抜けて /etc/my.cnf
を編集。
MariaDB [zoo]> exit
Bye
[root@localhost /]# vim /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 テーブルを作るべきだった。
名前変えるの面倒くさいらしいのでデータベース名は慎重につけましょう。