Go言語でデータベースを扱えるようにする方法を紹介します。
go-wikiを見てみると色々ライブラリありますが、今回はMyMySQLというライブラリを使用します。
go-wiki
http://code.google.com/p/go-wiki/source/browse/SQLDrivers.wiki?repo=wiki
MyMySQL
https://github.com/ziutek/mymysql
参考にしたのはやしさんの「Androg golangからMySQLを使うには」です。
http://androg.seesaa.net/article/290624952.html
やしさんは「MySQLをインストールする方法はググれ」といってますが、僕がMySQLを入れてなかったので、入れたついでにメモしてたので、今回は前編としてMySQLをインストールするところから説明します。
実際にMyMySQLライブラリを使うのは後編になるので、今回は全然Go言語出てきません。
環境はいつものUbuntu12.04になります。
■MySQLをインストールする
以下を参考にしています。というか翻訳的な感じで解説していきます。
https://help.ubuntu.com/12.04/serverguide/mysql.html
MySQL5.5をインストールします。
sudo apt-get install mysql-server
※UbuntuServer12.04の場合はデフォルトでインストールされているそうです。
clientも一緒にインストールされます。
インストール中にMySQLのrootユーザのパスワードを求められます。
もしrootのパスワードを変更したくなったら下記コマンドで変更できるので、とりあえずでも構わないです。
sudo dpkg-reconfigure mysql-server-5.5
インストールが終わったら、MySQLサーバが起動しているか確認します。
sudo netstat -tap | grep mysql
もし
tcp 0 0 localhost:mysql *:* LISTEN 2556/mysqld
のような結果が帰ってきた場合、ちゃんと起動しています。
※「localhost:mysql」が「LISTEN」状態ならOKだと思います。
もし上記のような結果が返ってこなかったら、
sudo service mysql restart
を実行します。
これはMySQLサーバを再起動するコマンドです。
もし「mysql stop/waiting」(または「stop: Unknown instance:」)の後に
mysql start/running, process xxxxx
のような結果が返ってくれば再起動成功です。
もし
start: Job failed to start
が返って来ると再起動失敗です。
※こうなると原因はその状況によりけりなので、頑張って調べるしかないですね・・・。
■MySQLの初期文字コードの変更
初期状態だと文字コードがclientがutf-8、serverがlatin1になっていると思います。
とりあえずutf-8に統一しましょう。
設定ファイルを編集します(※1)。
/etc/mysql/my.cnf
を編集しますが、まずはバックアップを取りましょう。
sudo cp /etc/mysql/my.cnf /etc/mysql/back_my.cnf
適当なエディタで開いてください。
sudo gedit /etc/mysql/my.cnf
今回はMySQL5.5なので、
[mysql] default-character-set=utf8 [mysqld] character-set-server=utf8
を設定します。(※2)
※1:
/etc/mysql/my.cnf が設定ファイルとして有効になるのは、MySQL5.1以降だそうです。
※2:
character-set-server=utf8 が有効になるのは、MySQL4以降だそうです。
■サーバアドレスの変更
MySQLサーバとして運用する場合、サーバのアドレスを設定する必要があります。
[mysqld]の設定項目の
bind-address
をサーバのアドレスに変えます。
※デフォルトでは127.0.0.1になっているので、ローカルでのみ使用するならこのままでOKですね。
変更した場合は、
sudo service mysql restart
を実行します。
■MySQLの操作
ルートユーザでMySQLサーバに接続します。
mysql -u root -p
プロンプトが「mysql>」になったと思います。
これはMySQLクライアントのプロンプトになります。
以降はこの状態でコマンドを入力していきます。
さっき文字コードを変更したので、ちゃんと反映されているか確認しましょう。
mysql> SHOW VARIABLES LIKE "char%";
下記のように表示されていればOKです。
+--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec)
もし、「character_set_database」と「character_set_server」がlatin1の場合は、設定が反映されていません。
一度、
mysql> EXIT;
で抜けて、設定ファイルにちゃんと記述できてるかや、サーバ再起動で反映してください。
それでも反映できなかった場合(またはmy.cnfが編集できない場合)は、データベースを作成する時に、データベースの文字コードを設定することでも対応できます(後述)。
■DBを作成する
下記コマンドはデータベース一覧を表示します。
mysql> SHOW DATABASES;
まずはサンプル用にDBを作ってみます。DB名は「sampledb」にしました。
mysql> CREATE DATABASE sampledb;
もし、文字コードを指定して作成する場合は以下のようにしてください。
mysql> CREATE DATABASE sampledb DEFAULT CHARACTER SET utf8;
この場合だと、文字コードはutf8で作成することになります。
データベース一覧を確認すると「sampledb」が追加されていると思います。
■ユーザを作成する
rootユーザを使い続けたり、開発中のユーザとして使うのはあまりよろしくないと思います。
なので、新規でユーザを作成します。
ユーザ名は「sampleuser」にしていますが、任意に変えて、以降は置き換えて読んでくれれば良いと思います。
また、最後のシングルクォーテーションで囲ってある箇所はパスワードの設定なので、任意の文字列に置き換えてください。
mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON sampledb.* TO sampleuser@localhost IDENTIFIED BY '(パスワード)';
ユーザ名「sampleuser」に「sampledb」のすべてのテーブルに対するDMLが扱える権限を与えています。
ユーザ名の後に「@localhost」とつけていますが、アクセスするホスト名を指定しています。
※これを付けないと実はlocalhostからもアクセスできません。僕ははまっちゃいました。
何も指定していない状態では'%'が当てられます。これは'%.kobegdg.blogspot.jp'のようにすると、kobegdgドメインのすべてのホストが対象になる、というものなのですが、ちゃんと指定しないといけないみたいですね。
MyMySQLライブラリのテストユーザとして使いたいなら、権限はDROP、CREATEを与えるか、ALLで作成してください。
また次回MyMySQLライブラリのテストをする時に、テストユーザを作ろうと思っているので、今回はそのままでも構わないと思います。
一度、
mysql> EXIT;で抜けて、
mysql -u sampleuser -p sampledb
でMySQLサーバに接続できればOKです。
次回後編は実際にMyMySQLを使ってみたいと思います。
0 件のコメント:
コメントを投稿