내가 가지고있는 정보는 다음과 같습니다.
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');
물론 올바른 연결 정보를 사용하여 ...
를 해당 정보로 대체하십시오 .
답변
브라우저를 통해 다운로드하기위한 백업을 생성하려는 경우 파일을 사용하지 않고도이 작업을 수행 할 수 있습니다.
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
);
답변
도움이되는 스크립틀릿이 포함 된 다음 링크를 참조하십시오 .
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);
?>
매력처럼 작동 🙂
답변
exec () 사용이 허용되는 한 PHP 코드를 통해 쉘 명령을 실행할 수 있습니다.
따라서 명령 줄에서 mysqldump를 작성하는 방법을 알고 있다고 가정합니다.
mysqldump -u [username] -p [database] > [database].sql
그런 다음 이것을 exec () 함수의 매개 변수로 사용할 수 있습니다.
exec("mysqldump -u mysqluser -p my_database > my_database_dump.sql");