使用查询备份数据库而不使用mysqldump

时间:2013-08-11 01:01:40

标签: mysql backup

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

某些网站托管服务商不允许远程访问或命令行访问,因此我必须使用一系列查询来执行此操作。

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

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

3 个答案:

答案 0 :(得分:21)

使用mysqldump-php一个纯PHP解决方案来复制mysqldump可执行文件的功能,以用于基本的med复杂用例 - 我知道你可能没有远程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');
    ?>

答案 1 :(得分:1)

你的双手被你的主人束缚,你可能不得不采取一种相当极端的方法。使用主机提供的任何脚本选项,您可以通过一点点困难实现这一目标。您可以创建仅为您所知的安全网页或海峡文本转储链接,并且具有足够的安全性以防止所有未经授权的访问。可以编写用于构建页面/文本内容的脚本,以遵循以下步骤:

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

  • 第1步:运行SHOW TABLES

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

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

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

对不起,你必须经历这个。请注意,保留所需的mysql用户帐户完全不同。

答案 2 :(得分:1)

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

这允许您导出数据库,以及非常快速和轻松地执行其他繁琐的数据库操作 - 它适用于旧版本的PHP&lt; 5.3(不同于Mysqldump.php提供的另一个答案)。

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