美味しいもの

初心に帰って調べもの。

全体表示

[ リスト ]

超びっくりな情報!(゜∀゜)だったので、メモします。
とーっても参考になりました ⇒ http://oshiete1.goo.ne.jp/qa1030943.html

LOAD DATA ほげほげ

この構文には以下の2種類があります。

○mysqlサーバ上のファイルの場合
LOAD DATA INFILE 'hogehoge.txt' INTO TABLE a;

○mysqlコマンドを実行しているコンピュータ上のファイルの場合
LOAD DATA LOCAL INFILE 'hogehoge.txt' INTO TABLE a;

いずれにしても、実行ユーザにはFILE権限が必要です。
しかーし!それだけでは、シェル上からしか実行できなかったのです。。。

事件は起こった

ファイル権限つけたのに出来ない(つ´∀`)つ
$ mysql -uUser1 -pPasswordA databaseD
mysql> LOAD DATA LOCAL INFILE '/tmp/data.csv' INTO TABLE tableV;
ERROR 1148 (42000): The used command is not allowed with this MySQL version
つД`)・゚・。・゚゚・*:.。なんでーーーと思い、さまよったところ。。。。
http://dev.mysql.com/doc/refman/4.1/ja/load-data-local.html
mysql コマンドラインクライアントに対しては、
--local-infile[=1] オプションで LOAD DATA LOCAL を有効にでき、
--local-infile=0 オプションで無効にできます。 
だって!!!
さっそくログアウトして、やり直し。。
$ mysql --local-infile=1 -uUser1 -pPasswordA databaseD
mysql> LOAD DATA LOCAL INFILE '/tmp/data.csv' INTO TABLE tableV;
Query OK, 5 rows affected, 5 warnings (0.03 sec)
Records: 5  Deleted: 0  Skipped: 0  Warnings: 0
超はっぴーヽ(´ー`)ノ

PerlのDBIサンプル

最近またPerlを使いはじめたので、..._〆(゚▽゚*)
  my $dsorce = sprintf( "DBI:mysql:%s:%s:%s;%s;5s",
    $db_name,
    $db_host,
    $db_port,
    'mysql_local_infile=1', # ★これが --local-infile=1 の代わり
    'mysql_compression=1' );
    
  my $dbh = DBI->connect( $dsorce, $user, $password,
        {
          RaiseError => 1,
          PrintError => 0,
          mysql_auto_reconnect=>1,
          AutoCommit => 0,
        } );

PHPのPDOサンプル

最近よくPHPを使うので、..._〆(゚▽゚*)
  //データベースに接続する   
  $pdo = new PDO( $dns, $user, $pass, array(
    PDO::ATTR_PERSISTENT => true,
  PDO::MYSQL_ATTR_LOCAL_INFILE => true,  ←★ここ!
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET CHARACTER SET ujis;'
  ));
  echo "接続しました\n";
で、OKです。

事件は起こった2

レプリケーションしているシステムで、LOAD DATA LOCAL INFILE でデータを入れたところ、孫スレーブのレプリケーションが止まった。
エラーは以下の通り。
 [ERROR] Error reading packet from server: error reading log entry ( server_errno=1236)
 [ERROR] Got fatal error 1236: 'error reading log entry' from master when reading data from binary log
結局のところの原因は不明。。
max_allowed_packetの制限に引っ掛かると出るらしいという情報もあったけど、マスターができてSlaveができない理由にはならない。。同じ設定だから。

( でも、念のため、すべて同一の設定にして、128M位のデータにまとめることをお勧め。 )
( 個人的には 32MB くらいがいいのかもと思ったりもする。             )

バージョン違いとうことになると、成功した子Slaveと失敗した孫Slaveは同じバージョン。MySQLのバグなわけ?!と悩んでもしょうがないので、別の方法を探る。

参考にしたのは以下のサイト。
http://d.hatena.ne.jp/ringmaster/20080411/1207895946

【構成】ファイル:493M
マスタ :5.0.41-log:成功
子Slave:5.0.51b  :成功
孫Slave:5.0.51b  :失敗
孫Slave:5.0.77  :失敗
孫Slave:5.0.77  :失敗

この記事に

閉じる コメント(0)

コメント投稿

顔アイコン

顔アイコン・表示画像の選択

名前パスワードブログ
絵文字
×
  • オリジナル
  • SoftBank1
  • SoftBank2
  • SoftBank3
  • SoftBank4
  • docomo1
  • docomo2
  • au1
  • au2
  • au3
  • au4
投稿

.


みんなの更新記事