【问题标题】:SQL - How do I backup a database by clicking one button?SQL - 如何通过单击一个按钮来备份数据库?
【发布时间】:2017-02-19 17:21:42
【问题描述】:

你好 stackoverflow 用户

我有一个 SQL 数据库,我希望能够通过单击一个按钮来备份它(不要问为什么)那么我是怎么做到的

【问题讨论】:

  • 这是您的问题的哪一部分?用按钮创建页面?张贴表格?连接数据库?做备份?向我们展示您到目前为止所拥有的东西以及您遇到的问题。就目前的形式而言,这个问题方式对于 SO 来说太宽泛了。
  • 谢谢你的例子,但我刚开始编码,我想知道如何创建一个备份我的数据库的代码

标签: php mysql sql


【解决方案1】:

如果您有一台 linux 服务器,则以下代码会在您每次运行时为每月 31 天中的每一天保存一个文件。对于 Windows 服务器,它可能需要一些模块。

创建一个指向该页面的表单:

    <?php


define('DB_HOST', 'localhost');
define('DB_NAME', 'your_database_name');
define('DB_USER', 'your_database_username');
define('DB_PASSWORD', 'your_username_password');
define('BACKUP_SAVE_TO', 'backup_storage_path'); 

$time = time();
$day = date('j', $time);
if ($day == 1) {
    $date = date('Y-m-d', $time);
} else {
    $date = $day;
}

$backupFile = BACKUP_SAVE_TO . '/' . DB_NAME . '_' . $date . '.gz';
if (file_exists($backupFile)) {
    unlink($backupFile);
}
$command = 'mysqldump --opt -h ' . DB_HOST . ' -u ' . DB_USER . ' -p\'' . DB_PASSWORD . '\' ' . DB_NAME . ' | gzip > ' . $backupFile;
system($command);

?>

【讨论】:

    【解决方案2】:

    我不确定您当前的代码或您使用的 SQL 模块。现在,假设您使用的是内置的 sqlite 3 模块。在那种情况下,我仍然需要知道您所说的备份是什么意思。是将用户输入的信息保存在数据库中,还是将数据库中的数据复制到另一个数据库中作为备份?这个问题尚不清楚,但我假设它是第二个。
    1.) 首先导入 Tkinter 和 sqlite 3

    import Tkinter, sqlite3
    

    2.) 然后连接到存储数据库的文件,并创建一个游标

    conn = sqlite3.connect("table.db")
    c = conn.cursor()
    

    3.) 接下来创建 Tkinter 对象(在本例中为按钮)并为其回调创建一个 def

    master = Tk()
    
    def callback():
       c.execute("SELECT * FROM table_name")
       Data = c.fetchall()
       c.execute('''CREATE TABLE IF NOT EXISTS table_backup
             (id INTEGER PRIMARY KEY, some_row, some_row2)''')
    
       row_1 = Data[0]
       row_2 = Data[1]
       c.execute("INSERT INTO table_backup(some_row, some_row2) VALUES(?, ?);",   (row_1, row_2))
       conn.commit()
    b = Button(master, text="OK", command=callback())
    b.pack()
    
    mainloop()
    

    【讨论】:

    • 这是我见过的最奇怪的 PHP 代码(因为这是问题的标签)。
    • 你说得对,我没看到标签。那是sqlite 3。我对PHP没有任何经验,很抱歉。算了:)
    • 这里没有多少权利。 Python而不是PHP。 SQLite3 而不是 Mysql(这也是标签之一)。 :-)。
    • 我很确定您可以在 phpmyadmin 中选择数据库时按Export 选项卡。然后选择您的偏好并按Go
    【解决方案3】:

    非常简单。

    只需创建一个新的 PHP 网页,例如 backup.php 并制作一个表单(带有数据库名称的字段)和一个提交按钮。 当它点击时,你会重定向到另一个临时页面,比如saving.php

    在那个页面中:

    <?php
       $dbhost = 'localhost:3036';
       $dbuser = 'root';
       $dbpass = 'password';
    
       $dbname = $_POST['database_name'];
    
       $backup = $dbname . date("Y-m-d-H-i-s") . '.gz';
       $command = "mysqldump --opt -h $dbhost -u $dbuser -p $dbpass ". "test_db | gzip > $backup";
    
       system($command);
    ?>
    

    数据库备份后,重定向回backup.php

    每次单击该按钮时,您的数据库都会备份到您想要的位置

    【讨论】:

    • mysqldump –e –u[username] -p[password] -h[hostname] [database name] &gt; C:\this\is\path\to]file\[filename].sql
    • 上述答案中的命令适用于 linux,而评论中的命令适用于 windows。我希望您也可以通过查看 windows 命令来了解如何在 linux 中提供位置路径。
    • 此文件将存储在指定的路径中。
    • 不工作...只是输出一个空的 sql 文件顺便说一句我需要写 [] 还是只是为了显示它们的放置位置
    • 您必须删除-p 和密码之间的空格。来自documentation“如果您使用短选项形式 (-p),则选项和密码之间不能有空格。” 这适用于 linux 和 windows。
    猜你喜欢
    • 1970-01-01
    • 2019-08-21
    • 1970-01-01
    • 2013-08-22
    • 2013-07-09
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多