내가 가지고있는 정보는 다음과 같습니다.
MySQL 및 PHP5를 사용하는 Linux 기반 시스템으로 작업하고 있습니다. mysqldump
.php 파일 내에서 를 생성 한 다음 해당 덤프를 내가 지정한 위치에있는 서버의 파일에 저장할 수 있어야합니다.
나는 PHP 초보이기 때문에 누군가가 내게 필요한 것을 할 수있는 도움, 지침 또는 코드를 제공하기를 바랍니다. 이것은 인터넷에서 원격으로 실행되어야합니다.
내가 가지고있는 정보는 다음과 같습니다.
MySQL 및 PHP5를 사용하는 Linux 기반 시스템으로 작업하고 있습니다. mysqldump
.php 파일 내에서 를 생성 한 다음 해당 덤프를 내가 지정한 위치에있는 서버의 파일에 저장할 수 있어야합니다.
나는 PHP 초보이기 때문에 누군가가 내게 필요한 것을 할 수있는 도움, 지침 또는 코드를 제공하기를 바랍니다. 이것은 인터넷에서 원격으로 실행되어야합니다.
답변:
이 exec()
함수를 사용하여 외부 명령을 실행할 수 있습니다 .
참고 : shell_exec()
와 사이 exec()
에서 두 번째 것을 선택합니다.이 옵션은 PHP 스크립트에 출력을 반환하지 않습니다. PHP 스크립트가 전체 SQL 덤프를 문자열로 가져올 필요가 없습니다. 파일에 기록하기 만하면됩니다. 그리고 이것은 명령 자체에 의해 수행 될 수 있습니다.
해당 외부 명령은 다음과 같습니다.
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 의 서버 에서 지금 바로 시도 하고 덤프를 성공적으로 얻었습니다. 팁 주셔서 대단히 감사합니다!
도움이되는 스크립틀릿이 포함 된 다음 링크를 참조하십시오 . http://davidwalsh.name/backup-mysql-database-php
참고 : 이 스크립트는 NULL 데이터 유형의 버그를 포함 할 수 있습니다.
보안상의 이유로 명령이 아닌 구성 파일에 암호를 지정하는 것이 좋습니다 (사용자가 a를 실행 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와 같은 mysql 구조 및 데이터를 덤프하는 포괄적 인 솔루션을 찾을 수 있습니다 (exec, passthru 등을 사용하지 않음).
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);
?>
매력처럼 작동 :-)
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";
}
그러면 원하는 데이터가 무엇이든 쿼리에 따라 프로젝트 폴더에 파일이 저장됩니다.
<?php
$toDay = date('d-m-Y');
$dbhost = "localhost";
$dbuser = "YOUR DB USER";
$dbpass = "USER PASSWORD";
$dbname = "DB NAME";
exec("mysqldump --user=$dbuser --password='$dbpass' --host=$dbhost $dbname > /home/....../public_html/".$toDay."_DB.sql");
?>
mysqldump
로system()
.