1

私のシステム: Ubuntu 11.10、LAMP スタック。

問題:

ターミナルで次を実行すると、正しくバックアップされます。

mysqldump -u root  dbBugTracker > BAK/dbw.sql

しかし、次のようにphpコードに含めましたが、機能しません。

exec('/usr/bin/mysqldump -u root  dbTracker > BAK/dbT.sql');

チップ:

  • exec に 2 番目のパラメーターを入れようとしましたが、Array という単語以外は何も表示されません。印刷しましたが、何もありません。
  • ファイル dbw.sql は、実際には exec 関数の結果として作成されますが、0 バイトです。
  • フルパスを使用して mysql を使用せずに試してみましたが、同じ結果が得られました。つまり、0 バイトです。
  • フォルダーBAKは私のプロジェクト フォルダー内にあり、777 のアクセス許可も与えました。
  • さまざまなファイル名とデータベースを試してみましたが、結果は同じです。

これに関するご意見をお待ちしております。感謝!

詳細情報: exec 行に2>&1を追加したところ、ファイルにはテキストが含まれていますが、DB ダンプは含まれていません。これはエラーであり、これを処理する方法がわかりません:(エラーは次のとおりです

mysqldump: エラーが発生しました: 1045: 接続しようとすると、ユーザー 'root'@'localhost' のアクセスが拒否されました (パスワードを使用: NO) これが出力ファイル (dbw.sql) の現在の内容です。繰り返しますが、ターミナルからダンプを実行すると正常に動作します。

4

3 に答える 3

3

コマンドラインで別のユーザーとしてそのダンプコマンドを実行しています。exec() を使用するときは、Apache として実行しています (私が推測します)。exec コマンドにパスワード パラメータを追加するか、データベースに適切な権限を持つ PHP 固有のユーザーを作成してみてください。

更新:: ご想像のとおり、PHP を使用してこのダンプを実行している間は root ユーザーを使用できません。というわけで、新しいユーザーを作成します。

まず、コマンド ラインからデータベースにログインします。root ユーザーの場合は、わざわざ -u root を使用しないでください。

mysql

ログインしたら、Apache が使用する新しいユーザーを作成します。

GRANT ALL ON database_name.* TO yourapacheuser@localhost IDENTIFIED BY 'yourpassword';

mysql からログアウトします。

exit

次に、元のコードを少し作り直してみましょう...

$db_user = 'newusername';
$db_pass = 'pass';

$command = "mysqldump --add-drop-table -u $db_user -p$db_pass database_name > backup.file.sql";
$output = `$command`;
echo "Your database has now been backed up.";

ここで、ファイルを実行するには、コマンド ラインから次のコマンドを実行します。

php path/to/sqldumpfile.php

うまくいけば、この疑似コードを適応させることができます。頑張ってください!

于 2012-04-12T04:32:52.083 に答える
0

どのように印刷しますか?次のようにデバッグします。

<?php

exec('/usr/bin/mysqldump -u root  dbTracker > BAK/dbT.sql', $output);

var_dump($output);
于 2012-04-12T04:33:49.457 に答える