vagrant上のmysqlを5.6にUpdateしたメモ

以下の本を買ってみたけど、MySQLのバージョンが古すぎたので、Updateしたけど、いろいろ詰まったのでメモ

データベース徹底攻略 (WEB+DB PRESS plus)

データベース徹底攻略 (WEB+DB PRESS plus)

あんま人が読んでもわからないと思う。自分用メモの意味合いが強い

前提

  • vagrant上のやつをアップデート
  • mysqlのバージョンは5.1だったのを5.6.15までアップ
  • もともと入ってるデータがないに等しいので、何もバックアップしてない
  • レプリケーションは設定してない
  • slowlogの設定はした

作業メモ

$ sudo service mysql stop
$ sudo apt-get -y remove mysql-server mysql-client mysql-common
$ sudo apt-get -y autoremove
$ sudo apt-get -y autoclean
$ wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.15-debian6.0-x86_64.deb
# ↑これが数十分かかった

$ sudo dpkg -i mysql-5.6.15-debian6.0-*.deb
$ sudo sh -c 'echo "PATH=$PATH:/opt/mysql/server-5.6/bin" >> /etc/profile'
$ source /etc/profile
$ sudo vi /etc/mysql/my.cnf

basedir = /opt/mysql/server-5.6

$ sudo cp /opt/mysql/server-5.6/support-files/mysql.server /etc/init.d/mysql
$ sudo update-rc.d mysql defaults
$ sudo ln -s /opt/mysql/server-5.6/bin/mysqld /usr/sbin/mysqld
$ mysql_upgrade 
$ sudo service mysql start

vagrant@~$ mysql -uroot -e 'status' | grep -i 'server version'
Server version:         5.6.15 MySQL Community Server (GPL)

途中でエラーった

$ sudo vi /etc/mysql/my.cnf

[mysqld]
log-error=/var/log/mysql/error.log

$ sudo chmod o+rw /var/log/mysql
$ touch /var/log/mysql/error.log
$ sudo chmod o+r /var/log/mysql.error.log
$ tail -f /var/log/mysql.error.log

基本は、/var/lib/mysql以下がおかしくなってたので、ib_logfile0やら、ibdata1を消したらOKだった。

slowlogの確認

$ sudo vi /etc/mysql/my.cnf

+ slow_query_log=ON
+ log_output=TABLE
- long_query_time = 2
+ long_query_time = 0
※0秒にすると全ログ出るので、注意

[root][localhost][(none)]> show variables like 'slow%';
+---------------------+---------------------+
| Variable_name       | Value               |
+---------------------+---------------------+
| slow_launch_time    | 2                   |
| slow_query_log      | ON                  |
| slow_query_log_file | /tmp/mysql-slow.log |
+---------------------+---------------------+
3 rows in set (0.00 sec)

[root][localhost][(none)]> show variables like 'long%';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 0.000000 |
+-----------------+----------+
1 row in set (0.00 sec)

[root][localhost][(none)]> show create table mysql.slow_log;
~~~ 長いので省略 ~~~


# 適当にcreate database&table
[root][localhost][mysql]> create database test;
[root][localhost][mysql]> use test
[root][localhost][test]> CREATE TABLE example (
         id INT,
         data INT,
       ) ENGINE=InnoDB;
[root][localhost][test]> show tables;
+----------------+
| Tables_in_test |
+----------------+
| example        |
+----------------+
1 row in set (0.01 sec)

[root][localhost][test]> select * from example;
Empty set (0.00 sec)

[root][localhost][test]> select start_time,query_time,sql_text from mysql.slow_log order by start_time desc limit 1;
+---------------------+------------+---------------------------------------------------------------+
| start_time          | query_time | sql_text                                                      |
+---------------------+------------+---------------------------------------------------------------+
| 2014-03-16 15:45:57 | 00:00:00   | select * from mysql.slow_log order by start_time desc limit 1 |
+---------------------+------------+---------------------------------------------------------------+
1 row in set (0.00 sec)

まとめ

まだまだチューニングとか全然してないので、あとでアップデートするとは思うが、とりあえず、今のmy.cnfを貼っとく

my.cnf

prompt="[\\u][\\h][\\d]> "
auto-rehash

↑のプロンプトの設定いじりと、auto-rehashによる補完は便利なので入れたおきたいところ

参考サイト

ChatWorkにURLを貼り付ける際に整形するブックマークレット作った

そもそもなんのためにやってる?

コミュニケーションツールとして、ChatWork使ってるけど、面白いサイトとか共有したURLをChatWorkにURLを貼り付ける際には、相手にわかりやすくするためにURLだけを貼るのではなく、メッセージ記法でやってる

公式ドキュメントから引用

チャットワークAPIドキュメント

[info][title]...[/title]...[/info]

alt text

※公式サイトのURLからの画像を拝借しています。問題があれば削除します

上記タグを入れてあげると件名と内容が入る
自分の場合はtitleにタイトルとURLをいれて、infoにはコンテンツの中身を一部引用した感じで良く貼る

でコピペするのめんどくさくなったので、ブックマークレット化しただけ

上記リンクをコピペって、ブラウザのブックマークレットに入れるだけ。
引用したい部分をマウスでドラッグした状態で、ブックマークレットをクリックするとコピペできるWindowが出てくるので、それをコピペしてあとはChatWorkに貼るだけ

貼ると以下の形式になる

[info][title]タイトル( URL )[/title]マウスでドラッグしたところ[/info]

ただ、それだけ。
出力結果の画像貼ろうかと思ったけど、めんどくさくなったので、やめた。

nodejsで突然のエラー(events.js:72)の対処メモ

vagrant上でnodejsをいじってると、急にエラーが出た

vagrant@node$ node index.js
server has started

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: listen EADDRINUSE
    at errnoException (net.js:904:11)
    at Server._listen2 (net.js:1042:14)
    at listen (net.js:1064:10)
    at Server.listen (net.js:1138:5)
    at Object.start (/home/vagrant/node/server.js:11:32)
    at Object.<anonymous> (/home/vagrant/node/index.js:11:8)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)

ゴミのプロセスが残ってないか調査

vagrant@node$ ps ax | grep node
 4290 pts/2    Sl+    0:00 node index.js
10478 pts/5    S+     0:00 grep node

起動しっぱなしのプロセスがあるっぽいので、KILLする

vagrant@node$ kill 4290

終了

VagrantとSunziを組み合わせて環境構築

Vagrantそこまでガッツリいじってなかったので、いじってみたメモ

前置き

Vagrantの説明はここではしない。
ググったらいくらでも記事出てくると思うので。。。

VagrantにはプロビジョニングツールのChefとかPuppetと組み合わせて当たり前でしょ?みたいな空気があってそれも勉強しないとだめな雰囲気があって覚えることが多いから躊躇してたけど、@jishihaさんからSunziってのものがあるよって教えてもらったのでそれと組み合わせていじってみました。

結果的にShellScriptでやってますが、ShellScriptでやるメリットとして、誰が見てもわかりやすいという敷居低さがあると思ってます。
ChefがわからなくてもLinuxのセットアップをやったことがあれば多分理解できるはず…。
単純にShellScriptでやるよりもSunziでやったほうがスマートに出来ました。

Sunziとは?

Sunzi for GitHub

Sunzi is the easiest server provisioning utility designed for mere mortals. If Chef or Puppet is driving you nuts, try Sunzi!

と書かれてます。簡単なプロビジョニングツールです。 詳しくはGitHubのREADMEを見てもらえればいいんですが、RubyでのセットアップかShellScriptでできるようで、自分はShellScriptで設定しました。

Vagrantfileに以下の一文を追加して、Vagrantの設定をしましょう。(READMEに書いてる)

echo 'root:vagrant' | /usr/sbin/chpasswd

次に、sunziのインストールをします。

sudo gem install sunzi 

あとはdeployするだけでVagrantに設定が反映されますが、 deployする前に設定しましょう。

Sunziの設定

$ tree
.
├── compiled
│   ├── attributes
│   │   ├── environment
│   │   └── ruby_version
│   ├── install.sh
│   ├── recipes
│   │   ├── rvm.sh
│   │   └── sunzi.sh
│   └── roles
│       ├── db.sh
│       └── web.sh
├── files
├── install.sh
├── recipes
│   └── sunzi.sh
├── roles
│   ├── db.sh
│   └── web.sh
└── sunzi.yml

こんな感じ。 基本いじるのはinstall.shとroles下に新規で**.shってのを追加するだけ。
roles/db.shとかは中身見ればわかるが、カテゴリごとに分けられたシェル。

$ cat roles/web.sh
# Install Web server

apt-get -y install nginx        # Nginx
# apt-get -y install apache2    # Apache

vimの初期にインストールさせたい場合はrole/vim.shとか作ってもいいし、なんかのCMSの初期設定とかを入れてもいい。

※注意点

  • Rootで実行する前提なので、~/とかって設定ファイルを反映させる場合は/root以下にできたりするので注意
  • どっかで失敗するとそこで止まってその先が進まない(自分だけかも)

設定が完了するとあとはDeployして反映させるだけ。
deployすると、Vagrantの/rootにsunziフォルダができて、いろいろ実行してくれます。

sunzi deploy localhost:2222

port番号はvagrant ssh-configで調べましょう。

まとめ

Chef等のプロビジョニングじゃなくてShellScriptで設定できるし、Vagrantじゃなくてもその辺のVPSにも設定できるだろうし、良さ気。
ファイルもカテゴリごとに分けておけるし、管理もしやすい。

おまけ

設定するものはなんでもよかったけど、concrete5が公式サイトのリニューアルするらしいので、それを対応させたvagrantファイルとsunziをGithubにあげておきました。

とりあえず、これダウンロードさせてvagrant upとsunzi deployかませばサンプルサイトができあがる
(少なくともオレの手元では…)

  • VagrantのこのBOXをベースにLAMPを作ってるのでちょっと古いかも
  • MySQLmysql -urootで入れるので、ユーザー:rootでPasswordは空っぽでいける。
  • vimは自分の.vimrcが入っちゃってるので、環境によっては色とかおかしいくなるので、.vimrcは捨てたほうがいいかも
  • .bashrcとか.tmux.confも気に入らなかったら捨ててね
  • .gitconfigとかいじってないからコピってください
  • Vagrantには scp -P 2222 Vagrantfile vagrant@localhost:~/とかあげれる
  • わからなければ、誰かが作ったchefで動かすVagrantGitHubにあったはずなのでそっち見てね

参考リンク