使用.php文件来生成MySQL转储

这里是我有的信息:

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

因为我是一个PHP nooblet,我希望有人给我一些帮助,指导或代码,这将做我所需要的。 这将不得不从互联网远程运行。

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

注意:在shell_exec()exec() ,我会select第二个,它不会将输出返回到PHP脚本 – 不需要PHP脚本将整个SQL转储作为string:您只需要它写入文件,这可以通过命令本身来完成。

这个外部命令将会:

  • 调用mysqldump ,用正确的参数,
  • 并将输出redirect到一个文件。

例如 :

 mysqldump --user=... --password=... --host=... DB_NAME > /path/to/output/file.sql 

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

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

当然,由您决定使用正确的连接信息,replace...

如果你想创build一个备份来通过浏览器下载,你也可以在不使用文件的情况下做到这一点。

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

临:你不必处理临时文件。

Con:在Windows上不能使用。 大数据集可能有限制。

 <?php $DBUSER="user"; $DBPASSWD="password"; $DATABASE="user_db"; $filename = "backup-" . date("dmY") . ".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编写的本地解决scheme。

你可以使用composer php来安装它,而且这么做很简单:

 <?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页面解释,但或多或​​less是自动说明的:

 $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数据types的错误

只要允许使用exec() ,就可以通过PHP代码执行shell命令。

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

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

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

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

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

奇迹般有效 :-)

出于安全原因,build议在configuration文件中指定密码,而不是在命令中指定密码(用户可以执行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); 

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

我希望它能帮助别人!

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

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

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

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

<?php exec('mysqldump --all-databases > /your/path/to/test.sql'); ?>

您可以使用mysqldump所需的任何选项来扩展命令。 使用man mysqldump获取更多选项(但是我想你知道这一点;))

这里是另一个基于PHP的选项: https : //github.com/2createStudio/shuttle-export

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

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

上面的代码没有为我工作。 我正在使用Windows。 下面的代码为我工作…

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

这将根据您的查询将文件保存在您的项目文件夹中,无论您需要什么数据。 如果你想转储整个数据库或表,那么你可以使用这个链接http://www.php-mysql-tutorial.com/wikis/mysql-tutorials/using-php-to-backup-mysql-databases.aspx

 <?php $toDay = date('dm-Y'); $dbhost = "localhost"; $dbuser = "YOUR DB USER"; $dbpass = "USER PASSWORD"; $dbname = "DB NAME"; exec("mysqldump --user=$dbuser --password='$dbpass' --host=$dbhost $dbname > /home/....../public_html/".$toDay."_DB.sql"); ?> 

我也有一个情况,我找不到工具为我工作。 因此,为了从PHP备份和恢复MYSQL数据,我制作了一个程序,可以将数据压缩成一个zip文件,您可以下载。 稍后您可以上传和恢复完整的数据库。 你可以在我的Github页面上find它