使用. php 文件生成 MySQL 转储

以下是我掌握的信息:

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

因为我是一个 PHP Nooblet,我希望有人给我一些帮助,指导,或代码,这将做我需要的。这必须在互联网上远程运行。

241679 次浏览

您总是可以使用 PHP 的系统函数调用。

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

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

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

< ? php Exec (‘ mysqldump —— all-database >/your/path/to/test.sql’) ; ? >

当然,您可以使用 mysqldump 提供的任何选项来扩展该命令。使用 man mysqldump获得更多选项(但我想您已经知道这一点;)

可以使用 强 > 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 代码执行 shell 命令。

因此,假设您知道如何在命令行中编写 mysqldump,即。

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

然后您可以使用它作为 exec ()函数的参数。

exec("mysqldump -u mysqluser -p my_database > my_database_dump.sql");
<?php
$toDay = date('d-m-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 函数 直通()将直接将 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);
?>

在这里你可以找到一个全面的解决方案来转储 mysql 结构和数据,比如在 PMA 中(不使用 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);


?>

效果非常好: -)

看看这里: https://github.com/ifsnop/mysqldump-php! 这是一个用 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 页面上解释了,但多多少少都是自动解释的:

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

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

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

里奥少校的回答给了我正确的方向,但是对我没有用。我发现 这个网站采用了同样的方法,并且起了作用。

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

我希望这能帮到别人!

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;

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

以上的代码对我都不起作用,我用的是窗户。 下面的代码为我工作..。

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

这将根据您的查询将文件保存在您的项目文件夹中,无论您想要什么数据。