17

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

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

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

我想CREATEINSERT命令同时创建 - 基本上,与mysqldump. 是SELECT INTO OUTFILE正确的旅行道路,还是我忽略了其他一些事情 - 或者这可能是不可能的?

4

3 回答 3

26

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

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

mysqldump-php - GitHub 上的纯 PHP mysqldump

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');
    ?>
于 2013-08-11T02:38:14.833 回答
2

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

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

  • 第 1 步:运行SHOW TABLES

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

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

最终的网页/文本下载将输出所有带有“如果存在则删除表”保护措施的创建语句和插入语句。将输出作为“.sql”文件保存到您自己的机器,并根据需要在任何备份主机上执行。

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

于 2013-08-11T01:35:28.943 回答
1

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

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

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

于 2014-02-05T16:25:34.577 回答