使用.php文件生成 MySQL 转储
以下是我掌握的信息:
我正在使用基于Linux的系统,使用MySQL和PHP5。我需要能够在.php文件中生成一个,然后将该转储存储在服务器上我指定位置的文件中。mysqldump
由于我是一个PHP新手,我希望有人给我一些帮助,指导或代码,这将完成我需要的事情。这必须从互联网远程运行。
以下是我掌握的信息:
我正在使用基于Linux的系统,使用MySQL和PHP5。我需要能够在.php文件中生成一个,然后将该转储存储在服务器上我指定位置的文件中。mysqldump
由于我是一个PHP新手,我希望有人给我一些帮助,指导或代码,这将完成我需要的事情。这必须从互联网远程运行。
您可以使用 exec()
函数来执行外部命令。
注意:在 和 之间,我会选择第二个,它不会将输出返回到 PHP 脚本 - PHP 脚本不需要将整个 SQL 转储作为字符串获取:您只需要将其写入文件,这可以通过命令本身来完成。shell_exec()
exec()
该外部命令将:
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);
?>