国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 php框架 ThinkPHP 如何使用ThinkPHP6實現(xiàn)數(shù)據(jù)庫備份與恢復

如何使用ThinkPHP6實現(xiàn)數(shù)據(jù)庫備份與恢復

Jun 20, 2023 pm 07:25 PM
thinkphp 恢復 數(shù)據(jù)庫備份

在開發(fā)業(yè)務系統(tǒng)過程中,數(shù)據(jù)庫是非常重要的一環(huán)。因此,對數(shù)據(jù)庫進行備份和恢復是非常必要的操作。本文將結合ThinkPHP6框架實例,介紹如何使用ThinkPHP6實現(xiàn)數(shù)據(jù)庫備份與恢復。

一、數(shù)據(jù)庫備份

1.1 環(huán)境準備

在進行數(shù)據(jù)庫備份之前,需要確認如下幾點:

1、需要設置好mysql數(shù)據(jù)庫的bin目錄地址,并把其路徑加入系統(tǒng)Path變量中;

2、需要安裝好mysqldump命令行工具;

3、確認在數(shù)據(jù)庫所在的機器上,執(zhí)行備份的用戶,有對數(shù)據(jù)庫執(zhí)行mysqldump命令的權限。

1.2 數(shù)據(jù)庫備份實現(xiàn)

1.2.1 配置備份參數(shù)

在config文件夾下創(chuàng)建database.php文件,設置數(shù)據(jù)庫連接信息和備份所需參數(shù)。

<?php
return [
    // 數(shù)據(jù)庫類型
    'type'        => 'mysql',
    // 數(shù)據(jù)庫連接DSN配置
    'dsn'         => '',
    // 服務器地址
    'hostname'    => 'localhost',
    // 數(shù)據(jù)庫名
    'database'    => 'test',
    // 數(shù)據(jù)庫用戶名
    'username'    => 'root',
    // 數(shù)據(jù)庫密碼
    'password'    => 'root',
    // 數(shù)據(jù)庫連接端口
    'hostport'    => '3306',
    // 數(shù)據(jù)庫連接參數(shù)
    'params'      => [],
    // 數(shù)據(jù)庫編碼默認采用utf8
    'charset'     => 'utf8',
    // 數(shù)據(jù)庫表前綴
    'prefix'      => 'think_',
    // 數(shù)據(jù)庫調試模式
    'debug'       => false,
    // 數(shù)據(jù)庫備份路徑,沒有則自動創(chuàng)建
    'path'        => '',
    // 數(shù)據(jù)庫備份卷大小,單位為字節(jié),設為0表示不限制備份大小
    'part'        => 20971520,
    // 數(shù)據(jù)庫備份文件壓縮格式,這里是gzip
    'compress'    => 'gzip',
    // 數(shù)據(jù)庫備份文件名
    'filename'    => '',
    // 數(shù)據(jù)庫備份文件是否需要壓縮
    'zip'         => true,
    // 數(shù)據(jù)庫備份文件是否需要分卷備份
    'split'       => true,
    // 數(shù)據(jù)庫備份時是否將存儲過程和觸發(fā)器一起備份
    'level'       => 9,
    // 數(shù)據(jù)庫備份文件的存儲路徑,最好為絕對路徑,這也是最關鍵的路徑
    'path'        => '/data/mysql/',
];

1.2.2 編寫備份代碼

在app/controller下創(chuàng)建BackupController.php文件,并添加以下代碼。

<?php
declare(strict_types=1);

namespace appcontroller;

use thinkacadeDb;

class BackupController
{
    protected $backupConfig;

    public function __construct()
    {
        $this->backupConfig = config('database');
    }

    public function backup()
    {
        // 防止備份數(shù)據(jù)過程超時
        set_time_limit(0);

        $database = $this->backupConfig['database'];
        $filename = date('Ymd-His', time()) . ".sql";
        $path = $this->backupConfig['path'].$filename;

        // 檢查目錄是否存在或者是否有權限寫入
        if(!is_dir($this->backupConfig['path'])){
            mkdir($this->backupConfig['path'], 0755, true);
        }else{
            if(!is_writeable($this->backupConfig['path'])){
                chmod($this->backupConfig['path'], 0755);
            }
        }

        // 備份所有數(shù)據(jù)表
        $result = Db::query("SHOW TABLES");

        $tables = array();
        foreach($result as $index => $row){
            $tables[] = $row['Tables_in_'.$database];
        }

        // 備份所有表結構和表數(shù)據(jù)
        $content = '';
        foreach($tables as $table){
            $content = $content . "/*" . PHP_EOL;
            $content = $content . "表名:" . $table . PHP_EOL;
            $content = $content . "表結構:" . PHP_EOL;
            $content = $content . "*/" . PHP_EOL;
            $content = $content . $this->backupTableSchema($table);
            $content = $content . "/*" . PHP_EOL;
            $content = $content . "表數(shù)據(jù):" . PHP_EOL;
            $content = $content . "*/" . PHP_EOL;
            $content = $content . $this->buildInsertSql($table);
        }

        // 是否需要壓縮
        if ($this->backupConfig['zip']) {
            $zip = new ZipArchive();
            $zipfilename = $this->backupConfig['path'] . date('Ymd-His', time()) . ".zip";
            if ($zip->open($zipfilename, ZipArchive::OVERWRITE) === TRUE) {
                $zip->addFile($path,$filename);
                $zip->close();
                // 刪除非壓縮的文件
                unlink($path);
            } else {
                // 備份失敗
            }
        }
    }

    // 備份表結構
    protected function backupTableSchema($table)
    {
        $database = $this->backupConfig['database'];
        $result = Db::query("SHOW CREATE TABLE `" . $table . "`");
        $create = $result[0]['Create Table'] . ";" . PHP_EOL.PHP_EOL;
        return $create;
    }

    // 備份表數(shù)據(jù)
    protected function buildInsertSql($table)
    {
        $database = $this->backupConfig['database'];
        $result = Db::query("SELECT * FROM `" . $table . "`");
        $insert = '';
        foreach ($result as $key => $value) {
            $keys = array_keys($value);
            $values = array_map(array(Db::class, 'quote'), array_values($value));
            $values = join(",", $values);
            $insert .= "INSERT INTO `" . $table . "` (`" . join("`,`", $keys) . "`) VALUES (" . $values . ");" . PHP_EOL;
        }
        $insert .= PHP_EOL;
        return $insert;
    }
}

1.2.3 執(zhí)行備份

在瀏覽器中輸入以下url地址即可執(zhí)行備份:

http://localhost/backup/backup

1.3 數(shù)據(jù)庫恢復

1.3.1 編寫恢復代碼

在app/controller下創(chuàng)建RecoveryController.php文件,并添加以下代碼。

<?php
declare(strict_types=1);

namespace appcontroller;

use thinkacadeDb;

class RecoveryController
{
    protected $backupConfig;

    public function __construct()
    {
        $this->backupConfig = config('database');
    }

    public function recovery()
    {
        // 防止還原數(shù)據(jù)過程超時
        set_time_limit(0);
        ini_set('memory_limit', '1024M');

        $filename = input('get.filename');

        // 讀取備份文件
        if ($this->backupConfig['zip']) {
            $zip = new ZipArchive();
            if ($zip->open($this->backupConfig['path'].$filename) === true) {
                $filename = $zip->getNameIndex(0);
                $zip->extractTo($this->backupConfig['path']);
                $zip->close();
            }
        }

        $content = file_get_contents($this->backupConfig['path'] . $filename);

        // 使用";"分割內容
        $statements = explode(";", $content);

        // 開始事務
        Db::startTrans();

        foreach ($statements as $index => $stmt) {
            if (trim($stmt) === '') {
                continue;
            }
            $results = Db::query($stmt);
            if ($results === false) {
                Db::rollback();
                return false;
            }
        }

        // 提交事務
        Db::commit();

        // 刪除非壓縮的文件
        unlink($this->backupConfig['path'] . $filename);

        return true;
    }
}

1.3.2 執(zhí)行恢復

在瀏覽器中輸入以下url地址即可執(zhí)行恢復:

http://localhost/recovery/recovery?filename=20200101-121212.sql.zip

以上為ThinkPHP6實現(xiàn)數(shù)據(jù)庫備份與恢復的實現(xiàn)方法,讀者可以將代碼應用到自己的項目中,靈活運用其中的技巧,讓我們的業(yè)務更加健壯可靠。

以上是如何使用ThinkPHP6實現(xiàn)數(shù)據(jù)庫備份與恢復的詳細內容。更多信息請關注PHP中文網(wǎng)其他相關文章!

本站聲明
本文內容由網(wǎng)友自發(fā)貢獻,版權歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權的內容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅動的應用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1601
29
PHP教程
1502
276
微信文件過期怎么恢復 微信的過期文件能恢復嗎 微信文件過期怎么恢復 微信的過期文件能恢復嗎 Feb 22, 2024 pm 02:46 PM

打開微信,在我中選擇設置,選擇通用后選擇存儲空間,在存儲空間選擇管理,選擇要恢復文件的對話選擇感嘆號圖標。教程適用型號:iPhone13系統(tǒng):iOS15.3版本:微信8.0.24解析1首先打開微信,在我的頁面中點擊設置選項。2接著在設置頁面中找到并點擊通用選項。3然后在通用頁面中點擊存儲空間。4接下來在存儲空間頁面中點擊管理。5最后選擇要恢復文件的對話,點擊右側的感嘆號圖標。補充:微信文件一般幾天過期1要是微信接收的文件并沒有點開過的情況下,那在七十二鐘頭之后微信系統(tǒng)會清除掉,要是己經(jīng)查看了微信

如何恢復無痕模式下的瀏覽記錄 如何恢復無痕模式下的瀏覽記錄 Feb 19, 2024 pm 04:22 PM

無痕瀏覽是一種非常方便的瀏覽方式,可以在使用電腦或移動設備上網(wǎng)時保護個人隱私。無痕瀏覽模式通常會阻止瀏覽器記錄訪問歷史、保存Cookie和緩存文件,以及防止正在瀏覽的網(wǎng)站在瀏覽器中留下任何痕跡。但是,對于一些特殊的情況,我們可能需要恢復無痕瀏覽的瀏覽記錄。首先,我們需要明確一點:無痕瀏覽模式的目的是保護隱私,防止他人從瀏覽器中獲取用戶的上網(wǎng)記錄。因此,無痕瀏

thinkphp項目怎么運行 thinkphp項目怎么運行 Apr 09, 2024 pm 05:33 PM

運行 ThinkPHP 項目需要:安裝 Composer;使用 Composer 創(chuàng)建項目;進入項目目錄,執(zhí)行 php bin/console serve;訪問 http://localhost:8000 查看歡迎頁面。

抖音怎么恢復聊天火花 抖音怎么恢復聊天火花 Mar 16, 2024 pm 01:25 PM

在抖音這個充滿創(chuàng)意與活力的短視頻平臺上,我們不僅可以欣賞到各種精彩內容,還能與志同道合的朋友展開深入的交流。其中,聊天火花作為衡量雙方互動熱度的重要指標,常常在不經(jīng)意間點燃我們與好友之間的情感紐帶。然而,有時由于一些原因,聊天火花可能會斷開,那么如果我們想要恢復聊天火花究竟該如何操作呢,這篇教程攻略就將為大家?guī)碓敿毜膬热莨ヂ越榻B,希望能幫助到大家。抖音聊天火花斷了怎么恢復?1、打開抖音的消息頁面,選擇好友聊天。2、互發(fā)消息聊天。3、連續(xù)發(fā)消息3天,就可以獲得火花標識。在3天基礎上,互發(fā)圖片或視

thinkphp有幾個版本 thinkphp有幾個版本 Apr 09, 2024 pm 06:09 PM

ThinkPHP 擁有多個版本,針對不同 PHP 版本而設計。主要版本包括 3.2、5.0、5.1 和 6.0,而次要版本用于修復 bug 和提供新功能。當前最新穩(wěn)定版本為 ThinkPHP 6.0.16。在選擇版本時,需考慮 PHP 版本、功能需求和社區(qū)支持。建議使用最新穩(wěn)定版本以獲得最佳性能和支持。

小米云相冊怎么恢復到本地 小米云相冊怎么恢復到本地 Feb 24, 2024 pm 03:28 PM

小米云相冊怎么恢復到本地?小米云相冊APP中是可以恢復到本地,但是多數(shù)的小伙伴不知道小米云相冊如何恢復到本地中,接下來就是小編為用戶帶來的小米云相冊恢復到本地方法圖文教程,感興趣的用戶快來一起看看吧!小米云相冊怎么恢復到本地1、首先打開小米手機中的設置功能,主界面選擇【個人頭像】;2、然后進入到小米賬號的界面,點擊【云服務】功能;3、接著跳轉到小米云服務的功能,選擇其中的【云備份】;4、最后在如下圖所示的界面,點擊【云相冊】即可恢復相冊到本地。

thinkphp怎么運行 thinkphp怎么運行 Apr 09, 2024 pm 05:39 PM

ThinkPHP Framework 的本地運行步驟:下載并解壓 ThinkPHP Framework 到本地目錄。創(chuàng)建虛擬主機(可選),指向 ThinkPHP 根目錄。配置數(shù)據(jù)庫連接參數(shù)。啟動 Web 服務器。初始化 ThinkPHP 應用程序。訪問 ThinkPHP 應用程序 URL 運行。

win10怎么恢復默認壁紙 win10怎么恢復默認壁紙 Feb 10, 2024 pm 10:51 PM

Windows10的2019年5月更新具有新的、更亮的默認桌面背景。它看起來很棒-帶有新的淺色主題。如果您使用Windows10的深色主題,您可能需要更深的背景。奇怪的是,Windows10的原始桌面背景已從最新版本的Windows10中刪除。您必須從Web下載它或從舊的Windows10PC復制其文件。盡管我們無法在Microsoft的官方網(wǎng)站上找到此壁紙圖片,但您可以從其他來源下載它。我們在Imgur上找到了一份4K分辨率的Windows10原始桌面壁紙的副本。此外,還有其他尺寸和更多默認壁

See all articles