『逆算式SQL教科書』のテストデータをCentOS6のMySQLに入れる
『逆算式SQLの教科書』という本でSQLの勉強をすることにしました。
少し古い本ですが、評価は高いようです。
テストデータがダウンロードできるということでCentOSに入れようと思ったのですが、本の方ではWindowsでのセットアップの方法しか書かれておらず手間取ったので、その手順をメモとしてまとめておきます。
CentOS6にMySQL5.7を入れる
MySQLのインストール
自分のCentOSにMySQLがまだ入っていなかったので、その準備から。
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 root
でmysqlに入れるようになりました。
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)
ついにテストデータを入れることに成功しました!