はじめに
IT勉強会にて「ISUCON4 オンライン予選問題」をやってみることになり、自分用メモとしてローカル環境で動作させるための手順書を作成してみました。
「データベース」と「ソースファイル」の章は全言語共通、「Webサーバー」の章はGoを対象としています。
自分用メモの都合上、以下のOSとコマンドを使用しています。必要に応じて各自の環境に読み替えて下さい。
OS
- Mac OS X 10.8.5
コマンド
- homebrew(パッケージ管理:MySQLのインストールに使用)
- vim(テキストエディター:文字列の追加と置換に使用)
MySQLは触った事がないため、ユーザーやセキュリティなどの各種設定は出来ておりませんm(__)m
データベース
MySQLをインストール
最初、公式サイトのdmgファイルでインストールしようとしたのですが、インストール後のファイル容量が大きそうだったので断念。tar.gzファイルもあるのですが、展開後の設定方法などがわからなかったのでhomebrewにてインストールしました。
$ brew update
$ brew install mysql
MySQLのバージョンを確認
$ mysql --version
mysql Ver 14.14 Distrib 5.6.21, for osx10.8 (x86_64) using EditLine wrapper
MySQLサーバーの起動と停止の方法
以下、手動による操作です。
起動
$ mysql.server start
Starting MySQL
. SUCCESS!
停止
$ mysql.server stop
Shutting down MySQL
. SUCCESS!
設定ファイル(my.cnf)を修正
後述のinit.sh
を実行した時、以下のエラーになります。
ERROR 2006 (HY000) at line 1: MySQL server has gone away
MySQLでは、クライアントからサーバーにデータを送信する時のパケットサイズがデフォルトで1Mらしいのですが、今回はそれでは足りないらしく最大値の16Mで設定しました。(ちなみに8Mでもダメでした。)
テキストエディター(ここではvim)にてmy.cnfを開く。
$ vim /usr/local/Cellar/mysql/5.6.21/my.cnf
以下の一行を追加。
max_allowed_packet = 16M
ソースファイル
GitHubからisucon4のリポジトリーを取得
カレントディレクトリーを移動。
$ cd $GOPATH/src/github.com
今回はgit clone
にてソースを取得。
$ git clone https://github.com/isucon/isucon4
Cloning into 'isucon4'...
remote: Counting objects: 269, done.
remote: Total 269 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (269/269), 20.02 MiB | 480 KiB/s, done.
Resolving deltas: 100% (22/22), done.
サンプルデータ(dummy_log.sql)を修正
カレントディレクトリーを移動。
$ cd isucon4/qualifier
後述のinit.sh
を実行した時、以下のエラーになります。
ERROR 1292 (22007) at line 1: Incorrect datetime value: '2014-02-22 00:00:00 +0900' for column 'created_at' at row 1
ファイル内のデータ値は'2014-02-22 00:00:00 +0900'ですが、datetime型は'2014-02-22 00:00:00'までらしいので' +0900'を削除します。
テキストエディター(ここではvim)にてdummy_log.sqlを開く。
$ vim sql/dummy_log.sql
コマンドモードにて、文字列の置換を実行。
:%s/ +0900//g
データベースの作成&データのセットアップ
MySQLサーバーを起動。
$ mysql.server start
init.sh
を実行して、データベースの作成とデータのセットアップを実施。
$ ./init.sh
+ set -e
++ dirname ./init.sh
+ cd .
+ myuser=root
+ mydb=isu4_qualifier
+ myhost=127.0.0.1
+ myport=3306
+ mysql -h 127.0.0.1 -P 3306 -u root -e 'DROP DATABASE IF EXISTS isu4_qualifier; CREATE DATABASE isu4_qualifier'
+ mysql -h 127.0.0.1 -P 3306 -u root isu4_qualifier
+ mysql -h 127.0.0.1 -P 3306 -u root isu4_qualifier
+ mysql -h 127.0.0.1 -P 3306 -u root isu4_qualifier
Webサーバー
関連パッケージの取得&コンパイル
カレントディレクトリーをGoのディレクトリーに移動。
$ cd webapp/go
build.sh
を実行すると、martini(Webフレームワーク)やMySQLドライバーがgo get
(ダウンロード)された後、go build
(コンパイル)が実行されます。
$ ./build.sh
Webサーバーを起動
golang-webapp
コマンドが生成されるので、それを実行。
$ ./golang-webapp
動作確認
Webブラウザーにて、以下のURLにアクセス。
http://127.0.0.1:8080/
トップページが表示されれば、Goの設定が完了していることを確認できます。
データベースの設定が完了しているかどうかは、ログインして確認します。
ご契約ID:isucon1
パスワード:isuconpass1
次のページが表示されれば、データベースの設定が完了していることを確認できます。