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

qv7cva1a  于 2023-05-28  发布在  Mysql
关注(0)|答案(1)|浏览(222)

我正在尝试将数据库恢复功能添加到基于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();
                }
            }

我正在使用Dropbox的A flysystem driver,它使用v2 API将我的数据库备份到Dropbox。

szqfcxe2

szqfcxe21#

我使用了https://github.com/ifsnop/mysqldump-phpMysqldump类,它有一个恢复方法,不尝试和执行命令行mysql,这是许多其他解决方案所做的。
$file是DB的完全转储:

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

相关问题