我正在尝试使用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来恢复。代码不起作用。我哪里错了?
答案 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