4

実行している仮想マシンからPHPを使用してMySQLバイナリログファイルの内容を回復しようとしています。仮想マシンとLAMPでCentOSを実行しています。

仮想ネットワーク上で4台の仮想マシンを実行していますが、それらはすべて同じサブネット上にあり、MySQLデータベースが稼働しており、レプリケーションが機能しています。

PHPを使用してマスターのbinログの内容を回復しようとしています。通常、ファイルの内容は次のコマンドを使用して回復できます。

shell> mysqlbinlog [options] log_file

ローカルマシンでシェルコマンドを実行するPHPスクリプトを作成しました。

$cmd="mysqlbinlog /var/lib/mysql/provider-bin.000003";
echo "<pre>".shell_exec($cmd);

私はprovider-bin.000003が存在し、shell_exec関数が機能し、無効になっていないことを確認しました。

コンソールでコマンドを実行すると、binファイルの内容が取得されますが、PHPスクリプトは期待どおりの結果を出力しません。

代わりに次を出力しています。

/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

更新:exec

また、exec関数を使用してみましたが、同じように出力されます。

$cmd="mysqlbinlog /var/lib/mysql/provider-bin.000003";

print_r(exec($cmd,$ret_value)) . "<br />DONE";

echo "<pre>".shell_exec($cmd." 2>&1");

とても有難い

4

1 に答える 1

0

私はそれを数日苦しんで理解したので、ここに解決策があります。

mysqlbinlogはPHPによって実行されますが、ブラウザから実行した場合でもMySQLのバイナリファイルを読み取ることはできません。何らかの理由で、ファイルが存在しないことが示されます。それは私の計画ではなかったので、cronジョブとshファイルが私のためにトリックを行いました。

cronジョブは、コンテンツを外部に公開することなく、スクリプトをルートとして実行します。

これで、循環レプリケーションフェイルオーバースクリプトが正常に実行されます。

于 2012-08-27T14:50:20.110 に答える