该存储库包含一个易于使用的类,用于使用 PHP 转储数据库。目前支持 MySQL、PostgreSQL、SQLite 和 MongoDB。在幕后使用mysqldump
、 pg_dump
、 sqlite3
和mongodump
。
以下是如何使用不同驱动程序创建数据库转储的简单示例:
MySQL
SpatieDbDumperDatabasesMySql::create() ->setDbName($databaseName) ->setUserName($用户名) ->setPassword($密码) ->dumpToFile('dump.sql');
PostgreSQL
SpatieDbDumperDatabasesPostgreSql::create() ->setDbName($数据库名称) ->setUserName($用户名) ->setPassword($密码) ->dumpToFile('dump.sql');
SQLite
SpatieDbDumperDatabasesSqlite::create() ->setDbName($pathToDatabaseFile) ->dumpToFile('dump.sql');
includeTables
选项时需要 Sqlite 版本 3.32.0。
MongoDB
SpatieDbDumperDatabasesMongoDb::create() ->setDbName($数据库名称) ->setUserName($用户名) ->setPassword($密码) ->dumpToFile('dump.gz');
我们投入了大量资源来创建一流的开源包。您可以通过购买我们的一款付费产品来支持我们。
我们非常感谢您从家乡寄给我们一张明信片,并注明您正在使用我们的哪种套餐。您可以在我们的联系页面上找到我们的地址。我们在虚拟明信片墙上发布所有收到的明信片。
为了转储 MySQL-db,应该安装mysqldump
。
为了转储 PostgreSQL-db,应该安装pg_dump
。
为了转储 SQLite-db,应该安装sqlite3
。
为了转储 MongoDB-db,应该安装mongodump
。
要压缩转储文件,应安装gzip
和/或bzip2
。
您可以通过 Composer 安装该软件包:
作曲家需要 spatie/db-dumper
这是创建 MySql 数据库转储的最简单方法:
SpatieDbDumperDatabasesMySql::create() ->setDbName($数据库名称) ->setUserName($用户名) ->setPassword($密码) ->dumpToFile('dump.sql');
如果您使用 PostgreSQL,只需使用该转储程序,大多数方法在 MySql 上都可用。和 PostgreSql-dumper。
SpatieDbDumperDatabasesPostgreSql::create() ->setDbName($数据库名称) ->setUserName($用户名) ->setPassword($密码) ->dumpToFile('dump.sql');
如果mysqldump
(或pg_dump
)二进制文件安装在非默认位置,您可以使用setDumpBinaryPath()
函数让包知道:
SpatieDbDumperDatabasesMySql::create() ->setDumpBinaryPath('/自定义/位置') ->setDbName($数据库名称) ->setUserName($用户名) ->setPassword($密码) ->dumpToFile('dump.sql');
如果您的应用程序已部署并且需要更改主机(默认为 127.0.0.1),您可以添加setHost()
函数:
SpatieDbDumperDatabasesMySql::create() ->setDbName($数据库名称) ->setUserName($用户名) ->setPassword($密码) ->setHost($主机) ->dumpToFile('dump.sql');
创建数据库转储时,您可能需要控制 AUTO_INCRMENT 值的包含情况。这对于避免主键冲突或在跨环境传输数据时保持 ID 一致性至关重要。
要从转储中的表中省略 AUTO_INCREMENT 值,请使用skipAutoIncrement 方法。当将转储导入到可能已经存在这些特定 AUTO_INCREMENT 值的另一个数据库时,或者当确切值不相关时,这对于防止冲突特别有用。
SpatieDbDumperDatabasesMySql::create() ->setDbName('数据库名称') ->setUserName('用户名') ->setPassword('密码') ->跳过自动增量() ->dumpToFile('dump.sql');
默认情况下,AUTO_INCREMENT 值包含在转储中。但是,如果您以前使用过skipAutoIncrement 方法并希望确保AUTO_INCREMENT 值包含在后续转储中,请使用dontSkipAutoIncrement 方法显式包含它们。
SpatieDbDumperDatabasesMySql::create() ->setDbName('数据库名称') ->setUserName('用户名') ->setPassword('密码') ->不要跳过自动增量() ->dumpToFile('dump.sql');
在某些应用程序或环境中,数据库凭据作为 URL 而不是单个组件提供。在这种情况下,您可以使用setDatabaseUrl
方法而不是单独的方法。
SpatieDbDumperDatabasesMySql::create() ->setDatabaseUrl($databaseUrl) ->dumpToFile('dump.sql');
提供 URL 时,包将自动解析它并将各个组件提供给适用的转储程序。
例如,如果您提供 URL mysql://username:password@hostname:3306/dbname
,转储程序将使用在端口3306
上运行的hostname
host ,并将使用username
和password
连接到dbname
。
使用数组:
SpatieDbDumperDatabasesMySql::create() ->setDbName($数据库名称) ->setUserName($用户名) ->setPassword($密码) ->includeTables(['表1', '表2', '表3']) ->dumpToFile('dump.sql');
使用字符串:
SpatieDbDumperDatabasesMySql::create() ->setDbName($数据库名称) ->setUserName($用户名) ->setPassword($密码) ->includeTables('表1,表2,表3') ->dumpToFile('dump.sql');
为了在 mysqldump 命令中使用“ --column-statistics=0 ”作为选项,您可以使用doNotUseColumnStatistics()方法。
如果您安装了mysqldump 8 ,它会默认查询information_schema数据库中的column_statics表。在某些旧版本的MySql(服务)中,例如5.7,该表不存在。所以在执行mysqldump的过程中可能会出现异常。为了避免这种情况,您可以使用doNotUseColumnStatistics()方法。
SpatieDbDumperDatabasesMySql::create() ->setDbName($数据库名称) ->setUserName($用户名) ->setPassword($密码) ->doNotUseColumnStatistics() ->dumpToFile('dump.sql');
您可以使用数组从转储中排除表:
SpatieDbDumperDatabasesMySql::create() ->setDbName($数据库名称) ->setUserName($用户名) ->setPassword($密码) ->excludeTables(['表1', '表2', '表3']) ->dumpToFile('dump.sql');
或者使用字符串:
SpatieDbDumperDatabasesMySql::create() ->setDbName($数据库名称) ->setUserName($用户名) ->setPassword($密码) ->excludeTables('表1,表2,表3') ->dumpToFile('dump.sql');
您可以使用doNotCreateTables
来防止编写 create 语句。
$dumpCommand = MySql::create() ->setDbName('数据库名称') ->setUserName('用户名') ->setPassword('密码') ->不创建表() ->getDumpCommand('dump.sql', 'credentials.txt');
您可以使用doNotDumpData
来防止写入行数据。
$dumpCommand = MySql::create() ->setDbName('数据库名称') ->setUserName('用户名') ->setPassword('密码') ->doNotDumpData() ->getDumpCommand('dump.sql', 'credentials.txt');
如果要向转储命令添加任意选项,可以使用addExtraOption
$dumpCommand = MySql::create() ->setDbName('数据库名称') ->setUserName('用户名') ->setPassword('密码') ->addExtraOption('--xml') ->getDumpCommand('dump.sql', 'credentials.txt');
如果您使用 MySql,您可以使用--databases
作为额外选项来设置数据库名称。当与--add-drop-database
mysqldump
选项结合使用时,这特别有用(请参阅 mysqldump 文档)。
$dumpCommand = MySql::create() ->setUserName('用户名') ->setPassword('密码') ->addExtraOption('--数据库 dbname') ->addExtraOption('--add-drop-database') ->getDumpCommand('dump.sql', 'credentials.txt');
对于 MySql,您还可以选择使用--all-databases
额外选项。当您想要对指定 MySQL 连接中的所有数据库运行完整备份时,这非常有用。
$dumpCommand = MySql::create() ->setUserName('用户名') ->setPassword('密码') ->addExtraOption('--所有数据库') ->getDumpCommand('dump.sql', 'credentials.txt');
请注意,使用->addExtraOption('--databases dbname')
或->addExtraOption('--all-databases')
将覆盖先前->setDbName()
调用中设置的数据库名称。
如果您希望压缩输出文件,可以使用压缩器类。
开箱即用有两种压缩机:
GzipCompressor
- 这将使用gzip
压缩您的数据库转储。使用此功能之前,请确保您的系统上已安装gzip
。
Bzip2Compressor
- 这将使用bzip2
压缩您的数据库转储。使用此命令之前,请确保您的系统上已安装bzip2
。
$dumpCommand = MySql::create() ->setDbName('数据库名称') ->setUserName('用户名') ->setPassword('密码') ->useCompressor(new GzipCompressor()) // 或 `new Bzip2Compressor()`->dumpToFile('dump.sql.gz');
您可以创建自己的压缩器来实现Compressor
接口。该界面如下所示:
命名空间 SpatieDbDumperCompressors;接口 压缩机 {公共函数 useCommand(): 字符串;公共函数 useExtension(): 字符串; }
useCommand
应该简单地返回数据库转储将被泵送到的压缩命令。这是GzipCompression
的实现。
命名空间 SpatieDbDumperCompressors;类 GzipCompressor 实现 Compressor {公共函数 useCommand(): string{return 'gzip'; }公共函数 useExtension(): string{return 'gz'; } }
$ 作曲家测试
请参阅变更日志以了解有关最近更改内容的更多信息。
详细信息请参阅贡献。
请查看我们的安全政策,了解如何报告安全漏洞。
弗里克·范德赫滕
所有贡献者
最初的 PostgreSQL 支持是由 Adriano Machado 贡献的。 SQlite 支持由 Peter Matseykanets 贡献。
麻省理工学院许可证 (MIT)。请参阅许可证文件以获取更多信息。