Monthly Archives: 3月 2015

mysqldump実行時のエラー Couldn’t execute ‘SET OPTION SQL_QUOTE_SHOW_CREATE=1’

By | 2015/03/31 8:00 PM

MySQL 5.5がインストールされているサーバーから
MySQL 5.6のデータベースをmysqldumpしようとした時に下記のエラーが出てdumpに失敗しました。

Couldn’t execute ‘SET OPTION SQL_QUOTE_SHOW_CREATE=1’

MySQL 5.6ではSET OPTION構文が廃止されているようです。

Bug #67507
mysqldump from 5.5 fails with an error when trying to dump data from mysql-5.6
http://bugs.mysql.com/bug.php?id=67507

5.5系では5.5.34以降で修正されているとのこと。
まずはクライアント側のディストリビューションを調べてみます。

mysqldump Ver 10.13 Distrib 5.5.18, for Linux (x86_64)

5.6系以降にアップグレードすれば良い話ですが、5.5のままで稼働したいサーバーだったため、
5.5系の現時点での最新バージョン(5.5.42)にアップグレードしてみます。

念のためMySQLをバックアップ。

お気に入りの圧縮形式lz4で圧縮しつつdumpしています。

lz4をインストールしたい場合は下記コマンドでインストール。

一応MySQLの設定ファイルもバックアップ。

現在のMySQLのインストール状況を確認。

「MySQL-」ではじまる5.5系のものを全て削除。

最新バージョン確認。
http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.5

ダウンロード&インストール。

MySQLスタート。

MySQLアップグレード。

念のためMySQL restart。

ディストリビューション(バージョン)確認。

mysqldump Ver 10.13 Distrib 5.5.42, for Linux (x86_64)

ディストリビューションが5.5.18から5.5.42にアップグレードされました。

再度mysqldumpを実行したところ、成功しました。

find結果をlsで表示(xargsのr, no-run-if-emptyオプション)

By | 2015/03/18 12:34 PM

find結果をlsで表示する場合、find結果が無い場合に単純にls単発の結果が表示され、予想していた結果にならずにハマりました。

7日前から現在までに更新されたファイルをfindで検索し、結果をlsで表示

まずはfindのmtimeオプションについて。

find: -mtime n
ファイルのデータが最後に修正されたのが n*24 時間前なら真。

一例を載せておきます。

findの -print0 オプション とxargsの -0 オプション の組み合わせは、
スペースが含まれているファイル名も正常に検索してくれるので、つける癖をつけています。

find: -print0
真を返す。ファイル名をフルパスで標準出力に表示し、各ファイル名にヌル文字を付加する。
このオプションを用いれば、 find の出力を処理するプログラムにおいて改行文字を含んだ
ファイル名を正しく解釈できるようになる。

xargs: --null, -0
標準入力からの文字列の区切りに、空白ではなくヌル文字が使われているとみなす。また引用符やバックスラッシュに特別の意味を持たせず、すべての文字をそのまま用いる。
ファイル終了文字列も無効となり、他の文字列と同じように扱われる。
入力される文字列に空白・引用符・バックスラッシュが含まれている場合に有用であろう。
GNU find の -print0 オプションの出力を、このオプションを指定した xargs の入力とすると良い。

xargsの -r 、または --no-run-if-empty オプションは、標準入力が空の場合は何もしません。
このオプションをつけた場合、find結果が空の場合に何も表示されなくなり、期待していた結果となります。

xargs: -r, --no-run-if-empty
標準入力に空行しか含まれていない場合、コマンドを実行しない。
通常は入力がない場合でもコマンドは一回実行される。

q Text as Data

By | 2015/03/03 8:03 PM

http://harelba.github.io/q/

tsvファイルやcsvファイル等をそのままSQLであれこれしてしまおうという感じ。

ということで面白そうなので使ってみました。

で、rpm取得してインストール

早速使ってみましょう。

コレ、CSVとかで無くても大丈夫見たいなのです。
なので今回はアクセスログをゴニョゴニョしてみます。

で行けるみたいです。

出力結果は、まぁ元のファイルに依存するみたいなのでそれぞれ見ていただければと思います。

オプション
-D
 出力のファイルのデリミタ
 ex)
  -D $’\t’ => TSVファイル
-d
 入力のファイルのデリミタ
 ex)
  -d ,   => CSVファイル
-O
 出力ファイルのヘッダーを出力
-H
 入力ファイルのヘッダーをカラム名として利用
-e
 入力ファイルの文字エンコーディング
-Q
 クエリの文字エンコーディング

などなど
後は

でご確認を

的なファイルがあったとして、
iPhone、Android、その他でデバイス別に各ファイルのアクセス数をソートして見てみたい
といった時

とかとかやれば

的な結果が帰ってくる

JOINもできるみたいなので、色々やれそうで面白いですね。

で、中でどうやってるのかなーとソースを見てみる。

https://github.com/harelba/q/blob/master/bin/q
githubで公開されているのでかる~く流し読み。

ほほぅ なるほど
sqlite使ってるのね
メモリ型でやってるから高速に処理できると。

と、いうことは、sqliteの構文ならそれなりに使えそう。

機会があれば色々使ってみようかな。