spatie / db-dumper
导出数据库
Requires
- php: ^8.0
- symfony/process: ^5.0|^6.0|^7.0
Requires (Dev)
- pestphp/pest: ^1.22
- dev-main
- 3.6.0
- 3.5.0
- 3.4.3
- 3.4.2
- 3.4.1
- 3.4.0
- 3.3.1
- 3.3.0
- 3.2.1
- 3.2.0
- 3.1.2
- 3.1.1
- 3.1.0
- 3.0.1
- 3.0.0
- 2.21.1
- 2.21.0
- 2.20.0
- 2.19.0
- 2.18.0
- 2.17.0
- 2.16.1
- 2.16.0
- 2.15.3
- 2.15.2
- 2.15.0
- 2.14.3
- 2.14.2
- 2.14.1
- 2.14.0
- 2.13.2
- 2.13.1
- 2.13.0
- 2.12.0
- 2.11.1
- 2.11.0
- 2.10.1
- 2.10.0
- 2.9.0
- 2.8.2
- 2.8.1
- 2.8.0
- 2.7.4
- 2.7.3
- 2.7.2
- 2.7.1
- 2.7.0
- 2.6.1
- 2.6.0
- 2.5.1
- 2.5.0
- 2.4.1
- 2.4.0
- 2.3.0
- 2.2.1
- 2.1.0
- 2.0.1
- 2.0.0
- v1.x-dev
- 1.5.1
- 1.5.0
- 1.4.0
- 1.3.0
- 1.2.4
- 1.2.3
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.0
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- 0.0.2
- 0.0.1
This package is auto-updated.
Last update: 2024-09-08 08:46:48 UTC
README
本仓库包含一个易于使用的类,用于使用PHP导出数据库。目前支持MySQL、PostgreSQL、SQLite和MongoDB。幕后使用 mysqldump
、pg_dump
、sqlite3
和 mongodump
。
以下是创建不同驱动程序数据库转储的简单示例
MySQL
Spatie\DbDumper\Databases\MySql::create() ->setDbName($databaseName) ->setUserName($userName) ->setPassword($password) ->dumpToFile('dump.sql');
PostgreSQL
Spatie\DbDumper\Databases\PostgreSql::create() ->setDbName($databaseName) ->setUserName($userName) ->setPassword($password) ->dumpToFile('dump.sql');
SQLite
Spatie\DbDumper\Databases\Sqlite::create() ->setDbName($pathToDatabaseFile) ->dumpToFile('dump.sql');
⚠️ 使用 includeTables
选项时,需要SQLite版本3.32.0。
MongoDB
Spatie\DbDumper\Databases\MongoDb::create() ->setDbName($databaseName) ->setUserName($userName) ->setPassword($password) ->dumpToFile('dump.gz');
支持我们
我们在创建最佳开源包上投入了大量资源。您可以通过购买我们的付费产品之一来支持我们。
我们非常感谢您从家乡寄来明信片,说明您正在使用我们哪个包。您可以在我们的联系页面上找到我们的地址。我们将所有收到的明信片发布在我们的虚拟明信片墙上。
要求
导出MySQL数据库时,应安装mysqldump
。
导出PostgreSQL数据库时,应安装pg_dump
。
导出SQLite数据库时,应安装sqlite3
。
导出MongoDB数据库时,应安装mongodump
。
为了压缩转储文件,应安装gzip
和/或 bzip2
。
安装
您可以通过composer安装此包
composer require spatie/db-dumper
用法
这是创建MySql数据库转储的最简单方法
Spatie\DbDumper\Databases\MySql::create() ->setDbName($databaseName) ->setUserName($userName) ->setPassword($password) ->dumpToFile('dump.sql');
如果您使用的是PostgreSQL,只需使用该转储程序,大多数方法都可在MySql和PostgreSQL转储程序上找到。
Spatie\DbDumper\Databases\PostgreSql::create() ->setDbName($databaseName) ->setUserName($userName) ->setPassword($password) ->dumpToFile('dump.sql');
如果mysqldump
(或pg_dump
)二进制文件安装在非默认位置,您可以通过使用setDumpBinaryPath()
-函数来让包知道
Spatie\DbDumper\Databases\MySql::create() ->setDumpBinaryPath('/custom/location') ->setDbName($databaseName) ->setUserName($userName) ->setPassword($password) ->dumpToFile('dump.sql');
如果您的应用程序已部署并且您需要更改主机(默认为127.0.0.1),您可以通过添加setHost()
-函数来更改主机
Spatie\DbDumper\Databases\MySql::create() ->setDbName($databaseName) ->setUserName($userName) ->setPassword($password) ->setHost($host) ->dumpToFile('dump.sql');
处理转储中的 AUTO_INCREMENT 值
在创建数据库转储时,您可能需要控制 AUTO_INCREMENT 值的包含。这可能对于避免主键冲突或在不同环境之间传输数据时保持 ID 一致性至关重要。
跳过 AUTO_INCREMENT 值
要跳过转储中表的 AUTO_INCREMENT 值,请使用 skipAutoIncrement 方法。这特别有用,可以防止在将转储导入到另一个数据库时发生冲突,该数据库中可能已经存在那些特定的 AUTO_INCREMENT 值,或者当确切的值无关紧要时。
Spatie\DbDumper\Databases\MySql::create() ->setDbName('dbname') ->setUserName('username') ->setPassword('password') ->skipAutoIncrement() ->dumpToFile('dump.sql');
在转储中包含 AUTO_INCREMENT 值
默认情况下,AUTO_INCREMENT 值包含在转储中。但是,如果您之前使用了 skipAutoIncrement 方法并且希望确保 AUTO_INCREMENT 值包含在后续转储中,请使用 dontSkipAutoIncrement 方法显式包含它们。
Spatie\DbDumper\Databases\MySql::create() ->setDbName('dbname') ->setUserName('username') ->setPassword('password') ->dontSkipAutoIncrement() ->dumpToFile('dump.sql');
使用数据库 URL
在某些应用程序或环境中,数据库凭据作为URL而不是单个组件提供。在这种情况下,您可以使用 setDatabaseUrl
方法而不是单个方法。
Spatie\DbDumper\Databases\MySql::create() ->setDatabaseUrl($databaseUrl) ->dumpToFile('dump.sql');
提供URL时,包将自动解析它并将单个组件提供给适用的转储程序。
例如,如果您提供以下URL mysql://username:password@hostname:3306/dbname
,导出程序将使用hostname
主机,在端口3306
上运行,并使用username
和password
连接到dbname
。
导出特定表
使用数组
Spatie\DbDumper\Databases\MySql::create() ->setDbName($databaseName) ->setUserName($userName) ->setPassword($password) ->includeTables(['table1', 'table2', 'table3']) ->dumpToFile('dump.sql');
使用字符串
Spatie\DbDumper\Databases\MySql::create() ->setDbName($databaseName) ->setUserName($userName) ->setPassword($password) ->includeTables('table1, table2, table3') ->dumpToFile('dump.sql');
不要在MySQL服务的一些旧版本中使用column_statics表。
要使用mysqldump命令中的"--column-statistics=0"选项,可以使用doNotUseColumnStatistics()方法。
如果您已安装mysqldump 8,它默认查询information_schema数据库中的column_statics表。在MySQL(服务)的一些旧版本(如5.7)中,此表不存在。因此,在mysqldump执行过程中可能会出现异常。为了避免这种情况,您可以使用doNotUseColumnStatistics()方法。
Spatie\DbDumper\Databases\MySql::create() ->setDbName($databaseName) ->setUserName($userName) ->setPassword($password) ->doNotUseColumnStatistics() ->dumpToFile('dump.sql');
排除导出表
您可以通过使用数组来排除导出表
Spatie\DbDumper\Databases\MySql::create() ->setDbName($databaseName) ->setUserName($userName) ->setPassword($password) ->excludeTables(['table1', 'table2', 'table3']) ->dumpToFile('dump.sql');
或使用字符串
Spatie\DbDumper\Databases\MySql::create() ->setDbName($databaseName) ->setUserName($userName) ->setPassword($password) ->excludeTables('table1, table2, table3') ->dumpToFile('dump.sql');
不要写入创建每个导出表的CREATE TABLE语句
您可以使用doNotCreateTables
防止写入创建语句。
$dumpCommand = MySql::create() ->setDbName('dbname') ->setUserName('username') ->setPassword('password') ->doNotCreateTables() ->getDumpCommand('dump.sql', 'credentials.txt');
不要写入行数据
您可以使用doNotDumpData
防止写入行数据。
$dumpCommand = MySql::create() ->setDbName('dbname') ->setUserName('username') ->setPassword('password') ->doNotDumpData() ->getDumpCommand('dump.sql', 'credentials.txt');
添加额外选项
如果您想将任意选项添加到导出命令中,可以使用addExtraOption
$dumpCommand = MySql::create() ->setDbName('dbname') ->setUserName('username') ->setPassword('password') ->addExtraOption('--xml') ->getDumpCommand('dump.sql', 'credentials.txt');
如果您正在使用MySQL,您可以使用--databases
作为额外选项来设置数据库名称。这在与--add-drop-database
mysqldump
选项(见mysqldump文档)一起使用时特别有用)。
$dumpCommand = MySql::create() ->setUserName('username') ->setPassword('password') ->addExtraOption('--databases dbname') ->addExtraOption('--add-drop-database') ->getDumpCommand('dump.sql', 'credentials.txt');
使用MySQL,您还可以使用--all-databases
额外选项。当您想要备份指定MySQL连接中的所有数据库时,这很有用。
$dumpCommand = MySql::create() ->setUserName('username') ->setPassword('password') ->addExtraOption('--all-databases') ->getDumpCommand('dump.sql', 'credentials.txt');
请注意,使用->addExtraOption('--databases dbname')
或->addExtraOption('--all-databases')
将覆盖之前->setDbName()
调用设置的数据库名称。
使用压缩
如果您希望输出文件被压缩,可以使用压缩器类。
有两种内置压缩器
GzipCompressor
- 这将使用gzip压缩您的数据库导出。在使用此功能之前,请确保您的系统已安装gzip。Bzip2Compressor
- 这将使用bzip2压缩您的数据库导出。在使用此功能之前,请确保您的系统已安装bzip2。
$dumpCommand = MySql::create() ->setDbName('dbname') ->setUserName('username') ->setPassword('password') ->useCompressor(new GzipCompressor()) // or `new Bzip2Compressor()` ->dumpToFile('dump.sql.gz');
创建自己的压缩器
您可以通过实现Compressor
接口来创建自己的压缩器。下面是这个接口的示例:
namespace Spatie\DbDumper\Compressors; interface Compressor { public function useCommand(): string; public function useExtension(): string; }
useCommand
应该简单地返回数据库导出将被泵送的压缩命令。以下是GzipCompression
的实现。
namespace Spatie\DbDumper\Compressors; class GzipCompressor implements Compressor { public function useCommand(): string { return 'gzip'; } public function useExtension(): string { return 'gz'; } }
测试
$ composer test
变更日志
有关最近更改的更多信息,请参阅变更日志。
贡献
有关详细信息,请参阅贡献指南。
安全漏洞
有关如何报告安全漏洞,请参阅我们的安全策略。
鸣谢
初始PostgreSQL支持由Adriano Machado提供。SQLite支持由Peter Matseykanets提供。
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。