Author Archives: MoriMori

MoriMori

About MoriMori

2007年11月 27歳にしてプログラマーとしての道を志し、某就職支援会社のPHPスクールに通い始める 2007年12月 株式会社パクレゼルヴに紹介予定派遣社員として入社 2008年4月 株式会社パクレゼルヴの正社員となる 2013年4月 株式会社PRECSとして分社後も在籍 70% WEBエンジニア、30% インフラエンジニア

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
標準入力に空行しか含まれていない場合、コマンドを実行しない。
通常は入力がない場合でもコマンドは一回実行される。

phpで月末最終営業日(土日、祝日、会社が定める休日を除いた月末の営業日)を取得

By | 2015/02/24 9:08 PM

会社の月末の最終営業日にアラート通知を行う、といったことをしたかったので作りました。

祝日リストは配列で定義するなりyaml等で設定ファイルを作るなりDBで管理するなりGoogleカレンダーAPIで取得するなりして配列として読み込みます。

PEAR::Net_IPv4のvalidateIPを使ってドット区切りのIPアドレスかどうかを判別・・・が当てにならない

By | 2014/12/08 8:39 PM

Net_IPv4のVersion 1.3.4にて動作確認しました。

http://pear.php.net/manual/ja/package.networking.net-ipv4.validateip.php

Net_IPv4::validateIP() – 与えられた IP アドレスの書式を検証する

IP アドレスの形式ががドット区切りであるか検証します。
アドレスが有効な場合、true を返し、そうでなければ false を返します。

※2014年12月8日現在、「がが」と誤表記となっていますがそのままコピペしました。

下記のような結果になります。

なぜかint(0)の場合、trueが返ってきます。
「アドレスが有効」と見なされたわけです。

素直に正規表現で判別することに。

結果。

ハマりました。