rah/danpu

零依赖的MySQL数据库导出库,用于轻松导出和导入数据库

2.7.0 2018-11-06 22:35 UTC

README

Build Status Coverage Status Packagist

Danpu 是一个无依赖、跨平台、可移植的PHP库,用于备份MySQL数据库。它没有硬依赖,适用于安全性关键且访问受限的受限环境。Danpu 只需要访问您的数据库、PDO以及一个它可以写入备份的目录。该脚本经过优化,内存占用低,可以处理甚至更大的数据库。

Danpu 支持备份表结构、数据本身、视图和触发器。创建的备份文件可以可选地压缩以节省空间,生成的SQL输出已优化以提高兼容性。

需求

最低要求

  • PHP 5.3.0 或更高版本
  • MySQL 4.1.0 或更高版本
  • PDO

建议,但可选

  • PHP 5.4.0 或更高版本
  • MySQL 5.0.11 或更高版本
  • zlib

备份视图和触发器需要MySQL 5.0.11 或更高版本。

安装

使用 Composer

$ composer require rah/danpu

用法

要创建新的备份或导入备份,配置一个新的 Dump 实例并将其传递给工作类之一。首先,请确保您的项目中已包含 Composer 的自动加载文件

require './vendor/autoload.php';

如果您已经在使用其他 Composer 包或现代 Composer 管理的框架,这应该已经处理好了。如果没有,只需将自动加载添加到您的基础引导包括中。有关更多信息,请参阅 Composer 文档

创建备份

可以使用 Export 类创建备份。该类将数据库导出到一个SQL文件,或在出错时抛出异常。如果目标文件名以 .gz 扩展名结尾,则文件将进行压缩。

use Rah\Danpu\Dump;
use Rah\Danpu\Export;

try {
    $dump = new Dump;
    $dump
        ->file('/path/to/target/dump/file.sql')
        ->dsn('mysql:dbname=database;host=localhost')
        ->user('username')
        ->pass('password')
        ->tmp('/tmp');

    new Export($dump);
} catch (\Exception $e) {
    echo 'Export failed with message: ' . $e->getMessage();
}

数据库以块的形式导出,每次一行,而不将大量数据缓冲到内存中。这使得脚本非常节省内存,并且可以在系统限制的条件下处理任何大小的数据库。您实际上无法备份占用比PHP可以分配的内存更多的行,如果没有足够的空间来写入文件,则无法写入备份。

导入备份

Danpu 还可以使用导入类导入其自己的备份。虽然导入器可以处理它创建的备份,但它不接受自由格式化的SQL。导入器对格式非常严格,并期望与 Danpu 生成的格式完全相同。它期望语句中的值被正确转义,包括换行符,查询必须以分号结尾,并且语句最好不应换行。

要导入备份,创建导入类的新的实例。它将在导入之前解压缩任何 .gz 文件。

use Rah\Danpu\Dump;
use Rah\Danpu\Import;

try {
    $dump = new Dump;
    $dump
        ->file('/path/to/imported/file.sql')
        ->dsn('mysql:dbname=database;host=localhost')
        ->user('username')
        ->pass('password')
        ->tmp('/tmp');

    new Import($dump);
} catch (\Exception $e) {
    echo 'Import failed with message: ' . $e->getMessage();
}

选项

除了必填的连接和文件位置外,Danpu 还接受各种可选的配置选项。这些包括通过前缀过滤表和视图,忽略表以及创建不含行数据的备份。有关选项的完整列表,请参阅 src/Rah/Danpu/Config.php。源文件包含详细的文档块,概述了每个选项。

故障排除

内存不足,备份时间过长

与任何PHP脚本一样,单谱受到您为PHP设置的安全限制的限制。当处理大型数据库时,备份将需要更长的时间并需要更多的内存。如果您遇到最大执行时间或内存不足的问题,那么是时候增加限制以允许脚本正常工作了。

PHP 允许您通过其 配置选项 来更改这些限制,这些选项可以在脚本执行期间临时修改 修改,或者在全局配置文件中。您最感兴趣的配置选项是 memory_limitmax_execution_time,以及可能的 ignore_user_abort。您可以在使用单谱进行备份之前更改这些值。

ini_set('memory_limit', '256M');
set_time_limit(0);
ignore_user_abort(true);

当然,这要求您有权访问这些值并且实际上有更多的内存可以提供。请记住,PHP 可能会受到其他限制的影响,例如您的 web 服务器。