• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPでMySQLのテーブルをダンプする)

PHPでMySQLのテーブルをダンプする方法 - エラー対処法も解説

このQ&Aのポイント
  • PHPとMySQLを使用してテーブルをダンプする方法について詳しく解説します。
  • ダンプ処理は正常に行われているが、テーブル別の処理やSQL文の書き出しがうまくいかない問題への対処法もご紹介します。
  • 具体的なコード例や原因となる記述についても説明し、PHPでmysqldumpを使用してテーブル別にダンプする方法をご教示します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

http://dev.mysql.com/doc/refman/5.1/ja/mysqldump.html によるとデータベースとテーブルの間は空白ですね。 そうすると気になるのは、phpスクリプトにするまえに、 直接手入力でコマンドラインでバックアップしてみて成功して いるかどうかです。 それに成功しているなら次に、$cmdを文字列として取り出して それをコマンドラインで入力してみるとどうなるか。 次にそのコマンドをそのままスクリプトファイルに書いて そのシンプルなスクリプトが成功するかどうか。 急がば回れといいます。段階を踏んで、ワンステップづつ進んだほうが いいと思います。

n-yuuki
質問者

お礼

有難うございました。

n-yuuki
質問者

補足

アドバイス有難うございます。 ローカルでは上手くいきました。 ただ、 レンタルサーバー上ではまだ上手くいっておらず、試行錯誤中です。 Function mysql_list_tables() is deprecated in /home/ ・・・・ というエラーがでており、 これはおそらく PHP ないで  mysql_list_tables() を使用しているのですが、それを指摘されているのだと思います。 これはどうやら非推奨らしく それで警告がでてるのかと・・・。 あと、 ・・・・ No such file or directory  とでてるので、これもコツコツしらべるとクリアーできそうですが、なぜかローカル環境とオンライン環境のディレクトリ構造を同じしているものの こういったエラーがでるのか・・・。 とにかく このあと色々いじります。

その他の回答 (4)

回答No.5

レンタルサーバーで、 cronではなく、 コマンドラインで実行したらどうなるか、それを試したらどうでしょう。 そもそもそれがうまくいかないうちに、cronでどうこうしても話が先に進みません。 コマンドラインで1行だけ動かしてうまくいくかどうかで、実行ユーザーや 実行ディレクトリ、DBの調査など順に調べることがいろいろ出てくるでしょう。 そういうわけで、いきなりcronで一足飛びに全て解決という戦略ではなく、 cronはまず置いといて、低いところから1段ずつステップアップ、という戦略 で臨んだほうが良いでしょう。

n-yuuki
質問者

お礼

回答ありがとうございます。 cronで実行するまえに、コマンドラインで実行してみて処理は正常に終えております。 というわけで、試行錯誤した結果、 cronが作動してのダンプは、まだ成功しておりませんが、 一応目的の処理が成功する道筋が見えました。 残るエラーは、 Warning: opendir(/../../libs/***/backup/): failed to open dir: No such file or directory in /home/***** というものですので、 なんとか自力解決できそうです。 有難うございました。

  • JaneDue
  • ベストアンサー率75% (263/350)
回答No.4

試してみたところ、データベース名またはテーブル名が間違っていると、質問者さまの状態になるようですよ。今一度確認してみてください。 いづれにしても、他回答者さまの通り、一旦echoしてみるとか、DOSから打ってみるとかで追跡した方が早いような・・・。

n-yuuki
質問者

お礼

アドバイスありがとうございます。 はい! コマンドラインで入力して無事にバックアップをとることができました。 PHPになおしてもうまくいっています。 ただ、ローカルの場合です。 今はレンタルサーバーのcron で動かしているのですが、 ここだど うまくいかず・・・。 エラーかえってきて成功しない状態です。

noname#147388
noname#147388
回答No.2

http://dev.mysql.com/doc/refman/5.1/ja/mysqldump.html shell> mysqldump [options] db_name [tables] となっているので この形式の順番にあわせたらどうなります?

n-yuuki
質問者

補足

順番を変更しても出力されるのは、変らずSQL抜きのテキストだけです。 ※ちなみに "D:/xampp/mysql/bin/mysqldump ". " --host=".$dbHost. " --user=".$dbUser. " --password=".$dbPass. " ". $dbName. " ". $db[$i]. " > ". $BackPath.$fileName; となります。

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

>$cmd = "D:/xampp/mysql/bin/mysqldump ".$dbName.".".$db[$i]." --host=".$dbHost." --user=".$dbUser." --password=".$dbPass." > ".$BackPath.$fileName; $dbNameと$db[$i]をピリオドで繋いでますか?空白だけでいいと思います。

n-yuuki
質問者

お礼

空白に置き換えてもダメでした。 んーーどうなってるんだろうか・・・。

n-yuuki
質問者

補足

ピリオドでつないでいます。 ただ、最初は空白だけでつないでいました。 それを何回もテストしてたと思います。 でも、もう一度 試してみますね。 ※徹夜で寝ぼけながらの作業だったので・・・・。