spresnac / laravel-artisan-database-helper
一些有用的助手来处理数据库备份和恢复
Requires
- php: ^7.4|^8.0|^8.1|^8.2|^8.3
- illuminate/console: ^6|^7|^8|^9|^10|^11
- illuminate/support: ^6|^7|^8|^9|^10|^11
- symfony/process: ^4.2|^5|^6|^7
README
此包将为您提供一些助手来
- 备份您的数据库
- 恢复这些备份
- 从模式中删除所有表
安装
首先,首先,因此需要这个包
composer require spresnac/laravel-artisan-database-helper
这就完成了,你现在可以出发了 😁
用法
BackupDatabase
90%的方法
要备份您的数据库,打开控制台并键入
php artisan db:backup
在大多数情况下,您已经完成。您将在以下位置找到您的备份
storage/app/backups
好的,我所说的“大多数情况”是指这个
- 您只使用一个数据库
- 您想备份一切
- 您已设置了路径,因此调用
mysqldump
将起作用
如果您具备所有这些,您就可以出发了。
剩下的10% ;)
让我们假设,您不是那90%中的一员,可能是因为
- 您使用多个数据库连接
- 您只想导出结构
- 您有一个
mysqldump
,但它不在您的路径中
我已经为您解决了这个问题(就像我也遇到过这些问题一样),因此您可以使用这些选项来配置备份的创建方式
定义要备份的连接
使用第一个参数,您可以定义正在使用的连接。您可以在您的config/database.php
中设置连接
php artisan db:backup <connection_name>
定义您的mysqldump二进制文件的路径
您需要这个选项的真实世界示例吗?好吧,简短格式:我在使用Windows ... 没有更多话要说 ;)
第二个参数可以用来定义指向您的mysqldump
二进制文件的路径
php artisan db:backup <connection_name> <path_to_binary>
提示:当您只需要设置路径,但使用默认连接时,请使用mysql
作为连接名称
php artisan db:backup mysql <path_to_binary>
仅导出结构
使用-S
选项仅导出数据库的结构
php artisan db:backup -S
无选项导出
这是一个我个人非常需要的选项。关于为什么需要这个,请查看“我如何使用它来测试我的应用程序”部分。
php artisan db:backup -O
带有日期前缀的导出
您可以将实际日期和时间作为导出文件名的前缀导出。它看起来像20190425153412_yourConnection.sql
。日期格式为YmdHis
。
php artisan db:backup -D
将所有部分粘合在一起
所有粘合在一起(导出特定数据库,使用自定义路径,仅结构,无选项)
php artisan db:backup foobardb d:/www/mysql/bin -SO
我的备份在哪里?
您将在以下位置找到您的备份
storage/app/backups/<connection>_backup.sql
如果您设置了-S
选项,它看起来像这样
storage/app/backups/<connection>_structure.sql
当与-D
一起使用时,它将看起来像这样
storage/app/backups/<Ymd_><connection>_backup.sql
DropTable
使用此命令可以快速“清空”给定数据库模式,而不删除模式本身。简而言之,给定连接中的所有表都将被删除。
php artisan db:drop-tables <connection>
如果您想以自动方式使用此功能,可以使用--force
选项删除表而不进行确认(您将被警告!)。
php artisan db:drop-tables <connection> --force
RestoreDatabase
要恢复备份,只需使用
php artisan db:restore
如果需要,您可以提供更多选项
php artisan db:restore <backup_name> <connection> <path_to_mysql> <port>
所有这些选项与在 db:backup
中描述的选项类似,因此您能够无缝地恢复已备份的数据库。
我是如何用它来测试或修复我的应用的bug
当有非常复杂的设置且bug非常复杂时,可能会发生您需要一些非常具体的数据库条目,而不希望每次都重新生成。
在这种情况下,我将这个包用作我的bug修复的辅助工具,以便更快地修复。
- 使用
db:backup
从数据库创建备份。 - 将此备份重命名为我拥有的bugticket的名称。
- 为这个bug设置我的单元测试在一个特殊的组中,该组默认不执行。
- 在我的测试脚本中,我定义了一个测试schema。
- 在运行我的测试之前,在测试schema上执行
db:drop-tables
。 - 之后,执行
db:restore <ticketnumber>
。
这样,每次我执行测试以修复bug时,我的数据库都会重置到可以复现bug的具体点,以便我可以快速修复。
最后
... 玩得开心;)并提高生产力。