PHPでMySQLのテーブルをダンプする
宜しくお願いします。
※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 version 5.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を使い、テーブル別にダンプさせる書き方を教えてください。
宜しくお願いします。
お礼
ご返答が遅くなり申し訳ありません。 バイナリログを利用してDB復旧を行う際、DB単位での復旧をしたいという要件があったためいろいろと考えていました。 ご提示いただいた例でもDB単位の復旧はできそうなので、検討させていただきます。 ありがとうございました。