使用.php文件生成MySQL转储

问题描述 投票:111回答:15

这是我的信息:

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

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

php mysql mysqldump
15个回答
147
投票

您可以使用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');

当然,由你来使用正确的连接信息,用那些替换...


0
投票

好吧,你总是可以使用PHP的系统函数调用。

http://www.php-mysql-tutorial.com/wikis/mysql-tutorials/using-php-to-backup-mysql-databases.aspx

http://php.net/manual/en/function.system.php

它运行PHP的任何命令行程序。


0
投票

http://www.php.net/manual/en/function.exec.php

您可以使用mysqldump采用的任何选项扩展命令。使用<?php exec('mysqldump --all-databases > /your/path/to/test.sql'); ?>获得更多选项(但我猜你知道;))


0
投票

这是另一个基于PHP的本地选项:man mysqldump


0
投票

要使用shell_exec()转储数据库,下面是方法:

https://github.com/2createStudio/shuttle-export

0
投票

shell_exec('mysqldump -h localhost -u username -ppassword databasename  | gzip > dbname.sql.gz');

-1
投票
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;

72
投票

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

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

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();
}

?>

它支持高级用户,从原始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
);

10
投票

请参阅以下链接,其中包含可帮助您的scriptlet:qazxsw poi

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


6
投票

出于安全原因,建议在配置文件中而不是在命令中指定密码(用户可以执行http://davidwalsh.name/backup-mysql-database-php并查看密码)。

ps aux | grep mysqldump

5
投票

只要允许使用//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); ,就可以通过PHP代码执行shell命令。

所以假设您知道如何在命令行中编写mysqldump,即

exec()

那么你可以使用它作为exec()函数的参数。

mysqldump -u [username] -p [database] > [database].sql

5
投票

在这里,您可以找到一个全面的解决方案来转储像PMA中的mysql结构和数据(并且不使用exec,passthru等):

exec("mysqldump -u mysqluser -p my_database > my_database_dump.sql");

这是我的增强功能的dszymczuk项目的分支。

用法很简单

https://github.com/antarasi/MySQL-Dump-with-Foreign-keys

奇迹般有效 :-)


3
投票

MajorLeo的回答指出了我正确的方向,但它对我没有用。我发现<?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); ?> 遵循相同的方法并且确实有效。

this site

我希望它可以帮助别人!


1
投票

上述代码都不适合我。我正在使用Windows。以下代码对我有用......

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

这将根据您的查询将任何数据保存在项目文件夹中。如果要转储整个数据库或表,则可以使用此链接$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"; }

© www.soinside.com 2019 - 2024. All rights reserved.