如何使用ThinkPHP6實(shí)作資料庫備份與恢復(fù)
Jun 20, 2023 pm 07:25 PM在開發(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 thinkacadeDb; 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 thinkacadeDb; 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)文章!

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

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

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

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開發(fā)環(huán)境

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

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

開啟微信,在我中選擇設(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)查看了微信

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

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

在抖音這個(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è)版本,針對(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)相簿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 Framework 的本機(jī)運(yùn)作步驟:下載並解壓縮 ThinkPHP Framework 到本機(jī)目錄。建立虛擬主機(jī)(可選),指向 ThinkPHP 根目錄。配置資料庫連線參數(shù)。啟動(dòng) Web 伺服器。初始化 ThinkPHP 應(yīng)用程式。存取 ThinkPHP 應(yīng)用程式 URL 運(yùn)行。

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