2012-01-30 21 views
1

私は以前にこの質問をしましたが、回答がありませんでしたので、私はそれを言い換えています。バックアップMySqlデータベース?

私はどちらか使用してDBをバックアップしたい:

system("mysqldump -h DB_HOST -u DB_USER -p DB_PASS logindb > $location/$backup"); 

か:

sql="BACKUP my_db TO DISK my_backup_folder WITH FORMAT #"; 

if ($stmt = $this->connect->prepare($sql)) {  
    $stmt->execute(); 
    $stmt->close(); 
} else { 
    $error    = true; 
    $message['error'] = true; 
    $message['message'] = CANNOT_PREPARE_DATABASE_CONNECTION_MESSAGE; 
    return json_encode($message); 
} 

しかし、最初は私に空のSQLファイルを与え、第二は、私には何も与えません。それはなぜですか、そして、どのようなエラーが発生したのかを知る方法があれば、どうすればいいでしょうか?

さらに良い方法はありますか?

答えて

1

$backupFile = $dbname . date("Y-m-d-H-i-s") . '.gz'; 
$command = "mysqldump --opt -h $dbhost -u $dbuser -p $dbpass $dbname | gzip > $backupFile"; 
system($command); 
+0

すでに試してみましたが、うまくいきません。まず、2番目の試してみましょう。 – Roland

+0

私は、mysqldumpが内部コマンドまたは外部コマンドとして認識されないという同じエラーの2番目の方法を試しました。しかし、1つの質問でも、 '$ backupFile'にはその場所もなければなりませんか?私は場所も持っているから。たとえば、それを実行するphpファイルは、 '$ backupFile'ポイントを持つフォルダと同じフォルダにあります。 – Roland

+0

場所が必要です。ただし、Windowsではmysqldumpを使用することはできません。試してみるにはLinuxサーバーがありますか? – Mike

0

phpのexec権限を持っている方が速いです。

SQLエラーログファイルを確認します。

/var/log/mysql.err - MySQLのエラーログファイル

/var/log/mysql.log - MySQLのログファイル

PHP用のあなたがもしあればPHPエラーをスローするerror_reporting(E_ALL);これを置くかもしれません。

+0

は、私は 'いくつかのエラーを得た32767'。ログを確認するには、localhost(XAAMP)でテストしていますか? – Roland

+0

そして、私が@ NarcisRaduの方法を使ってログをチェックしたとき、xaampフォルダでそれを検索しなければなりませんでしたが、これは私が得たものです: ''mysqldump'は内部または外部コマンドとして認識されません 操作可能なプログラムまたはバッチファイル ' – Roland

+0

'%log_file%';' – Mike

1

利用のtry-catch、のようなもの:エラーのため

try{ 
    $stmt = $this->connect->prepare($sql); 
    $stmt->execute(); 
    $stmt->close(); 
} 
catch(PDOException $e) 
{ 
    echo $e->getMessage(); 
} 

チェックログファイル。

+0

これを行うと、次のような結果になります。 '致命的なエラー:527行目のC:\ xampp \ htdocs \ login \ assets \ class \ login \ loginsys.phpにあるオブジェクト以外のオブジェクトのexecute() 'その行は' $ stmt-> execute(); 'です。 – Roland

+0

$ this-> connect-> prepare($ sql); $ stmt = $ this-> connect-> prepare($ sql)で変更する必要があります。そうでなければ$ stmtオブジェクトは存在しません –

0

ユーザーがこのデータベースに対するアクセス許可を持っていることを確認してください。以下は

mysqlデータベース

mysqldump -h [host_name] -u [username] -p[password] [database_name] > dumpfilename.sql 
+0

これは実際に働いた唯一のものですが、2番目の方法は何もしませんでした。これは、空のSQLファイルを出力します。 – Roland

1

開始後のバックアップにコマンドです:

-p DB_PASS 

、右のフォーム:私はなぜ知らない

-p[password] 

が、 -pはパスワードであり、他のパラメータとは異なります。したがって、例をうまく引き継ぐことに注意してください。私はこれが問題だった異なるケースを見てきましたので、それに注意してください。

$tableName = 'mypet'; 
$backupFile = 'backup/mypet.sql'; 
$query  = "SELECT * INTO OUTFILE '$backupFile' FROM $tableName"; 
$result = mysql_query($query); 

方法2:いくつかの単純なコードにhere

方法1見つかり

+0

OK。 DB_PASSは定義済みのvarであり、 'define( 'DB_PASS'、 'mydbpass');'のようになります。しかし、あなたは '-p DB_PASS'の代わりに' -p [DB_PASS] 'を使わなければならないと言っていますか? – Roland

+0

はい、MAMPインストールでテストしましたが、その間のスペースは機能しません。それは非常に意味がないように見えますが、それはそうであるようです。 –

+0

私はこのエラーをログに記録します: '' mysqldump 'は内部または外部のコマンド、操作可能なプログラムまたはバッチファイルとして認識されません。 ''この行を実行します: '' mysqldump -hDB_HOST -uDB_USER -pDB_PASS logindb> $ location/$ backup ");' XAAMPのPHPファイルから取得します。 – Roland

関連する問題