【问题标题】:Backup database(s) using query without using mysqldump使用查询而不使用 mysqldump 备份数据库
【发布时间】:2013-08-12 15:07:10
【问题描述】:

我想将我的数据库转储到一个文件中。

某些网站主机不允许远程或命令行访问,因此我必须使用一系列查询来做到这一点。

所有相关问题都说“使用mysqldump”,这是一个很棒的工具,但我没有对该数据库的命令行访问权限。

我希望同时创建 CREATEINSERT 命令 - 基本上,与 mysqldump 的性能相同。 SELECT INTO OUTFILE 是正确的旅行路线,还是我忽略了其他东西 - 或者这不可能?

【问题讨论】:

标签: mysql backup


【解决方案1】:

使用 mysqldump-php 纯 PHP 解决方案复制 mysqldump 可执行文件的功能,用于基本到医疗复杂性用例 - 我知道您可能没有远程 CLI 和/或 mysql 直接访问,但只要您可以通过主机上的 httpd 上的 HTTP 请求执行,这将起作用:

因此,您应该能够直接从 /www/ 中的安全目录运行以下纯 PHP 脚本,并在其中写入输出文件并使用 wget 获取它。

mysqldump-php - Pure PHP mysqldump on GitHub

PHP 示例:

<?php
require('database_connection.php');
require('mysql-dump.php')
$dumpSettings = array(
    'include-tables' => array('table1', 'table2'),
    'exclude-tables' => array('table3', 'table4'),
    'compress' => CompressMethod::GZIP, /* CompressMethod::[GZIP, BZIP2, NONE] */
    'no-data' => false,            
    'add-drop-table' => false,      
    'single-transaction' => true,   
    'lock-tables' => false,        
    'add-locks' => true,            
    'extended-insert' => true      
);

$dump = new MySQLDump('database','database_user','database_pass','localhost', $dumpSettings);
$dump->start('forum_dump.sql.gz');
    ?>

【讨论】:

  • 美女这可能是它。我已经转向了一个不同的问题,但我稍后会回到这个问题。会很好看,干杯。
  • 这确实节省了时间。谢谢。
  • 第二行缺少分号 - 如何在不添加所需 60 个字符的情况下解决此问题?
  • 非常感谢这个库。移动服务器时,我很难修复 mysqldump 权限和路径问题。我只是将其更改为使用它。
【解决方案2】:

如果您的双手被宿主束缚,您可能不得不采取相当极端的方法。使用您的主机提供的任何脚本选项,您可以轻松实现这一点。您可以创建一个只有您自己知道的安全网页或严格文本转储链接,并且足够安全以防止所有未经授权的访问。构建页面/文本内容的脚本可以按照以下步骤编写:

对于您要备份的每个数据库:

  • 第 1 步:运行 SHOW TABLES

  • 第 2 步:对于上述查询返回的每个表名,运行 SHOW CREATE TABLE 以获取您可以在另一台服务器上运行的创建语句以重新创建表并将结果输出到网页。您可能必须在前面加上“DROP TABLE X IF EXISTS;”在这些查询的结果生成的每个创建语句之前(!不在您的查询输入中!)。

  • 第 3 步:对于从第 1 步返回的每个表名,再次运行 SELECT * 查询并捕获完整结果。您需要在输出到屏幕之前对该查询结果应用批量转换,以将每一行转换为INSERT INTO tblX 语句并将最终转换结果输出到网页/文本文件下载。

最终的网页/文本下载将输出所有带有“drop table if exists”保护措施的 create 语句和 insert 语句。将输出作为“.sql”文件保存到您自己的机器上,并根据需要在任何备份主机上执行。

很抱歉,您必须经历这些。请注意,保留您需要的 mysql 用户帐户完全是另一回事。

【讨论】:

  • 你应该很抱歉,鲍勃。 >:( 开个玩笑。感谢您的帮助。似乎有些基本的东西我忘记了,但找不到是什么。嗯。
  • 是的,不是用户帐户,不过谢谢,我想用它的键转储整个东西并创建语句。
  • 未来用户请注意:虽然我已经接受这个答案作为最有可能的方法,但我实际上并没有尝试过(抱歉)。谢谢鲍勃。
  • @Steve:没问题。这是最后的答案。希望其他人对您的情况有更好的解决方案。
【解决方案3】:

在您的网络服务器上使用/安装 PhpMySQLAdmin 并单击导出。许多网络主机已经为您提供了这项预先配置的服务,如果您还没有它,它很容易安装(纯 php):http://www.phpmyadmin.net/

这允许您导出您的数据库,以及非常快速轻松地执行其他繁琐的数据库操作 - 它适用于 PHP

我知道问题是“使用查询”,但我相信这里的重点是当 shell 访问不可用时寻求任何必要的手段——这就是我登陆此页面的方式,PhpMyAdmin 救了我!

【讨论】:

  • 请注意,您并不总是有可用的 PHP,也不一定要安装它。如果 PHP 服务只是出于管理目的而运行,有些可能还会存在安全问题 - 因此在安装时请务必正确配置它。
  • phpmyadmin 不是自动备份的好选择。此外,对于共享数据库,mysqldump 作为一个选项没有任何价值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-25
  • 2021-09-12
  • 1970-01-01
  • 2011-08-20
  • 1970-01-01
相关资源
最近更新 更多