inohilog

/var/log/inohiro.log

sudo gem install mysql に失敗するとき

  • rake db:migrate してもエラーがでる -> mysql を使う環境が整ってないんじゃ...
$ rake db:migrate
ERROR: Failed to build gem native extension.
inohiro@ubuntu:~$ sudo gem install mysql
Building native extensions.  This could take a while...
ERROR:  Error installing mysql:
	ERROR: Failed to build gem native extension.

/usr/bin/ruby1.8 extconf.rb
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lm... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lz... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lsocket... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lnsl... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lmygcc... no
checking for mysql_query() in -lmysqlclient... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

Provided configuration options:
	--with-opt-dir
	--without-opt-dir
	--with-opt-include
	--without-opt-include=${opt-dir}/include
	--with-opt-lib
	--without-opt-lib=${opt-dir}/lib
	--with-make-prog
	--without-make-prog
	--srcdir=.
	--curdir
	--ruby=/usr/bin/ruby1.8
	--with-mysql-config
	--without-mysql-config
	--with-mysql-dir
	--without-mysql-dir
	--with-mysql-include
	--without-mysql-include=${mysql-dir}/include
	--with-mysql-lib
	--without-mysql-lib=${mysql-dir}/lib
	--with-mysqlclientlib
	--without-mysqlclientlib
	--with-mlib
	--without-mlib
	--with-mysqlclientlib
	--without-mysqlclientlib
	--with-zlib
	--without-zlib
	--with-mysqlclientlib
	--without-mysqlclientlib
	--with-socketlib
	--without-socketlib
	--with-mysqlclientlib
	--without-mysqlclientlib
	--with-nsllib
	--without-nsllib
	--with-mysqlclientlib
	--without-mysqlclientlib
	--with-mygcclib
	--without-mygcclib
	--with-mysqlclientlib
	--without-mysqlclientlib


Gem files will remain installed in /var/lib/gems/1.8/gems/mysql-2.8.1 for inspection.
Results logged to /var/lib/gems/1.8/gems/mysql-2.8.1/ext/mysql_api/gem_make.out

どうやら prefix が必要らしい

  • mysql_conig の場所を教えてあげる必要があるみたい
    • 適当に探してみたら「/usr/local/mysql/bin/mysql_config」にあった
    • 「/usr/bin/mysql_config」にある場合もあるみたい
inohiro@ubuntu:~$ sudo gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
Building native extensions.  This could take a while...
Successfully installed mysql-2.8.1
1 gem installed

Installing ri documentation for mysql-2.8.1...
# 省略

Installing RDoc documentation for mysql-2.8.1...
# 省略
  • うまくいったようだ

単純に prefix を渡してもダメな場合は、mysql_devel をインストール

$ sudo aptitude install mysql_devel

"uninitialized constant MysqlCompat::MysqlRes"

inohiro@ubuntu:~$ sudo aptitude install libmysqlclient15-dev
[sudo] password for inohiro: 
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
拡張状態情報を読み込んでいます       
パッケージの状態を初期化しています... 完了
libmysqlclient15-dev のインストール候補のバージョンが見つかりません
libmysqlclient15-dev のインストール候補のバージョンが見つかりません
以下のパッケージは『削除』されます:
  linux-headers-2.6.32-22{u} linux-headers-2.6.32-22-generic{u} 
0 個のパッケージを更新、 0 個を新たにインストール、 2 個を削除予定、0 個が更新されていない。
0B のアーカイブを取得する必要があります。 展開後に 85.3MB のディスク領域が解放されます。
先に進みますか? [Y/n/?] y
拡張状態情報を書き込んでいます... 完了
(データベースを読み込んでいます ... 現在 240225 個のファイルとディレクトリがインストールされています。)
linux-headers-2.6.32-22-generic を削除しています ...
linux-headers-2.6.32-22 を削除しています ...
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
拡張状態情報を読み込んでいます      
パッケージの状態を初期化しています... 完了
拡張状態情報を書き込んでいます... 完了        
  • まだ解決してない
    • どうやらSnow Leopard にすると出たりしている人がいるみたいだが...(今回はUbuntu 10.04, MySQL 5.1)

sqlite3 に CSV形式のデータを突っ込む

  • -separator で区切る文字を指定(=> CSV形式でなくてもいけますな)
  • "" の中身は、.import CSVファイル名 テーブル名

コマンドラインから実行

$ sqlite3 -separator , development.sqlite3 ".import hogehoge.csv hogehoges"

sqlite3 コマンドを実行後、(インタラクティブモード?)で実行

$ sqlite3 development.sqlite3
sqlite> .import hogehoge.csv hogehoges

注意

MySQLで、テーブルを丸ごとCSVで入出力する

  • SQL でできるみたい

入力(import)

mysql> load data local infile "ファイル名" into table テーブル名 fields terminated by ',';

出力(export)

mysql> select * from テーブル名 into outfile "ファイル名" fields terminated by ',';
  • 各データを「"」でくくる場合
mysql> select * from テーブル名 into outfile "ファイル名" fields terminated by ',' enclosed by '"';

注意というかメモ

  • export時に「ファイル名」に任意の場所を書くとエラーになる場合がある
    • Errecode 13: 権限がない(Permission Denied)
    • Errecode 2 : 指定されたファイルや場所がない
  • 管理者権限でmysqlコマンドを実行しても、任意のパスで保存できない(ときがあった)
    • でもカレントディレクトリにそのまま保存(つまり、ファイル名が"hoge.csv"とか)は、可能
    • さて、どこに保存されたんだ -> 「/var/lib/mysql/データベース名/」(Ubuntu 10.04, MySQL 5.1)以下にある(cdするには管理者権限が必要)
  • 他のサイトを見ても、同じような現象に悩んでいる人はいなかった...