使用.php文件生成MySQL转储

Tho*_*ard 116 php mysql mysqldump

这是我的信息:

我正在使用基于Linux的系统使用MySQL和PHP5.我需要能够mysqldump在.php文件中生成一个,然后将该转储存储在我指定的位置的服务器上的文件中.

因为我是一个PHP nooblet,我希望有人给我一些帮助,指导或代码,这将做我需要的.这必须从Internet远程运行.

Pas*_*TIN 153

您可以使用该exec()函数执行外部命令.

注意:在shell_exec()和之间exec(),我会选择第二个,它不会将输出返回给PHP脚本 - 不需要PHP脚本将整个SQL转储作为字符串:您只需要将其写入文件,这可以通过命令本身来完成.


该外部命令将:

  • mysqldump用正确的参数打电话给
  • 并将输出重定向到文件.

例如 :

mysqldump --user=... --password=... --host=... DB_NAME > /path/to/output/file.sql
Run Code Online (Sandbox Code Playgroud)


这意味着您的PHP代码如下所示:

exec('mysqldump --user=... --password=... --host=... DB_NAME > /path/to/output/file.sql');
Run Code Online (Sandbox Code Playgroud)


当然,由您决定使用正确的连接信息,替换为...那些.

  • 这对我今天有所帮助 - 并且为osx lion的用户提供了一条注释:当我安装mysql时没有为我设置mysqldump快捷方式,所以我必须找到它 - 这是路径:`/ usr/local/mysql/bin/mysqldump ` (7认同)
  • `exec()`在命令完成之前不会返回; 所以,在调用`exec()`之后,只需要把一些`echo'dump完成"` (5认同)
  • 你的评论,jammypeach,救了我的命.请注意any1可能需要这个小小的补充:'/ usr/local/mysql/bin/mysqldump -u ...' (4认同)
  • 我很快就会抓住这个.有没有办法在PHP页面上完成"转储完成!"后在PHP页面上生成输出.或者其他的东西? (2认同)

小智 76

如果要创建备份以通过浏览器下载,也可以不使用文件来执行此操作.

php函数passthru()将直接将mysqldump的输出重定向到浏览器.在这个例子中,它也将被压缩.

亲:您不必处理临时文件.

Con:无法在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);
?>
Run Code Online (Sandbox Code Playgroud)


die*_*ego 22

看看这里: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();
}

?>
Run Code Online (Sandbox Code Playgroud)

它支持高级用户,从原始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
);
Run Code Online (Sandbox Code Playgroud)

  • 即使在已被安全性禁用了“ exec”和/或“ shell_exec”的服务器上,[mysqldump-php](https://github.com/ifsnop/mysqldump-php)也能很好地工作!只需在[Umbler](https://www.umbler.com)的服务器上尝试一下,即可成功进行转储。非常感谢您的提示! (2认同)

And*_*uel 9

请访问以下包含可帮助您的scriptlet的链接:http: //davidwalsh.name/backup-mysql-database-php

注意:此脚本可能包含NULL数据类型的错误


Con*_*enu 7

出于安全原因,建议在配置文件中而不是在命令中指定密码(用户可以执行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);
Run Code Online (Sandbox Code Playgroud)


ANT*_*ARA 5

在这里,您可以找到一个全面的解决方案来转储像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);

?>
Run Code Online (Sandbox Code Playgroud)

奇迹般有效 :-)


Mat*_*epa 5

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}");
Run Code Online (Sandbox Code Playgroud)

我希望它对其他人有帮助!