2013-12-19 10 views
5

mysqldumpの一般的な場所をすべて知りたいと思っています。次のように私が出ているリストは、次のとおりです。mac/linuxのmysqldumpの共通インストール先

'/usr/bin/mysqldump', //Linux 
'/usr/local/mysql/bin/mysqldump', //Mac OS X 
'/usr/local/bin/mysqldump', //Linux 
'/usr/mysql/bin/mysqldump'; //Linux 

は、多くの場合、パス内のmysqldumpではありませんので、私はに見てすべての場所を持ってしようとしています(私はPHPスクリプトからこれを実行しています)。

私には欠けているものはありますか?

+0

最初に実行したときに 'find -name mysqldump -type f -perm/u = x'を実行して、ファイルに値をキャッシュしましたか? –

+0

私は試していません。私はちょうど私のMacでこれを行い、 'find:-perm:/ u = x:不正なモード文字列' –

+0

古いバージョンのfindのように見える、-perm/u + xまたは-perm/444、 +444 –

答えて

6

あなたの質問に与えられたパス以外のパスは見つかりませんでした。しかし、私の考えでは、mysqldumpは、ほとんどの場合、mysqlバイナリと同じディレクトリにあるはずです。現在、ほとんどの場合、mysqlコマンドがパスに入ります。

そして、そのため、あなたはこのように、ほとんどの場合、mysqldumpバイナリの場所を持っているために、2つのロジックを組み合わせることができます:

function detect_mysqldump_location() { 

    // 1st: use mysqldump location from `which` command. 
    $mysqldump = `which mysqldump`; 
    if (is_executable($mysqldump)) return $mysqldump; 

    // 2nd: try to detect the path using `which` for `mysql` command. 
    $mysqldump = dirname(`which mysql`) . "/mysqldump"; 
    if (is_executable($mysqldump)) return $mysqldump; 

    // 3rd: detect the path from the available paths. 
    // you can add additional paths you come across, in future, here. 
    $available = array(
    '/usr/bin/mysqldump', // Linux 
    '/usr/local/mysql/bin/mysqldump', //Mac OS X 
    '/usr/local/bin/mysqldump', //Linux 
    '/usr/mysql/bin/mysqldump' //Linux 
    ); 
    foreach($available as $apath) { 
    if (is_executable($apath)) return $apath; 
    } 

    // 4th: auto detection has failed! 
    // lets, throw an exception, and ask the user to provide the path instead, manually. 
    $message = "Path to \"mysqldump\" binary could not be detected!\n" 
    $message .= "Please, specify it inside the configuration file provided!" 
    throw new RuntimeException($message); 
} 

さて、あなたはあなたの目的のために上記の機能を使用することができます。また、上記の関数がエラーをスローする場合、ユーザがバイナリに手動でmysqldumpへの明示的なパスを提供する方法を提供します。あなたのユースケースで動作するはずです:)

+0

チップをありがとうございます。これはうまくいった。 (私は少し修正しましたが、 'which'コマンドは良い考えでした。 –

関連する問題