亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁 php框架 ThinkPHP 如何使用ThinkPHP6實(shí)作資料庫備份與恢復(fù)

如何使用ThinkPHP6實(shí)作資料庫備份與恢復(fù)

Jun 20, 2023 pm 07:25 PM
thinkphp 恢復(fù) 資料庫備份

在開發(fā)業(yè)務(wù)系統(tǒng)流程中,資料庫是非常重要的一環(huán)。因此,對(duì)資料庫進(jìn)行備份和還原是非常必要的操作。本文將結(jié)合ThinkPHP6框架實(shí)例,介紹如何使用ThinkPHP6實(shí)作資料庫備份與復(fù)原。

一、資料庫備份

1.1 環(huán)境準(zhǔn)備

在進(jìn)行資料庫備份之前,需要確認(rèn)以下幾點(diǎn):

1、需要設(shè)定好mysql資料庫的bin目錄位址,並將其路徑加入系統(tǒng)Path變數(shù)中;

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

3、確認(rèn)在資料庫所在的機(jī)器上,執(zhí)行備份的用戶,有對(duì)資料庫執(zhí)行mysqldump指令的權(quán)限。

1.2 資料庫備份實(shí)作

1.2.1 設(shè)定備份參數(shù)

在config資料夾下建立database.php文件,設(shè)定資料庫連線資訊和備份所需參數(shù)。

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

1.2.2 編寫備份程式碼

在app/controller下建立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ù)過程超時(shí)
        set_time_limit(0);

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

        // 檢查目錄是否存在或者是否有權(quán)限寫入
        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];
        }

        // 備份所有表結(jié)構(gòu)和表數(shù)據(jù)
        $content = '';
        foreach($tables as $table){
            $content = $content . "/*" . PHP_EOL;
            $content = $content . "表名:" . $table . PHP_EOL;
            $content = $content . "表結(jié)構(gòu):" . 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 {
                // 備份失敗
            }
        }
    }

    // 備份表結(jié)構(gòu)
    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 資料庫復(fù)原

#1.3.1編寫恢復(fù)程式碼

在app/controller下建立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ù)過程超時(shí)
        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);

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

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

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

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

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

        return true;
    }
}

1.3.2 執(zhí)行復(fù)原

在瀏覽器中輸入以下url位址即可執(zhí)行復(fù)原:

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

以上為ThinkPHP6實(shí)作資料庫備份與復(fù)原的實(shí)作方法,讀者可以將程式碼應(yīng)用到自己的專案中,靈活運(yùn)用其中的技巧,讓我們的業(yè)務(wù)更加健壯可靠。

以上是如何使用ThinkPHP6實(shí)作資料庫備份與恢復(fù)的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

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

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
微信檔案過期怎麼恢復(fù) 微信的過期檔案能恢復(fù)嗎 微信檔案過期怎麼恢復(fù) 微信的過期檔案能恢復(fù)嗎 Feb 22, 2024 pm 02:46 PM

開啟微信,在我中選擇設(shè)置,選擇通用後選擇儲(chǔ)存空間,在儲(chǔ)存空間選擇管理,選擇要恢復(fù)檔案的對(duì)話選擇感嘆號(hào)圖示。教學(xué)適用型號(hào):iPhone13系統(tǒng):iOS15.3版本:微信8.0.24解析1先開啟微信,在我的頁面中點(diǎn)選設(shè)定選項(xiàng)。 2接著在設(shè)定頁面中找到並點(diǎn)選通用選項(xiàng)。 3然後在通用頁面中點(diǎn)選儲(chǔ)存空間。 4接下來在儲(chǔ)存空間頁面中點(diǎn)選管理。 5最後選擇要恢復(fù)檔案的對(duì)話,點(diǎn)選右側(cè)的感嘆號(hào)圖示。補(bǔ)充:微信文件一般幾天過期1要是微信接收的文件並沒有點(diǎn)開過的情況下,那在七十二鐘頭之後微信系統(tǒng)會(huì)清除掉,要是己經(jīng)查看了微信

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

無痕瀏覽是一種非常方便的瀏覽方式,可以在使用電腦或行動(dòng)裝置上網(wǎng)時(shí)保護(hù)個(gè)人隱私。無痕瀏覽模式通常會(huì)阻止瀏覽器記錄存取歷史記錄、保存Cookie和快取文件,以及防止正在瀏覽的網(wǎng)站在瀏覽器中留下任何痕跡。但是,對(duì)於一些特殊的情況,我們可能需要恢復(fù)無痕瀏覽的瀏覽記錄。首先,我們需要先明確一點(diǎn):無痕瀏覽模式的目的是保護(hù)隱私,防止他人從瀏覽器取得使用者的上網(wǎng)記錄。因此,無痕瀏

thinkphp專案怎麼運(yùn)行 thinkphp專案怎麼運(yùn)行 Apr 09, 2024 pm 05:33 PM

執(zhí)行 ThinkPHP 專案需要:安裝 Composer;使用 Composer 建立專案;進(jìn)入專案目錄,執(zhí)行 php bin/console serve;造訪 http://localhost:8000 查看歡迎頁面。

抖音怎麼恢復(fù)聊天火花 抖音怎麼恢復(fù)聊天火花 Mar 16, 2024 pm 01:25 PM

在抖音這個(gè)充滿創(chuàng)意與活力的短影片平臺(tái)上,我們不僅可以欣賞到各種精彩內(nèi)容,還能與志同道合的朋友展開深入的交流。其中,聊天火花作為衡量雙方互動(dòng)熱度的重要指標(biāo),常常在不經(jīng)意間點(diǎn)燃我們與好友之間的情感連結(jié)。然而,有時(shí)由於一些原因,聊天火花可能會(huì)斷開,那麼如果我們想要恢復(fù)聊天火花究竟該如何操作呢,這篇教程攻略就將為大家?guī)碓敿?xì)的內(nèi)容攻略介紹,希望能幫助到大家。抖音聊天火花斷了怎麼恢復(fù)? 1.開啟抖音的訊息頁面,選擇好友聊天。 2、互發(fā)訊息聊天。 3.連續(xù)發(fā)送訊息3天,就可以獲得火花標(biāo)識(shí)。在3天基礎(chǔ)上,互發(fā)圖片或視

thinkphp有幾個(gè)版本 thinkphp有幾個(gè)版本 Apr 09, 2024 pm 06:09 PM

ThinkPHP 擁有多個(gè)版本,針對(duì)不同 PHP 版本而設(shè)計(jì)。主要版本包括 3.2、5.0、5.1 和 6.0,而次要版本用於修復(fù) bug 和提供新功能。目前最新穩(wěn)定版本為 ThinkPHP 6.0.16。在選擇版本時(shí),需考慮 PHP 版本、功能需求和社群支援。建議使用最新穩(wěn)定版本以獲得最佳性能和支援。

小米雲(yún)相簿怎麼恢復(fù)到本地 小米雲(yún)相簿怎麼恢復(fù)到本地 Feb 24, 2024 pm 03:28 PM

小米雲(yún)相簿怎麼恢復(fù)到本地?小米雲(yún)相簿APP中是可以恢復(fù)到本地,但是多數(shù)的小伙伴不知道小米雲(yún)相冊(cè)如何恢復(fù)到本地中,接下來就是小編為用戶帶來的小米雲(yún)相冊(cè)恢復(fù)到本地方法圖文教程,有興趣的用戶快來一起看看吧!小米雲(yún)相簿怎麼恢復(fù)到本地1、先打開小米手機(jī)中的設(shè)定功能,主介面選擇【個(gè)人頭像】;2、然後進(jìn)入到小米帳號(hào)的介面,點(diǎn)選【雲(yún)端服務(wù)】功能;3、接著跳到小米雲(yún)端服務(wù)的功能,選擇其中的【雲(yún)端備份】;4、最後在如下圖所示的介面,點(diǎn)選【雲(yún)端相簿】即可恢復(fù)相簿到本地。

thinkphp怎麼運(yùn)行 thinkphp怎麼運(yùn)行 Apr 09, 2024 pm 05:39 PM

ThinkPHP Framework 的本機(jī)運(yùn)作步驟:下載並解壓縮 ThinkPHP Framework 到本機(jī)目錄。建立虛擬主機(jī)(可選),指向 ThinkPHP 根目錄。配置資料庫連線參數(shù)。啟動(dòng) Web 伺服器。初始化 ThinkPHP 應(yīng)用程式。存取 ThinkPHP 應(yīng)用程式 URL 運(yùn)行。

win10怎麼恢復(fù)預(yù)設(shè)壁紙 win10怎麼恢復(fù)預(yù)設(shè)壁紙 Feb 10, 2024 pm 10:51 PM

Windows10的2019年5月更新有新的、更亮的預(yù)設(shè)桌面背景。它看起來很棒-帶有新的淺色主題。如果您使用Windows10的深色主題,您可能需要更深的背景。奇怪的是,Windows10的原始桌面背景已從最新版本的Windows10中刪除。您必須從Web下載它或從舊的Windows10PC複製其檔案。儘管我們無法在Microsoft的官方網(wǎng)站上找到此桌布圖片,但您可以從其他來源下載它。我們?cè)贗mgur上找到了一份4K解析度的Windows10原始桌面桌布的副本。此外,還有其他尺寸和更多預(yù)設(shè)壁

See all articles