如何在 Laravel 中从备份恢复 Mysql 数据库?
我正在尝试向基于 Laravel
的应用程序添加数据库恢复功能,但不知道具体从哪里开始?
到目前为止我刚刚尝试过
//restore database from backup
public function restore($file_name)
{
try {
$DB_HOST = env("DB_HOST", "");
$DB_DATABASE = env("DB_DATABASE", "");
$DB_USERNAME = env("DB_USERNAME", "");
$DB_PASSWORD = env("DB_PASSWORD", "");
$connection = mysqli_connect($DB_HOST, $DB_USERNAME, $DB_PASSWORD, $DB_DATABASE);
$file = config('backup.backup.name') . '/' . $file_name;
$disk = Storage::disk(config('backup.backup.destination.disks')[0]);
if ($disk->exists($file)) {
$fs = Storage::disk(config('backup.backup.destination.disks')[0])->getDriver();
$handle = fopen($file, "r+");
$contents = fread($handle, filesize($file));
$sql = explode(';', $contents);
$flag = 0;
foreach ($sql as $query) {
$result = mysqli_query($connection, $query);
if ($result) {
$flag = 1;
}
}
fclose($handle);
} else {
abort(404, "The backup file doesn't exist.");
}
if ($flag) {
Toastr::success('Operation successful', 'Success');
return redirect()->back();
} else {
Toastr::error('Operation Failed', 'Failed');
return redirect()->back();
}
} catch (\Exception $e) {
Toastr::error('Operation Failed', 'Failed');
return redirect()->back();
}
}
我正在使用 flysystem 驱动程序 Dropbox 使用 v2 API 将我的数据库备份到 Dropbox。
I am trying to add a database restore feature to my application based on Laravel
but don't know exactly where to start?
What I just Tried So Far
//restore database from backup
public function restore($file_name)
{
try {
$DB_HOST = env("DB_HOST", "");
$DB_DATABASE = env("DB_DATABASE", "");
$DB_USERNAME = env("DB_USERNAME", "");
$DB_PASSWORD = env("DB_PASSWORD", "");
$connection = mysqli_connect($DB_HOST, $DB_USERNAME, $DB_PASSWORD, $DB_DATABASE);
$file = config('backup.backup.name') . '/' . $file_name;
$disk = Storage::disk(config('backup.backup.destination.disks')[0]);
if ($disk->exists($file)) {
$fs = Storage::disk(config('backup.backup.destination.disks')[0])->getDriver();
$handle = fopen($file, "r+");
$contents = fread($handle, filesize($file));
$sql = explode(';', $contents);
$flag = 0;
foreach ($sql as $query) {
$result = mysqli_query($connection, $query);
if ($result) {
$flag = 1;
}
}
fclose($handle);
} else {
abort(404, "The backup file doesn't exist.");
}
if ($flag) {
Toastr::success('Operation successful', 'Success');
return redirect()->back();
} else {
Toastr::error('Operation Failed', 'Failed');
return redirect()->back();
}
} catch (\Exception $e) {
Toastr::error('Operation Failed', 'Failed');
return redirect()->back();
}
}
I am using A flysystem driver for Dropbox that uses the v2 API to backup my database to Dropbox.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我使用了 https://github.com/ifsnop/mysqldump-php
Mysqldump
类具有一个恢复方法,该方法不会尝试执行命令行 mysql,而许多其他解决方案都会这样做。$file
是数据库的完整转储:I made use of https://github.com/ifsnop/mysqldump-php
Mysqldump
class which has a restore method that does not try and execute command line mysql, which many other solutions do.With
$file
being full dump of the DB: