用PDO PHP自动化mysqldump,有可能吗?

时间:2015-02-12 18:42:24

标签: php mysql apache pdo mysqldump

我试图创建一个带有两个按钮的简单页面,而当按下其中一个按钮时,数据库被转储(mysqldump)而另一个被恢复(导入)。

我会尝试在一个开发环境中执行此操作,我没有集中式服务器,有时我发现自己根据日期和情况,脚本本身从几台不同的PC上工作(即代码)我只是与SpiderOak同步,我试图让mysqldump在PC之间做同样的事情。

的index.html

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <title>Herramienta Back Up/Restore DataBase ;)</title>
    <link rel="stylesheet" type="text/css" href="Babifu.css">
</head>
<body>
    <center>
        <img class="thumb" src="http://lorempixel.com/g/450/370/nightlife/"/><br /><br />
        <form id="me1" action="backup.php" method="post"><br /><br /><br />
            <input type="submit" value="Backup database" />
        </form>
        <form id="me2" action="restore.php" method="post"><br /><br /><br /><br /><br /><br />
            <input type="submit" value="Importar" />
        </form>
        <div class="clear"></div>
    </center>
</body>
</html>

backup.php

<?php
include('conection.php');
try {
    $qls = "mysqldump --default-character-set=UTF8 --single-transaction -u root -p[Paswordofthedatabase] u739462586_dtren > restoresync.sql";
    $stmt = $con->prepare($qls);
    $rslt = $stmt->execute();
    echo "Base de Datos Salvadas Correctamente";
} catch(PDOException $e) {
    echo $e->getMessage;
}
?>

restore.php

<?php
include('conection.php');
try {
    $qls = "mysql -u root -p[Paswordofthedatabase] < restoresync.sql";
    $stmt = $con->prepare($qls);
    $rslt = $stmt->execute();
    echo"Base de Datos Restaurados/Importados Correctamente";
} catch(PDOException $e) {
    echo $e->getMessage;
}
?>

问题是,它无法正常工作,控制台不会显示任何错误消息,因此它会执行PHP。

甚至可以通过查询执行此操作吗?我该怎么做?这段代码有什么问题?

有没有什么方法可以确保在特定文件夹上创建备份?任何建议,评论,澄清请求,问题或答案都将非常感激。

1 个答案:

答案 0 :(得分:3)

这些不是MySQL查询,而是通过终端执行的命令。 使用此命令执行命令并获得完整输出:

$dump_output = shell_exec("mysqldump --opt --default-character-set=UTF8 --single-transaction --protocol=TCP -u --user=root --password=dbpassword --host=localhost DB_NAME > restoresync.sql");
echo $dump_output; /* Your output of the dump command */

$restore_output = shell_exec("mysql -u root -p[Paswordofthedatabase] < restoresync.sql");
echo $restore_output; /* Your output of the restore command */

除了shell_exec(),您还可以使用exec(),例如 halfer

它们之间的区别在于,您使用shell_exec()获得完整输出,而exec()只获得输出返回的最后一行。