0

サーバー上のSQLファイルとしてMySQLテーブルのバックアップを自動的に作成するPHPプログラムを作成しようとしています:

$backup = "$path/$tablename.sql";
$table = "mydbname.mytablename";

exec(
  スプリントf(
    '/usr/bin/mysqldump --host=%s --user=%s --password=%s %s --quick --lock-tables --add-drop-table > %s',
    $ホスト、
    $ユーザー、
    $パスワード、
    $テーブル、
    $バックアップ
  )
);

結果の .sql ファイルで得られるのは次のとおりです。

-- MySQL ダンプ 10.10
--
-- ホスト: localhost データベース: mydbname.mytablename
-- ------------------------------------------------ ------
-- サーバー バージョン 5.0.27

/*!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 セット名 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 */;

結果に Database:mydbname.mytablename がリストされるのは怪しいようです。

どこから探し始めたらいいのかわからない。私のホストは、最初にプログラムをセットアップするのを手伝ってくれましたが、safe_mode を無効にして (既に行われています)、バイナリにアクセスできるようにする必要があると言っていました (これが何を意味するのかわかりません)。

ホストは質問をしても返信に2日かかるので、できれば自分で解決したいです。

4

1 に答える 1

5

mysqldump コマンドは次のようになります。

/usr/bin/mysqldump --host=HOST --user=USER --password=PASSWORD TABLE --quick --lock-tables --add-drop-table

mysqldump のマニュアルを見ると、 TABLE が実際にはデータベースの名前であると考えられると思います(引用) :

mysqldump を呼び出す一般的な方法は 3 つあります。

shell> mysqldump [options] db_name [tables]
shell> mysqldump [options] --databases db_name1 [db_name2 db_name3...]
shell> mysqldump [options] --all-databases

どうやら、ダンプするテーブルの名前の前にデータベースの名前を付ける必要があります。

したがって、たとえば、次のようなものがうまくいくかもしれません:

/usr/bin/mysqldump --host=HOST --user=USER --password=PASSWORD DBNAME TABLE --quick --lock-tables --add-drop-table


お役に立てれば !


編集:私は実際に「databasename.tablename」を使用して、あなたがしたように簡単なテストを行いました:

mysqldump --user=USER --password=PASSWORD --no-data DBNAME.TABLENAME

私はあなたが持っているのと同じ種類の出力を得ています...しかし、私にはエラーもあります:

mysqldump: Got error: 1102: Incorrect database name 'DBNAME.TABLENAME' when selecting the database

これは、標準出力ではなくエラー出力になると思います(2番目のものをファイルにリダイレクトするだけです)

私が使用している場合:

mysqldump --user=USER --password=PASSWORD --no-data DBNAME TABLENAME

すべて正常に動作します。エラーはありません。ダンプがあります。

于 2009-09-17T16:53:23.800 に答える