rah / danpu
零依赖的MySQL数据库导出库,用于轻松导出和导入数据库
Requires
- php: >=5.3.0
- ext-pdo: *
Requires (Dev)
- phpunit/phpunit: 5.7.*
- satooshi/php-coveralls: 0.6.*
- squizlabs/php_codesniffer: 3.*
Suggests
- ext-zlib: *
README
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_limit 和 max_execution_time,以及可能的 ignore_user_abort。您可以在使用单谱进行备份之前更改这些值。
ini_set('memory_limit', '256M'); set_time_limit(0); ignore_user_abort(true);
当然,这要求您有权访问这些值并且实际上有更多的内存可以提供。请记住,PHP 可能会受到其他限制的影响,例如您的 web 服务器。