【开源推荐】mysqldump-php: MySQL附带的mysqldump cli的PHP版本

这是MySQL附带的php版本mysqldump cli,没有依赖项、输出压缩和sane默认值。开箱即用,MySQLDump-PHP支持备份表结构、数据本身、视图、触发器和事件。
我们可以基于此工具写自己的备份小工具,特别适合用在第三方程序中,比如 wordpress 博客等。

MySQLDump-PHP 支持

以十六进制形式输出二进制blob。

解析视图依赖项(使用Stand-In表)。

输出与原始mysqldump进行比较。链接到travis-ci测试系统(从php5.3到7.3&hhvm的测试)

转储存储的例程(函数和过程)。

dumps events.
does extended-insert and/or complete-insert.

支持MySQL5.7中的虚拟列。

insert-ignore与REPLACE相似,但如果存在重复密钥,则忽略错误。

在转储时使用钩子修改数据库on-the-fly中的数据。

可以通过压缩流包装器(GZIPSTREAM)直接保存到云存储。

使用环境

PHP 5.3.0或更新版本

MySQL 4.1.0或更新版本

PDO

安装方法

composer require ifsnop/mysqldump-php

使用方法

<?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();
}

导出时更改值

您可以注册一个在导出期间用于转换值的可调用文件。例如use-case从数据库转储中删除敏感数据:

$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'];
});

您可以注册一个callable,它将用于报告转储的进度

表特定出口条件

您可以注册特定于表的“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'
));

表特定出口限制

您可以注册特定于表的“limits”以限制每个表返回的行:

$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-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);

导出设置

include-tables仅包含这些表(表名数组),如果为空,则全部包含。

exclude-tables排除这些表(表名的数组),如果为空则包括all,支持regexp。

include-views仅包含这些视图(视图名称数组),如果为空则包含所有视图。默认情况下,包含名为include-tables数组的所有视图。

if-not-exists只有在同名表不存在时才创建新表。如果表已经存在,则不会抛出错误消息。

压缩Gzip,Bzip2,无。可以使用声明的consts指定:IMysqldump\Mysqldump::GZIP、IMysqldump\Mysqldump::BZIP2或IMysqldump\Mysqldump::NONE
reset-auto-increment从与no-data一起使用时有用的数据库定义中删除AUTO_INCREMENT选项,因此当重新创建db时,它将从1开始,而不是使用旧值

资源下载
PHP学习网
公众号回复“PHPER7119”获取下载!
请打开微信扫描右边的二维码回复关键字“PHPER7119”也可以微信直接搜索“PHP学习网”关注微信公众号获取。


关注微信公众号『PHP学习网

第一时间了解最新网络动态
关注博主不迷路~

PHP学习网:站内收集的部分资源来源于网络,若侵犯了您的合法权益,请联系我们删除!
分享到:
赞(0)

文章评论

您需要之后才可以评论
0点赞 0评论 收藏 QQ分享 微博分享

PHP学习网

PHP学习网