11

リモートサーバーのデータベース (コードではなくデータのみ) をバックアップし、ファイルをダウンロードするための PHP ベースのソリューションが必要です。そのようなことを行うにはシェルベースのソリューションの方が優れていることは知っていますが(ローカルシステムでシェルスクリプトを実行し、SSHを介してリモートシステムに接続する)、URLを知っていてデータベース資格情報を持っているだけで十分なPHPベースのソリューションが必要ですバックアップを取るための非技術者。PHP スクリプトは、リモート サーバーにアップロードして実行できます。

以下は私が欲しい機能です: -

  • 少なくとも InnoDb エンジンをサポートする必要があります。外部キー制約をエクスポートする必要があります。他のすべてのエンジンをサポートしていれば害はありません。
  • 可能な限り多くの制限が存在する場合、すべてのサーバーで動作するはずです (safe_mode有効exec()system()機能無効などのいくつかの制限について知っています)。どこでも動作することが保証されている非常に汎用的なソリューションが必要です。

  • プロセスはパスワード認証されている必要があります (データベース資格情報を要求します)。

今、私は物事を分解し、非常に基本的なことから始めています. 以下は、これまでの私の仮定といくつかの質問です:-

  1. execなどのシステム機能systemを共有ホスティング サーバーで完全に無効にできるかどうかはわかりません。オーバーライドできないように無効になっている場合、ここmysqldumpに示すベースのソリューションは普遍的に機能しません。質問 -ただし、内に存在するファイルに対してシステム関数を実行できるようになっている場合、ソリューションは安全に機能しますか?
    safe_modesafe_mode_exec_dir

  2. PHP を使用してこれを行うことのセキュリティ リスクについて質問したところ、Web スペースでバックアップ ファイルを作成してはならないことがわかりました (mysqldumpベースのソリューションの場合、ダウンロードする前にまずバックアップ ファイルを作成する必要があると思います)。したがって、ソリューションではバックアップ ファイルをそこに作成する必要はありません (他の場所に作成しても問題ありません)。
    質問 -しかし、共有ホスティング プロバイダーはこれを許可しますか?

  3. phpmysqldumpなどのさまざまな汎用ユーザー提供の PHP クラスを調べましたが、mysqldumpシステム コマンドを使用してバックアップを取るベース ソリューションの使用法が見つかりませんでした。それらはSHOW CREATE TABLE、すべてのテーブル作成、データ挿入クエリを取得し、実際にファイルとして保存せずにそれらをダウンロードするなどのことを行います (したがって、セキュリティリスクはありません)。
    質問-最初のポイントのソリューションで与えられた単純なことをせずにこれらすべてのことを行うと結論付けるのは正しいmysqldumpですか?これは汎用で安全なソリューションではないからです?
    質問 -また、うまく機能する良いものはないと読みました。私は個人的にこのphpmysqldumpのみを使用しました作成したバックアップを使用してデータベースを復元しようとすると、mysql エラーが発生します。ダンプ ファイル内のクエリも、PhpMyAdmin のエクスポート モジュールによって作成されたものとは多少異なります。また、他のいくつかの無料のユーザー提供の PHP クラスも確認しました。それらのほとんどは InnoDb サポートをサポートしていないように見えるため、外部キー制約がデータベースに存在する場合、エクスポートには存在しません。
    質問 - PhpMyAdmin 自体のエクスポート機能が個別に存在する場合、私にとっては解決策になると思います。このような安定したライブラリを知っている人はいますか?

4

3 に答える 3

2

あなたがすべきだと思うこと:

サーバーにphpmyadminをインストールする必要があると思います。これにより、職場/学校/カフェなどからデータベースにアクセスできるようになります。MySQL-workbenchはより高度で、より多くの機能を提供するため、構造の変更と行の編集に対処できます/columns、リレーションなど、phpmyadmin のすべてではないにしてもほとんどの機能を見てください。

phpmyadmin 任意の Web ブラウザーで動作します。

innoDBを使用している場合、MySQLデータベースに関してすべてを処理するのに役立つ多くのSQL機能があり、テーブル間の関係などのさらに多くの機能を利用できるphpMyAdminを本当にお勧めします。

phpMyAdminには次の機能があります。

  • 直感的なウェブインターフェース
  • ほとんどの MySQL 機能のサポート:
  • データベース、テーブル、ビュー、フィールド、およびインデックスを参照して削除する
  • データベース、テーブル、フィールド、およびインデックスの作成、コピー、削除、名前変更、および変更
  • 保守サーバー、データベース、テーブル、サーバー構成に関する提案付き
  • あらゆる SQL ステートメント、さらにはバッチ クエリの実行、編集、ブックマーク
  • MySQL ユーザーと権限を管理する
  • ストアド プロシージャとトリガーを管理する
  • CSV および SQL からデータをインポートする
  • データをさまざまな形式にエクスポート: CSV、SQL、XML、PDF、ISO/IEC 26300 - OpenDocument テキストとスプレッドシート、Word、Excel、LATEX など
  • 複数のサーバーの管理
  • データベース レイアウトの PDF グラフィックの作成
  • 例によるクエリ (QBE) を使用した複雑なクエリの作成
  • データベースまたはそのサブセットでグローバルに検索する
  • BLOBデータを画像またはダウンロードリンクとして表示するなど、一連の定義済み関数を使用して、保存されたデータを任意の形式に変換します
  • そして、はるかに...

上にリストしたものはすべて phpMyAdmin に含まれています。debian または Debian ベースのシステムを実行している場合は、次のコマンドを実行するだけです。

root@debian:~ # aptitude install phpmyadmin
root@arch:~ # pacman -S phpmyadmin

ところで: http サーバーに Apache または lighttpd を使用していない場合は、phpmyadmin の conf ファイルを読んでから、phpmyadmin が http サーバーで動作するように必要な conf スクリプトを作成する必要があります。

MySQL ワークベンチ。クロスプラットフォームであり、うまく機能します。

MySQL ワークベンチは、データベースで何をしているかを視覚的に確認します。http://diariolinux.com/wp-content/uploads/2008/08/wb51linuxpreview2a.png

ところで:<ctrl>+<G>データベースのフォワード エンジニアリングに使用します。これを行うには時間がかかりました。

構成した直後に動作するスタンドアロンの perl ファイル: (未テスト)

use DBI;
my $user = "username";   # MySQL Username
my $pass = "xxxx";       # MySQL Password
my $host = "localhost";  # MySQL Host
my $mydb = "zzzz";       # MySQL Database
my $file = "test.sql";   # Import file
my $sqlServer = "mysql"; # What sql-server are we using, oracle/mysql/etc
    # I would use the following method to configure it, though the above works fine too.
($user,$pass,$host,$mydb,$file,sqlServer) = (
    "username",  # MySQL Username
    "password",  # MySQL Password
    "localhost", # MySQL Host
    "myDB",      # MySQL Database
    "test.sql",  # Imported file
    "mysql"      # What sql-server are we using, oracle/mysql/etc
);
    # Now lets connect to the MySQL server.
my $dbh  = DBI->connect("DBI:$sqlServer:$mydb:$host",$user,$pass)or die DBI->errstr();
    # Lets now open the .sql file.
open(INPUT,$file);
    # Now lets run each sql-statement.
while ($line = <INPUT>){
    print $line;
    $dbh->do($line);
    print "Query failed (run manually):\n$line\n\n ". $dbh->errstr()."\n" if $dbh->errstr();
}
    # Now close the file.
close(INPUT);
于 2011-01-19T18:27:33.797 に答える
0

私自身の経験では、PHPベースのバックアップソリューションに依存することは非常に悪い考えです。大規模なバックアップを処理している場合、PHPは簡単に失敗する可能性があります(タイムアウト、メモリ消費、または未定義の何かが原因で)。

私たちは、un * xサーバーで何年もの間Bacula(http://www.bacula.org/en/)をうまく使用してきました。私たちがやりたいことを何でもする私たち自身のバックアップスクリプトをしました。もちろん、サーバーへのシェルアクセスが必要です。

単純なバックアップphpベースのソリューションが必要な場合は、独自のソリューションを作成するのが最善です。:)

于 2011-01-26T17:01:33.760 に答える
0

PHPMyAdmin は一般的に優れたソリューションですが、バックアップだけを行いたい場合はやり過ぎかもしれません。普遍的なソリューションが必要な場合は、 exec が利用可能であることに絶対に依存しないでください。PHP を適切な SQL クエリと組み合わせると (ポイント 3 で指摘したように)、必要なすべての情報を提供でき、常に機能します。

于 2011-01-20T20:51:04.213 に答える