宜しくお願いします。
※PHP5、 MySQL5、 Win7、 ローカル環境
本番環境(公開レンサバ)上では、cronを使って、自動的にバックアップを取ろうとしています。
1つのデーターベースのなかに、
10個のテーブルがあります。
テーブル別にダンプしたく思います。
そこで下記のPHPスクリプトを考えています。
しかし、ダンプ処理は行われているが(ファイルは出力されているという意味。成功していない)、
テーブル別に処理が進んでいるようではなく、
しかも、
INSERT文や、そもそもテーブルに格納されている値がSQLで書き出されていません。
まったく空白ということではないのですが・・・。※出力されたテキストは書き参照
※テーブル名($db[$i]に格納されている)ごとにループ処理していますが、そこは省略して書きます。
$fileName = $db[$i]."-".$now.".sql";
$cmd = "D:/xampp/mysql/bin/mysqldump ".$dbName.".".$db[$i]." --host=".$dbHost." --user=".$dbUser." --password=".$dbPass." > ".$BackPath.$fileName;
if (system($cmd)) ErrorOut("次のコマンド実行でエラーになりました。$cmd");
--------------出力されたテキスト-------------------------
▼
-- MySQL dump 10.13 Distrib 5.1.41, for Win32 (ia32)
--
-- Host: localhost Database: ここは「データーベース名.テーブル名」が記載されています。
-- ------------------------------------------------------
-- Server version5.1.41
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
▲
----------------------------------------------
今自分のなかで思いつく原因は、
$cmd = "D:/xampp/mysql/bin/mysqldump ".$dbName.".".$db[$i]." --host=".$dbHost." --user=".$dbUser." --password=".$dbPass." > ".$BackPath.$fileName;
の中の、
".$dbName.".".$db[$i]." という記述で、
ここは、データーベース名とテーブル名を取得したく、このように書きましたが、
正直 適当です。調べまくりましたが見つからず・・・・。
どなたか、PHPで、mysqldumpを使い、テーブル別にダンプさせる書き方を教えてください。
宜しくお願いします。
No.5
- 回答日時:
レンタルサーバーで、
cronではなく、
コマンドラインで実行したらどうなるか、それを試したらどうでしょう。
そもそもそれがうまくいかないうちに、cronでどうこうしても話が先に進みません。
コマンドラインで1行だけ動かしてうまくいくかどうかで、実行ユーザーや
実行ディレクトリ、DBの調査など順に調べることがいろいろ出てくるでしょう。
そういうわけで、いきなりcronで一足飛びに全て解決という戦略ではなく、
cronはまず置いといて、低いところから1段ずつステップアップ、という戦略
で臨んだほうが良いでしょう。
回答ありがとうございます。
cronで実行するまえに、コマンドラインで実行してみて処理は正常に終えております。
というわけで、試行錯誤した結果、
cronが作動してのダンプは、まだ成功しておりませんが、
一応目的の処理が成功する道筋が見えました。
残るエラーは、
Warning: opendir(/../../libs/***/backup/): failed to open dir: No such file or directory in /home/*****
というものですので、
なんとか自力解決できそうです。
有難うございました。
No.4
- 回答日時:
試してみたところ、データベース名またはテーブル名が間違っていると、質問者さまの状態になるようですよ。
今一度確認してみてください。いづれにしても、他回答者さまの通り、一旦echoしてみるとか、DOSから打ってみるとかで追跡した方が早いような・・・。
アドバイスありがとうございます。
はい! コマンドラインで入力して無事にバックアップをとることができました。
PHPになおしてもうまくいっています。
ただ、ローカルの場合です。
今はレンタルサーバーのcron で動かしているのですが、
ここだど うまくいかず・・・。
エラーかえってきて成功しない状態です。
No.3ベストアンサー
- 回答日時:
によるとデータベースとテーブルの間は空白ですね。
そうすると気になるのは、phpスクリプトにするまえに、
直接手入力でコマンドラインでバックアップしてみて成功して
いるかどうかです。
それに成功しているなら次に、$cmdを文字列として取り出して
それをコマンドラインで入力してみるとどうなるか。
次にそのコマンドをそのままスクリプトファイルに書いて
そのシンプルなスクリプトが成功するかどうか。
急がば回れといいます。段階を踏んで、ワンステップづつ進んだほうが
いいと思います。
この回答への補足
アドバイス有難うございます。
ローカルでは上手くいきました。
ただ、
レンタルサーバー上ではまだ上手くいっておらず、試行錯誤中です。
Function mysql_list_tables() is deprecated in /home/ ・・・・
というエラーがでており、
これはおそらく PHP ないで
mysql_list_tables()
を使用しているのですが、それを指摘されているのだと思います。
これはどうやら非推奨らしく それで警告がでてるのかと・・・。
あと、
・・・・ No such file or directory
とでてるので、これもコツコツしらべるとクリアーできそうですが、なぜかローカル環境とオンライン環境のディレクトリ構造を同じしているものの こういったエラーがでるのか・・・。
とにかく このあと色々いじります。
No.2
- 回答日時:
shell> mysqldump [options] db_name [tables]
となっているので この形式の順番にあわせたらどうなります?
この回答への補足
順番を変更しても出力されるのは、変らずSQL抜きのテキストだけです。
※ちなみに
"D:/xampp/mysql/bin/mysqldump ".
" --host=".$dbHost.
" --user=".$dbUser.
" --password=".$dbPass.
" ".
$dbName.
" ".
$db[$i].
" > ".
$BackPath.$fileName;
となります。
No.1
- 回答日時:
>$cmd = "D:/xampp/mysql/bin/mysqldump ".$dbName.".".$db[$i]." --host=".$dbHost." --user=".$dbUser." --password=".$dbPass." > ".$BackPath.$fileName;
$dbNameと$db[$i]をピリオドで繋いでますか?空白だけでいいと思います。
この回答への補足
ピリオドでつないでいます。
ただ、最初は空白だけでつないでいました。
それを何回もテストしてたと思います。
でも、もう一度 試してみますね。
※徹夜で寝ぼけながらの作業だったので・・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- JavaScript html javascriptにてWeb SQLを操作したい。 2 2022/12/16 17:43
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- MySQL PHP 画像のアップロード Qiita 2 2022/11/28 04:44
- MySQL #1062 - '0' は索引 'PRIMARY' で重複しています。とでています。 1 2023/01/01 06:13
- MySQL 参考書に従って入力したつもりでしたが、最後はエラーがでました。 1 2022/09/28 03:45
- MySQL データベースの複製の仕方(mysql) 2 2023/05/30 18:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
トランザクション処理
-
カラムにデータがあるかないか...
-
クエリObjectをforeachで回す時...
-
PHPでいいね機能を作りたいので...
-
変数にNULLを代入したい
-
予約システムを作りたい
-
エクセルVBAについて
-
SQL文の実行に失敗しました???
-
VBAをつかってクエリの情報を抽...
-
PHPでMY SQLの連想配列をリンク...
-
PHP + MySQLを使用して詳細画面...
-
Q&Aサイトを作成していてURLの...
-
MySQLでshal()関数のエラーがで...
-
SQL文2つ実行
-
SQL文が実行できません
-
エラーの意味と対策
-
PHP+mysqlでSQL文に文字数制限...
-
mysql_fetch_objectの書き方を...
-
データベースに存在するデータ...
-
MySQLへの接続
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MySQLでデータベースにデータin...
-
変数にNULLを代入したい
-
phpにて出欠登録管理を作成して...
-
phpでテーブルを作る際変数によ...
-
csvをDBへ読み込んだら、NULLが...
-
SQLで返り値が空とでる
-
ヒアドキュメントでSQLを書く事...
-
php sqlite count 列数取得
-
OracleからAccessへのインポート
-
変数を組み入れたい
-
日またぎの計算
-
Accessへ日付をINSERT
-
任意の値の取得
-
クエリObjectをforeachで回す時...
-
PHPでいいね機能を作りたいので...
-
会員番号等に利用するダブらな...
-
PHP PDOを利用してカラムの削除...
-
SQL CASE 文について
-
phpを使用し、カテゴリー別に表...
-
トランザクション処理
おすすめ情報