MySQLにCSVでインポート

これはver3のころよくやっていた方法ですがここ数年ずっと使用してなくて思い出すように検索してました。一応健忘録。

以下は全フィールドでのインポート・エクスポートに難がある場合に使用します。
※主キーが内容に特別意味を持たないauto_incrementの場合等、インポート時にキー重複でエラーになると困るもの。

CSVにおいてもエクスポート・インポート共にフィールド指定。

【エクスポート】
mysql> select text,cre_date into outfile ‘/tmp/db.tsv’ lines terminated
by ‘n’ from csvtest;
Query OK, 24 rows affected (0.00 sec)

【インポート】
mysql> load data infile ‘/tmp/db.tsv’ into table csvtest lines
terminated by ‘n’ (text,cre_date);
Query OK, 24 rows affected (0.00 sec)
Records: 24 Deleted: 0 Skipped: 0 Warnings: 0

但しtimestampのフィールドは00000000000000になったので無視できないですね。

FedoraにPHPをソースから入れると…

MySQLだけでは操作がしんどいのでphpMyAdmin使うためにApacheとPHPをソースから入れてみました。デスクトップ環境は全てパッケージ任せですが、ローカルでテスト稼動環境作るのには公開用と同じくソースから入れているのですが、Apacheを起動しようとしたときに、

# /usr/local/apache/bin/apachectl start
httpd: Syntax error on line 53 of /usr/local/apache/conf/httpd.conf: Cannot load /usr/local/apache/modules/libphp5.so into server: /usr/local/apache/modules/libphp5.so: cannot restore segment prot after reloc: Permission denied

こんなエラー出るんですね。文法エラー?でconfigtestしても同じ表示だし意味不明だったのでネットで検索したらSELinuxのセキュリティーが絡んでて、自前で入れたsoライブラリが使えないように制限しているらしい。詳しいことは良く分からないので下部の参考サイトで、

結果として次のコマンドを実行することでlibphp5.soがロードできるようになりました。
# chcon -c -v -R -u system_u -r object_r -t textrel_shlib_t /usr/local/apache/modules/libphp5.so

参考:
cannot restore segment prot after reloc Permission denied – Linuxシステム設定
http://ppwww.phys.sci.kobe-u.ac.jp/~akusumoto/linux/detail.php?d=config/selinux/chcon

Fedora JP 掲示板
http://bbs.fedora.jp/read.php?FID=9&TID=3278
http://bbs.fedora.jp/read.php?FID=10&TID=4759

Cannot restore segment prot after reloc Permission deniedというエラーメッセージが表示されたら,どうしたらよいのですか.
http://support.wolfram.com/mathematica/systems/linux/general/selinux.ja.html

16進ダンプでも心配なMySQL

さすがに16進なら大丈夫だろうと思っていたら、他のサーバへデータを移動する為にインポートしようとしたら

ERROR 1054 at line 98603: Unknown column ‘0x’ in ‘field list’

このようにエラーを吐いて処理が止まった。
結局どんな吐き出し方をしたのだろうと確認すると、元のDBでは空文字(NULLでは無い)状態になっている文字列フィールドでダンプ時に0xのみ出力されていました。

NULLであれば
VALUES(NULL,NULL,NULL);
という感じになるところが空文字だと
VALUES(0x,0x,0x);
となっていました。終端文字を吐き出さない仕様だからこうなるのでしょうが、同じバージョンのMySQLならインポートも対応しろよって思いました。

結局空文字はNULLでも良かったのでテキストエディタで置換してインポート終了しました。どうしても空文字で入れたいのであれば0xを”に置換してもいいですね。

使用したバージョン:4.0.26