如何在 Laravel 中从备份恢复 Mysql 数据库?

发布于 2025-01-16 16:12:14 字数 2283 浏览 2 评论 0原文

我正在尝试向基于 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我的黑色迷你裙 2025-01-23 16:12:14

我使用了 https://github.com/ifsnop/mysqldump-php Mysqldump 类具有一个恢复方法,该方法不会尝试执行命令行 mysql,而许多其他解决方案都会这样做。

$file 是数据库的完整转储:

$mysqldump = new Mysqldump('mysql:host=...', $username, $password);
Artisan::call('db:wipe',['--database' => $connection, '--drop-views' => true]);
$mysqldump->restore($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:

$mysqldump = new Mysqldump('mysql:host=...', $username, $password);
Artisan::call('db:wipe',['--database' => $connection, '--drop-views' => true]);
$mysqldump->restore($file);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文