ryotatake blog

Webエンジニア

『逆算式SQL教科書』のテストデータをCentOS6のMySQLに入れる

『逆算式SQLの教科書』という本でSQLの勉強をすることにしました。

少し古い本ですが、評価は高いようです。

ぐんぐん実力がつく! 逆算式SQL教科書

テストデータがダウンロードできるということでCentOSに入れようと思ったのですが、本の方ではWindowsでのセットアップの方法しか書かれておらず手間取ったので、その手順をメモとしてまとめておきます。

CentOS6にMySQL5.7を入れる

MySQLのインストール

自分のCentOSMySQLがまだ入っていなかったので、その準備から。

CentOS6にMySQL5.7をyumでインストール - Qiita

ほぼこちらの記事の手順通りに進めました。

# Yumリポジトリを追加
$ rpm -Uvh http://dev.mysql.com/get/mysql57-community-release-el6-7.noarch.rpm

# パッケージの情報を確認
$ yum info mysql-community-server

# MySQLインストール
$ yum install mysql-community-server

# インストールされたことを確認
$ rpm -qa | grep mysql
$ mysql --version

# my.cnfの編集
$ cp -p /etc/my.cnf /etc/my.cnf.orig # バックアップを取っておく
$ vi /etc/my.cnf

[mysqld]
character-set-server=utf8    # [mysqld]セクションに追加
# サービス起動
$ service mysqld start

MySQLのパスワード変更(管理を簡単にするため)

ここから、MySQLのパスワードを簡単なもの("root")に変更します。

mysql5.7でパスワードを変更する - Qiitaのとおりに進めました。詳細はこちらの記事を見てください。

# 初期パスワード確認
$ grep 'temporary password' /var/log/mysqld.log

# rootでmysqlに入る
$ mysql -u root -p {確認した初期パスワード}
# パスワード変更(とりあえず変更する必要があるので、ここでは仮のパスワード)
mysql> set password for root@localhost=password('passwordPASSWORD@999');
Query OK, 0 rows affected, 1 warning (0.00 sec)

# パスワードの設定を確認
mysql> SHOW VARIABLES LIKE 'validate_password%'; 
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_dictionary_file    |        |
| validate_password_length             | 8      |
| validate_password_mixed_case_count   | 1      |
| validate_password_number_count       | 1      |
| validate_password_policy             | MEDIUM |
| validate_password_special_char_count | 1      |
+--------------------------------------+--------+
6 rows in set (0.01 sec)

# パスワードを"root"に変えるための設定変更
mysql> SET GLOBAL validate_password_length=4;
mysql> SET GLOBAL validate_password_policy=LOW;
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_dictionary_file    |       |
| validate_password_length             | 4     |
| validate_password_mixed_case_count   | 1     |
| validate_password_number_count       | 1     |
| validate_password_policy             | LOW   |
| validate_password_special_char_count | 1     |
+--------------------------------------+-------+
6 rows in set (0.00 sec)
mysql> set password for root@localhost=password('root');

これでパスワードがrootに変更され、mysql -u root -p rootmysqlに入れるようになりました。

MySQLに入る時のパスワード入力を省略する

mysql -u root -p rootと毎回パスワードまで入力するのも面倒なので、パスワード入力も省略します。

またCentOS6にMySQL5.7をyumでインストール - Qiitaにお世話になりました。

$HOME/.my.cnfファイルにパスワードを書いておくと、MySQLに入る時のパスワード入力が省略できるそうです。

$ touch $HOME/.my.cnf
$ chmod 600 $HOME/.my.cnf
$ vi $HOME/.my.cnf

[client]
password="root"

これで、mysql -u rootだけでMySQLに入れるようになりました。

MySQLのデータベースにテストデータを入れる

サイトからテストデータをダウンロード

サポートページ:ぐんぐん実力がつく! 逆算式SQL教科書:|技術評論社内のリンクからデータがダウンロードできるのですが、CentOSでダウンロードするので、wgetを使用します。

$ cd {ファイルを置きたいディレクトリ}
$ wget http://gihyo.jp/assets/files/book/2008/978-4-7741-3313-3/make_data.lzh

lzhの解凍

ダウンロードしたファイルはlzh形式で圧縮されているので、これを解凍します。

(69) LZHファイルを解凍する。 – Linuxやってみる!の通りに進めていきました。

まずはlzhを解凍するためソフト、LHAをインストールします。

$ wget https://github.com/jca02266/lha/archive/master.zip
$ unzip master.zip
-bash: unzip: command not found # unzipがないと言われた

# unzipを入れる
$ sudo yum install unzip
$ unzip master.zip

$ cd lha-master

$ sudo yum -y install automake
$ sudo yum -y install autoconf

$ aclocal
$ autoheader
$ automake -a
$ autoconf
$ ./configure --prefix=$HOME/usr

$ make
$ make check
$ make install

ここまでが成功したら、LHAがインストールされました。

後はlzhファイルを解凍します。

$ export PATH=$HOME/usr/bin:$PATH
$ lha x make_data.lzh

解凍できました!

lsでファイルを確認すると、make_data.sqlというファイルが出来ています。このファイルのデータを後ほどデータベースに入れます。

mysql でデータベースを作成する

mysqlに入って、テストデータを入れるためのデータベースを作成します。

$ mysql -u root
mysql > CREATE DATABASE db_name; # 好きな名前を付けてください
mysql > exit

データベースにデータを入れる

先程作ったデータベースに、解凍して出来たテストデータを入れます。

$ mysql -u root db_name < path/to/make_data.sql (現在のディレクトリからmake_data.sqlまでのパス)
ERROR 1051 (42S02) at line 3: Unknown table 'db_name.shohin'

shohinテーブルがないと言われました。

sqlファイルのDROP TABLEをしている部分が問題なので、これをコメントアウトしていきます。何か所かあるのですが、全てコメントアウトしていきます。

$ vi make_data.sql

 
/* DROP TABLE shohin; */ 
CREATE TABLE shohin(
...
/*DROP TABLE shain;*/
CREATE TABLE shain(
...

再挑戦します。

$ mysql -u root db_name < path/to/make_data.sql
ERROR 1366 (HY000) at line 13: Incorrect string value: '\x83f\x83B\x83X...' for column 'shohin_name' at row 1

こんどは文字化けしていてデータが入れられないようです。

.sqlファイルの文字コードSHIFT_JISであることが問題なので、UTF-8に変換します。

変換方法はLinux ファイルの文字コード確認・変換 - Qiitaを参考にしました。

$ iconv -f SHIFT_JIS -t UTF-8 make_data.sql > make_data_utf8.sql

これでUTF-8に変換されたmake_data_utf8.sqlファイルができます。

make_data_utf8.sqlをデータベースに入れましょう。

$ mysql -u root db_name < path/to/make_data_utf8.sql
ERROR 1050 (42S01) at line 4: Table 'shohin' already exists

すでにテーブルがあると怒られました。今までのチャレンジでshohinテーブルが作られてしまっているので、削除します。

$ mysql -u root
mysql > USE db_name;
mysql > DROP TABLE shohin; # テーブルの削除
mysql > exit

再度挑戦します。

$ mysql -u root db_name < path/to/make_data_utf8.sql
$ mysql -u root  # 成功したかを確認する
mysql > USE db_name;
mysql > SHOW TABLES;
+-------------------------+
| Tables_in_gyakusanshiki |
+-------------------------+
| URIAGE                  |
| kokyaku                 |
| shain                   |
| shohin                  |
| shohin2                 |
+-------------------------+
5 rows in set (0.00 sec)

ついにテストデータを入れることに成功しました!