要求|安装|开始使用 |应用程序接口 |设置| PDO 设置 |待办事项 |许可证|制作人员
这是 MySQL 附带的 mysqldump cli 的 php 版本,没有依赖项、输出压缩和健全的默认值。
MySQLDump-PHP 开箱即用,支持备份表结构、数据本身、视图、触发器和事件。
MySQLDump-PHP 是唯一支持以下功能的库:
从版本 2.0 开始,使用标准 DSN 建立与数据库的连接,记录在 PDO 连接字符串中。
使用作曲家:
$ composer require ifsnop/mysqldump-php
使用 Curl 始终下载并解压最新版本:
$ curl --silent --location https://api.github.com/repos/ifsnop/mysqldump-php/releases | grep -i tarball_url | head -n 1 | cut -d '"' -f 4 | xargs curl --location --silent | tar xvz
使用自动加载器/作曲家:
<?php
use Ifsnop Mysqldump as IMysqldump ;
try {
$ dump = new IMysqldump Mysqldump ( ' mysql:host=localhost;dbname=testdb ' , ' username ' , ' password ' );
$ dump -> start ( ' storage/work/dump.sql ' );
} catch ( Exception $ e ) {
echo ' mysqldump-php error: ' . $ e -> getMessage ();
}
普通的旧 PHP:
<?php
include_once ( dirname ( __FILE__ ) . ' /mysqldump-php-2.0.0/src/Ifsnop/Mysqldump/Mysqldump.php ' );
$ dump = new Ifsnop Mysqldump Mysqldump ( ' mysql:host=localhost;dbname=testdb ' , ' username ' , ' password ' );
$ dump -> start ( ' storage/work/dump.sql ' );
请参阅 wiki,了解一些示例以及 mysqldump 和 mysqldump-php 转储之间的比较。
您可以注册一个可调用函数,用于在导出期间转换值。一个示例用例是从数据库转储中删除敏感数据:
$ dumper = new IMysqldump Mysqldump ( ' mysql:host=localhost;dbname=testdb ' , ' username ' , ' password ' );
$ dumper -> setTransformTableRowHook ( function ( $ tableName , array $ row ) {
if ( $ tableName === ' customers ' ) {
$ row [ ' social_security_number ' ] = ( string ) rand ( 1000000 , 9999999 );
}
return $ row ;
});
$ dumper -> start ( ' storage/work/dump.sql ' );
您可以注册一个可调用函数,用于报告转储的进度
$ dumper ->setInfoHook( function ( $ object , $ info ) {
if ( $ object === ' table ' ) {
echo $ info [ ' name ' ], $ info [ ' rowCount ' ];
});
您可以注册表特定的“where”子句来限制每个表的数据。这些会覆盖默认的where
设置:
$ dumper = new IMysqldump Mysqldump ( ' mysql:host=localhost;dbname=testdb ' , ' username ' , ' password ' );
$ dumper -> setTableWheres ( array (
' users ' => ' date_registered > NOW() - INTERVAL 3 MONTH AND deleted=0 ' ,
' logs ' => ' date_logged > NOW() - INTERVAL 1 DAY ' ,
' posts ' => ' isLive=1 '
));
您可以注册表特定的“限制”以限制每个表返回的行:
$ dumper = new IMysqldump Mysqldump ( ' mysql:host=localhost;dbname=testdb ' , ' username ' , ' password ' );
$ dumper -> setTableLimits ( array (
' users ' => 300 ,
' logs ' => 50 ,
' posts ' => 10
));
/**
* Constructor of Mysqldump. Note that in the case of an SQLite database
* connection, the filename must be in the $db parameter.
*
* @param string $dsn PDO DSN connection string
* @param string $user SQL account username
* @param string $pass SQL account password
* @param array $dumpSettings SQL database settings
* @param array $pdoSettings PDO configured attributes
*/
public function __construct(
$ dsn = '' ,
$ user = '' ,
$ pass = '' ,
$ dumpSettings = array (),
$ pdoSettings = array ()
)
$ dumpSettingsDefault = array (
' include-tables ' => array (),
' exclude-tables ' => array (),
' compress ' => Mysqldump:: NONE ,
' init_commands ' => array (),
' no-data ' => array (),
' if-not-exists ' => false ,
' reset-auto-increment ' => false ,
' add-drop-database ' => false ,
' add-drop-table ' => false ,
' add-drop-trigger ' => true ,
' add-locks ' => true ,
' complete-insert ' => false ,
' databases ' => false ,
' default-character-set ' => Mysqldump:: UTF8 ,
' disable-keys ' => true ,
' extended-insert ' => true ,
' events ' => false ,
' hex-blob ' => true , /* faster than escaped content */
' insert-ignore ' => false ,
' net_buffer_length ' => self :: MAXLINESIZE ,
' no-autocommit ' => true ,
' no-create-db ' => false ,
' no-create-info ' => false ,
' lock-tables ' => true ,
' routines ' => false ,
' single-transaction ' => true ,
' skip-triggers ' => false ,
' skip-tz-utc ' => false ,
' skip-comments ' => false ,
' skip-dump-date ' => false ,
' skip-definer ' => false ,
' where ' => '' ,
/* deprecated */
' disable-foreign-keys-check ' => true
);
$ pdoSettingsDefaults = array (
PDO :: ATTR_PERSISTENT => true ,
PDO :: ATTR_ERRMODE => PDO :: ERRMODE_EXCEPTION ,
PDO :: MYSQL_ATTR_USE_BUFFERED_QUERY => false
);
// missing settings in constructor will be replaced by default options
$ this -> _pdoSettings = self :: array_replace_recursive ( $ pdoSettingsDefault , $ pdoSettings );
$ this -> _dumpSettings = self :: array_replace_recursive ( $ dumpSettingsDefault , $ dumpSettings );
true
忽略所有表现在默认启用以下选项,并且无法禁用它们,因为应始终使用它们。
要转储数据库,您需要以下权限:
使用SHOW GRANTS FOR user@host;了解用户拥有哪些权限。请参阅以下链接了解更多信息:
获取 MySQL 数据库架构备份所需的最低权限是什么?
当前的测试代码是一个丑陋的黑客。使用 PHPUnit 可能有更好的方法来完成这些任务,因此欢迎 PR。测试脚本使用所有可能的数据类型创建并填充数据库。然后它使用 mysqldump-php 和 mysqldump 导出它,并比较输出。只有相同的测试才可以。提交后,使用 phpunit 执行一些测试。
如果 mysql 服务器不支持某些测试,则会跳过这些测试。
一些测试只是在原始 sql 代码和 mysqldump-php 生成的 sql 之间进行比较,因为某些选项在 mysqldump 中不可用。
在这个错误报告之后,又引入了一个新的错误报告。如果该值为空,则使用 hex-blob 选项时也会附加 _binary。
mysqldump-php 不向后兼容 php 5.2,因为我们使用命名空间。然而,如果需要的话,它可以被简单地修复。
编写更多测试,也使用 mariadb 进行测试。
将所有代码格式化为 PHP-FIG 标准。 https://www.php-fig.org/
该项目是根据 GPL 许可证授权的开源软件
8 年多过去了,原始源代码几乎所剩无几,但是:
最初基于 James Elliott 2009 年的脚本。 https://code.google.com/archive/p/db-mysqldump/
由迈克尔·J·卡尔金斯改编和扩展。 https://github.com/clouddueling
目前由迭戈·托雷斯 (Diego Torres) 维护、开发和改进。 https://github.com/ifsnop