- ベストアンサー
PHPでMySQLのテーブルをダンプする方法 - エラー対処法も解説
- PHPとMySQLを使用してテーブルをダンプする方法について詳しく解説します。
- ダンプ処理は正常に行われているが、テーブル別の処理やSQL文の書き出しがうまくいかない問題への対処法もご紹介します。
- 具体的なコード例や原因となる記述についても説明し、PHPでmysqldumpを使用してテーブル別にダンプする方法をご教示します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
http://dev.mysql.com/doc/refman/5.1/ja/mysqldump.html によるとデータベースとテーブルの間は空白ですね。 そうすると気になるのは、phpスクリプトにするまえに、 直接手入力でコマンドラインでバックアップしてみて成功して いるかどうかです。 それに成功しているなら次に、$cmdを文字列として取り出して それをコマンドラインで入力してみるとどうなるか。 次にそのコマンドをそのままスクリプトファイルに書いて そのシンプルなスクリプトが成功するかどうか。 急がば回れといいます。段階を踏んで、ワンステップづつ進んだほうが いいと思います。
その他の回答 (4)
- honoka-cha
- ベストアンサー率54% (40/73)
レンタルサーバーで、 cronではなく、 コマンドラインで実行したらどうなるか、それを試したらどうでしょう。 そもそもそれがうまくいかないうちに、cronでどうこうしても話が先に進みません。 コマンドラインで1行だけ動かしてうまくいくかどうかで、実行ユーザーや 実行ディレクトリ、DBの調査など順に調べることがいろいろ出てくるでしょう。 そういうわけで、いきなりcronで一足飛びに全て解決という戦略ではなく、 cronはまず置いといて、低いところから1段ずつステップアップ、という戦略 で臨んだほうが良いでしょう。
お礼
回答ありがとうございます。 cronで実行するまえに、コマンドラインで実行してみて処理は正常に終えております。 というわけで、試行錯誤した結果、 cronが作動してのダンプは、まだ成功しておりませんが、 一応目的の処理が成功する道筋が見えました。 残るエラーは、 Warning: opendir(/../../libs/***/backup/): failed to open dir: No such file or directory in /home/***** というものですので、 なんとか自力解決できそうです。 有難うございました。
- JaneDue
- ベストアンサー率75% (263/350)
試してみたところ、データベース名またはテーブル名が間違っていると、質問者さまの状態になるようですよ。今一度確認してみてください。 いづれにしても、他回答者さまの通り、一旦echoしてみるとか、DOSから打ってみるとかで追跡した方が早いような・・・。
お礼
アドバイスありがとうございます。 はい! コマンドラインで入力して無事にバックアップをとることができました。 PHPになおしてもうまくいっています。 ただ、ローカルの場合です。 今はレンタルサーバーのcron で動かしているのですが、 ここだど うまくいかず・・・。 エラーかえってきて成功しない状態です。
http://dev.mysql.com/doc/refman/5.1/ja/mysqldump.html shell> mysqldump [options] db_name [tables] となっているので この形式の順番にあわせたらどうなります?
補足
順番を変更しても出力されるのは、変らずSQL抜きのテキストだけです。 ※ちなみに "D:/xampp/mysql/bin/mysqldump ". " --host=".$dbHost. " --user=".$dbUser. " --password=".$dbPass. " ". $dbName. " ". $db[$i]. " > ". $BackPath.$fileName; となります。
- shimix
- ベストアンサー率54% (865/1590)
>$cmd = "D:/xampp/mysql/bin/mysqldump ".$dbName.".".$db[$i]." --host=".$dbHost." --user=".$dbUser." --password=".$dbPass." > ".$BackPath.$fileName; $dbNameと$db[$i]をピリオドで繋いでますか?空白だけでいいと思います。
お礼
空白に置き換えてもダメでした。 んーーどうなってるんだろうか・・・。
補足
ピリオドでつないでいます。 ただ、最初は空白だけでつないでいました。 それを何回もテストしてたと思います。 でも、もう一度 試してみますね。 ※徹夜で寝ぼけながらの作業だったので・・・・。
お礼
有難うございました。
補足
アドバイス有難うございます。 ローカルでは上手くいきました。 ただ、 レンタルサーバー上ではまだ上手くいっておらず、試行錯誤中です。 Function mysql_list_tables() is deprecated in /home/ ・・・・ というエラーがでており、 これはおそらく PHP ないで mysql_list_tables() を使用しているのですが、それを指摘されているのだと思います。 これはどうやら非推奨らしく それで警告がでてるのかと・・・。 あと、 ・・・・ No such file or directory とでてるので、これもコツコツしらべるとクリアーできそうですが、なぜかローカル環境とオンライン環境のディレクトリ構造を同じしているものの こういったエラーがでるのか・・・。 とにかく このあと色々いじります。