该存储库包含一个易于使用的类,用于使用 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)。请参阅许可证文件以获取更多信息。