[php] .php 파일을 사용하여 MySQL 덤프 생성

내가 가지고있는 정보는 다음과 같습니다.

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");