如何在php中恢复mysql数据库

时间:2014-10-01 04:13:47

标签: php mysql

我正在尝试使用php恢复mysql数据库。我用Google搜索并找到了这段代码: -

<?php

$restore_file  = "backup.bkp";
$server_name   = "localhost";
$username      = "root";
$password      = "pass";
$database_name = "db";

$cmd = "mysql -h {$server_name} -u {$username} -p{$password} {$database_name}  
<  $restore_file";
exec($cmd);

?>

我正在使用共享服务器(linux),并且使用phpmyadmin成功恢复了该文件。但我想用php来恢复。代码不起作用。我哪里错了?

3 个答案:

答案 0 :(得分:1)

通常,共享托管服务器将禁用对系统功能的访问,因为它会为它们带来安全风险。如果您的服务器提供商允许您使用phpinfo命令(docs),则可以确认。

创建一个转储PHP信息的页面,然后在该页面上查找名为disable_functions的设置 - 它位于“核心”部分下。如果exec出现在那里,那么您将知道exec是禁用的功能,您将无法使用它。不幸的是,使用某些共享托管服务的一个缺点是,实现您正在讨论的各种事情是不可能/非常困难的。

答案 1 :(得分:1)

感谢@Scoopy,我发现exec()被托管服务提供商禁用了。但是,我使用以下代码here解决了我的问题: -

$db = mysql_connect ( 'localhost', 'username', 'pass' ) or die('not connected');
mysql_select_db( 'test', $db) or die('Not found');
$fp = fopen ( 'backup-file', 'r' );
$fetchData = fread ( $fp, filesize ( 'backup-file') );
$sqlInfo = explode ( ";\n", $fetchData); // explode dump sql as a array data    

foreach ($sqlInfo AS $sqlData )
{
mysql_query ( $sqlData ) or die('Query not executed');
}

但该代码已被弃用。所以,我编写了这段代码: -

$host = 'localhost'; 
$user = 'root';
$password = 'root';
$database = 'test';

$conn = new mysqli($host, $user, $password, $database);
$conn->autocommit(FALSE);

$fp = fopen('bkp-file', 'r');
$fetchData = fread($fp, filesize('bkp-file'));
$sqlInfo = explode(";\n", $fetchData); // explode dump sql as a array data

foreach ($sqlInfo AS $sqlData) {
    $conn->query($sqlData);
}
$conn->commit();
$conn->close();

此代码非常适合使用。它使用事务来防止多次写入。

答案 2 :(得分:0)

我不明白为什么你需要PHP,你可以直接在终端上做到这一点。

<强>备份

mysqldump -u root -p db> backup.bkp

<强>恢复

mysql -u root -p db < backup.bkp