我想将我的数据库导出到文件。
由于某些网站主机不允许远程或命令行访问,因此我必须使用一系列查询来完成这项工作。
所有相关的问题都说“使用 mysqldump
”,这是一个很棒的工具,但我没有命令行访问该数据库。
我希望同时创建CREATE
和INSERT
命令-基本上与mysqldump
相同的性能。是否应该使用SELECT INTO OUTFILE
,或者我是否忽略了其他方案-或者可能不可能?
使用 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');
?>
如果您的主机限制了您的操作,您可能需要采取一种相当极端的方法。使用主机提供的任何脚本选项,您可以轻松实现此目标。您可以创建一个仅您知道且足够安全以防止未经授权访问的安全网页或纯文本转储链接。编写构建页面/文本内容的脚本可以遵循以下步骤:
对于您想要备份的每个数据库:
步骤1:运行SHOW TABLES
。
步骤2:对于以上查询返回的每个表名,运行SHOW CREATE TABLE
以获取创建语句,您可以在另一个服务器上运行该语句来重新创建表,并将结果输出到网页。您可能需要在这些查询的结果中生成的每个创建语句之前添加“DROP TABLE X IF EXISTS;”(不要在查询输入中添加!)。
步骤3:再次针对步骤1返回的每个表名运行SELECT *
查询并捕获完整结果。您需要对此查询结果应用批量转换,以将每行转换为INSERT INTO tblX
语句,并将最终转换后的结果输出到网页/文本文件下载。
mysqldump
,而这正是 OP 想要避免的。 - Basile Starynkevitch