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

使用查询而不使用mysqldump备份数据库,mysql,backup,Mysql,Backup,我想把我的数据库转储到一个文件中 某些网站主机不允许远程或命令行访问,因此我必须使用一系列查询来实现这一点 所有相关的问题都说使用mysqldump,这是一个很好的工具,但我没有这个数据库的命令行访问权限 我希望同时创建和插入命令-基本上,性能与mysqldump相同。选择进入OUTFILE是正确的旅行路线,还是我忽略了其他一些东西?或者这可能是不可能的?由于主人束缚了你的双手,你可能不得不采取一种非常极端的方法。使用主机提供的任何脚本选项,您都可以轻松实现这一点。您可以创建一个安全的网页或文本

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

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

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


我希望同时创建和插入命令-基本上,性能与mysqldump相同。选择进入OUTFILE是正确的旅行路线,还是我忽略了其他一些东西?或者这可能是不可能的?

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

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

步骤1:跑步

步骤2:对于上述查询返回的每个表名,运行以获取create语句,您可以在另一台服务器上运行该语句来重新创建表并将结果输出到web页面。如果存在DROP TABLE X,您可能必须在其前面加上前缀;在每个create语句之前生成这些查询的结果!不在查询输入中

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

最终的网页/文本下载将输出所有create语句和drop table语句(如果存在),以及insert语句。将输出以.sql文件的形式保存到您自己的计算机上,并根据需要在任何备份主机上执行

很抱歉,你不得不这么做。请注意,保留您需要的mysql用户帐户完全是另外一回事。

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

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

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');
    ?>

在web服务器上使用/安装PhpMySQLAdmin,然后单击导出。许多web主机已经将此作为预先配置的服务提供给您,如果您还没有纯php,则很容易安装:

这允许您导出数据库,以及非常快速、轻松地执行其他繁琐的数据库操作,并且它适用于PHP<5.3的旧版本,而不像这里作为另一个答案提供的Mysqldump.PHP


我知道这个问题是“使用查询”,但我相信这里的重点是,当shell访问不可用时,会寻求任何必要的方法-这就是我如何登陆此页面的原因,PhpMyAdmin救了我

更改托管选项以获取MySQL转储@Prix:您的粗体链接使用mysqldump,OP希望避免这种情况。@BasileStrynkevitch我希望您能阅读粗体链接的can't部分,后续链接也非常简单。@Steve说实话,我认为您不必放弃它,使用php或perl,列表表,创建自己的链接相当容易,显示它们是如何在存储区中创建的,然后查询每个表中的所有数据并对其进行预格式化。鲍勃,你应该感到抱歉。>:只是开玩笑。谢谢你的帮助。似乎有些基本的东西我忘记了,但找不到它是什么。啊,好吧。是的,不是用户帐户,不过谢谢,我想用它的键转储整个东西并创建语句。给未来的用户注意:虽然我已经接受这个答案作为最有可能的方式,但我实际上没有尝试过。对不起。谢谢你,鲍勃。@史蒂夫:没问题。这是作为最后的答案。希望其他人能为你的案件提供更好的解决方案。这可能就是它。我已经转到了另一个问题,但过一会儿我会回到这个问题上来。我会好好看看的,干杯。那真的节省了时间。谢谢。第二行缺少分号-如何在不添加所需60个字符的情况下修复此问题?非常感谢此库。移动服务器时,我很难修复mysqldump权限和路径问题。我只是把它改成使用这个。请注意,您并不总是可以使用PHP,也不一定要安装它。如果PHP serivce只是为了管理目的而运行,那么有些可能还存在安全问题,因此安装时请确保正确配置它 n用于自动备份。此外,对于共享数据库,mysqldump作为一个选项没有任何使用价值。