ここに私が持っている情報があります:
MySQLとPHP5を使用するLinuxベースのシステムを使用しています。mysqldump
.phpファイル内からを生成し、そのダンプをサーバー上の指定した場所のファイルに保存できるようにする必要があります。
私はPHPの初心者なので、誰かが私に必要なことを行うための支援、ガイダンス、またはコードを提供してほしいです。これは、インターネットからリモートで実行する必要があります。
ここに私が持っている情報があります:
MySQLとPHP5を使用するLinuxベースのシステムを使用しています。mysqldump
.phpファイル内からを生成し、そのダンプをサーバー上の指定した場所のファイルに保存できるようにする必要があります。
私はPHPの初心者なので、誰かが私に必要なことを行うための支援、ガイダンス、またはコードを提供してほしいです。これは、インターネットからリモートで実行する必要があります。
回答:
あなたは使うことができます exec()
関数を、外部コマンドを実行。
注:間shell_exec()
とexec()
、私はPHPスクリプトに出力を返さない第二1、選ぶだろう-文字列として全体のSQLダンプを取得するためのPHPスクリプトの必要はありませんが:あなたは、それがファイルに書き込む必要があります、これはコマンド自体で実行できます。
その外部コマンドは:
mysqldump
適切なパラメータでを例えば :
mysqldump --user=... --password=... --host=... DB_NAME > /path/to/output/file.sql
つまり、PHPコードは次のようになります。
exec('mysqldump --user=... --password=... --host=... DB_NAME > /path/to/output/file.sql');
もちろん、正しい接続情報を使用するのはあなた次第です...
。
exec()
コマンドが完了するまで戻りません。そう、ちょうどいくつかを置くecho "dump complete"
呼び出した後exec()
/usr/local/mysql/bin/mysqldump
exec("C:/pathto/mysql/bin/mysqldump.exe <options as above>");
ブラウザを介してダウンロードするバックアップを作成する場合は、ファイルを使用せずにこれを行うこともできます。
php関数passthru()は、mysqldumpの出力をブラウザーに直接リダイレクトします。この例では、それも圧縮されます。
長所:一時ファイルを扱う必要はありません。
短所:Windowsでは機能しません。巨大なデータセットには制限がある場合があります。
<?php
$DBUSER="user";
$DBPASSWD="password";
$DATABASE="user_db";
$filename = "backup-" . date("d-m-Y") . ".sql.gz";
$mime = "application/x-gzip";
header( "Content-Type: " . $mime );
header( 'Content-Disposition: attachment; filename="' . $filename . '"' );
$cmd = "mysqldump -u $DBUSER --password=$DBPASSWD $DATABASE | gzip --best";
passthru( $cmd );
exit(0);
?>
こちらをご覧ください:https : //github.com/ifsnop/mysqldump-php!これは、phpで書かれたネイティブソリューションです。
composerを使用してインストールでき、次のように簡単です。
<?php
use Ifsnop\Mysqldump as IMysqldump;
try {
$dump = new IMysqldump\Mysqldump('database', 'username', 'password');
$dump->start('storage/work/dump.sql');
} catch (\Exception $e) {
echo 'mysqldump-php error: ' . $e->getMessage();
}
?>
元のmysqldumpからコピーされた多くのオプションで、上級ユーザーをサポートします。
すべてのオプションはgithubページで説明されていますが、多かれ少なかれ自動説明です:
$dumpSettingsDefault = array(
'include-tables' => array(),
'exclude-tables' => array(),
'compress' => 'None',
'no-data' => false,
'add-drop-database' => false,
'add-drop-table' => false,
'single-transaction' => true,
'lock-tables' => false,
'add-locks' => true,
'extended-insert' => true,
'disable-foreign-keys-check' => false,
'where' => '',
'no-create-info' => false
);
exec
および/またはshell_exec
セキュリティによって無効、mysqldumpを-PHPは素晴らしい作品!Umblerのサーバーで今すぐ試してみて、ダンプを取得しました。ヒントありがとうございました!
あなたを助けるスクリプトレットが含まれて次のリンクにしてくださいreffer: http://davidwalsh.name/backup-mysql-database-php
注:このスクリプトには、NULLデータ型のバグが含まれている可能性があります
セキュリティ上の理由から、パスワードはコマンドではなく構成ファイルで指定することをお勧めします(ユーザーはを実行しps aux | grep mysqldump
てパスワードを確認できます)。
//create a temporary file
$file = tempnam(sys_get_temp_dir(), 'mysqldump');
//store the configuration options
file_put_contents($file, "[mysqldump]
user={$user}
password=\"{$password}\"");
//execute the command and output the result
passthru("mysqldump --defaults-file=$file {$dbname}");
//delete the temporary file
unlink($file);
ここでは、PMAのように(およびexec、passthruなどを使用せずに)mysqlの構造とデータをダンプするための包括的なソリューションを見つけることができます。
https://github.com/antarasi/MySQL-Dump-with-Foreign-keys
それは私の拡張機能を持つdszymczukプロジェクトのフォークです。
使い方は簡単
<?php
//MySQL connection parameters
$dbhost = 'localhost';
$dbuser = 'dbuser';
$dbpsw = 'pass';
$dbname = 'dbname';
//Connects to mysql server
$connessione = @mysql_connect($dbhost,$dbuser,$dbpsw);
//Set encoding
mysql_query("SET CHARSET utf8");
mysql_query("SET NAMES 'utf8' COLLATE 'utf8_general_ci'");
//Includes class
require_once('FKMySQLDump.php');
//Creates a new instance of FKMySQLDump: it exports without compress and base-16 file
$dumper = new FKMySQLDump($dbname,'fk_dump.sql',false,false);
$params = array(
//'skip_structure' => TRUE,
//'skip_data' => TRUE,
);
//Make dump
$dumper->doFKDump($params);
?>
魅力のように動作します:-)
exec()の使用が許可されている限り、PHPコードを介してシェルコマンドを実行できます。
したがって、コマンドラインでmysqldumpを書き込む方法を知っていると仮定します。
mysqldump -u [username] -p [database] > [database].sql
次に、これをexec()関数のパラメーターとして使用できます。
exec("mysqldump -u mysqluser -p my_database > my_database_dump.sql");
MajorLeoの答えは私を正しい方向に向かわせましたが、それは私にはうまくいきませんでした。私は同じアプローチに従い、機能したこのサイトを見つけました。
$dir = "path/to/file/";
$filename = "backup" . date("YmdHis") . ".sql.gz";
$db_host = "host";
$db_username = "username";
$db_password = "password";
$db_database = "database";
$cmd = "mysqldump -h {$db_host} -u {$db_username} --password={$db_password} {$db_database} | gzip > {$dir}{$filename}";
exec($cmd);
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"$filename\"");
passthru("cat {$dir}{$filename}");
それが他の誰かを助けることを願っています!
ええと、いつでもPHPのシステム関数呼び出しを使用できます。
http://php.net/manual/en/function.system.php
http://www.php.net/manual/en/function.exec.php
これは、PHPからコマンドラインプログラムを実行します。
これは、別のネイティブPHPベースのオプションです:https : //github.com/2createStudio/shuttle-export
global $wpdb;
$export_posts = $wpdb->prefix . 'export_posts';
$backupFile = $_GET['targetDir'].'export-gallery.sql';
$dbhost=DB_HOST;
$dbuser=DB_USER;
$dbpass=DB_PASSWORD;
$db=DB_NAME;
$path_to_mysqldump = "D:\xampp_5.6\mysql\bin";
$query= "D:\\xampp_5.6\mysql\bin\mysqldump.exe -u$dbuser -p$dbpass $db $export_posts> $backupFile";
exec($query);
echo $query;
上記のコードはどれもうまくいきませんでした。私は窓を使っています。以下のコードは私のために働きました...
$sql = "SELECT * FROM $tableName WHERE yourclause";
$result = $conn->query($sql);
if($result){
if ($result->num_rows > 0) {
$myfile = fopen("daily_events_$district.sql", "w") or die("Unable to open file!");
while($row = $result->fetch_assoc()) {
$rowToString = implode("','",$row);
$writeToFile = "INSERT INTO $tableName VALUES('$rowToString');". PHP_EOL;
fwrite($myfile,$writeToFile);
}
echo "File saved successfully";
}
} else {
echo "No result found";
}
これにより、クエリに応じて、必要なデータに応じてファイルがプロジェクトフォルダに保存されます。
mysqldump
しsystem()
ます。