Heim PHP-Framework Denken Sie an PHP So verwenden Sie ThinkPHP6 zum Implementieren der Datenbanksicherung und -wiederherstellung

So verwenden Sie ThinkPHP6 zum Implementieren der Datenbanksicherung und -wiederherstellung

Jun 20, 2023 pm 07:25 PM
thinkphp 恢复 数据库备份

Bei der Entwicklung von Geschäftssystemen ist die Datenbank ein sehr wichtiger Bestandteil. Daher ist das Sichern und Wiederherstellen der Datenbank ein sehr notwendiger Vorgang. In diesem Artikel werden Beispiele des ThinkPHP6-Frameworks kombiniert, um vorzustellen, wie ThinkPHP6 zum Implementieren von Datenbanksicherung und -wiederherstellung verwendet wird.

1. Datenbanksicherung

1.1 Umgebungsvorbereitung

Bevor Sie eine Datenbanksicherung durchführen, müssen Sie die folgenden Punkte bestätigen:

1. Sie müssen die Bin-Verzeichnisadresse der MySQL-Datenbank festlegen und ihren Pfad zum Systempfad hinzufügen Variable;

2. Das mysqldump-Befehlszeilentool muss installiert sein.

3 Bestätigen Sie, dass der Benutzer, der die Sicherung durchführt, die Berechtigung hat, den mysqldump-Befehl für die Datenbank auszuführen.

1.2 Implementierung der Datenbanksicherung

1.2.1 Sicherungsparameter konfigurieren

Erstellen Sie die Datei „database.php“ im Konfigurationsordner und legen Sie die für die Sicherung erforderlichen Datenbankverbindungsinformationen und Parameter fest.

<?php
return [
    // 数据库类型
    'type'        => 'mysql',
    // 数据库连接DSN配置
    'dsn'         => '',
    // 服务器地址
    'hostname'    => 'localhost',
    // 数据库名
    'database'    => 'test',
    // 数据库用户名
    'username'    => 'root',
    // 数据库密码
    'password'    => 'root',
    // 数据库连接端口
    'hostport'    => '3306',
    // 数据库连接参数
    'params'      => [],
    // 数据库编码默认采用utf8
    'charset'     => 'utf8',
    // 数据库表前缀
    'prefix'      => 'think_',
    // 数据库调试模式
    'debug'       => false,
    // 数据库备份路径,没有则自动创建
    'path'        => '',
    // 数据库备份卷大小,单位为字节,设为0表示不限制备份大小
    'part'        => 20971520,
    // 数据库备份文件压缩格式,这里是gzip
    'compress'    => 'gzip',
    // 数据库备份文件名
    'filename'    => '',
    // 数据库备份文件是否需要压缩
    'zip'         => true,
    // 数据库备份文件是否需要分卷备份
    'split'       => true,
    // 数据库备份时是否将存储过程和触发器一起备份
    'level'       => 9,
    // 数据库备份文件的存储路径,最好为绝对路径,这也是最关键的路径
    'path'        => '/data/mysql/',
];
Nach dem Login kopieren

1.2.2 Backup-Code schreiben

Erstellen Sie die Datei BackupController.php unter app/controller und fügen Sie den folgenden Code hinzu.

<?php
declare(strict_types=1);

namespace appcontroller;

use thinkacadeDb;

class BackupController
{
    protected $backupConfig;

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

    public function backup()
    {
        // 防止备份数据过程超时
        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);
            }
        }

        // 备份所有数据表
        $result = Db::query("SHOW TABLES");

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

        // 备份所有表结构和表数据
        $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 . "表数据:" . 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;
    }

    // 备份表数据
    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;
    }
}
Nach dem Login kopieren

1.2.3 Sicherung durchführen

Geben Sie die folgende URL-Adresse in den Browser ein, um die Sicherung durchzuführen:

http://localhost/backup/backup
Nach dem Login kopieren

1.3 Datenbankwiederherstellung

1.3.1 Wiederherstellungscode schreiben

Erstellen Sie die Datei RecoveryController.php unter app/controller und Fügen Sie den folgenden Code hinzu.

<?php
declare(strict_types=1);

namespace appcontroller;

use thinkacadeDb;

class RecoveryController
{
    protected $backupConfig;

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

    public function recovery()
    {
        // 防止还原数据过程超时
        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;
    }
}
Nach dem Login kopieren

1.3.2 Wiederherstellung durchführen

Geben Sie die folgende URL-Adresse in den Browser ein, um die Wiederherstellung durchzuführen:

http://localhost/recovery/recovery?filename=20200101-121212.sql.zip
Nach dem Login kopieren

Das Obige ist die Implementierungsmethode der Datenbanksicherung und -wiederherstellung in ThinkPHP6. Leser können den Code auf ihre eigenen Projekte anwenden ist flexibel Nutzen Sie diese Tipps, um Ihr Unternehmen robuster und zuverlässiger zu machen.

Das obige ist der detaillierte Inhalt vonSo verwenden Sie ThinkPHP6 zum Implementieren der Datenbanksicherung und -wiederherstellung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie kann man abgelaufene WeChat-Dateien wiederherstellen? Können abgelaufene WeChat-Dateien wiederhergestellt werden? Wie kann man abgelaufene WeChat-Dateien wiederherstellen? Können abgelaufene WeChat-Dateien wiederhergestellt werden? Feb 22, 2024 pm 02:46 PM

Öffnen Sie WeChat, wählen Sie „Einstellungen“ in „Ich“, wählen Sie „Allgemein“ und dann „Speicherplatz“, wählen Sie „Verwaltung“ unter „Speicherplatz“, wählen Sie die Konversation aus, in der Sie Dateien wiederherstellen möchten, und wählen Sie das Ausrufezeichen-Symbol aus. Tutorial Anwendbares Modell: iPhone13 System: iOS15.3 Version: WeChat 8.0.24 Analyse 1 Öffnen Sie zunächst WeChat und klicken Sie auf der Seite „Mein“ auf die Option „Einstellungen“. 2 Suchen Sie dann auf der Einstellungsseite nach „Allgemeine Optionen“ und klicken Sie darauf. 3Klicken Sie dann auf der allgemeinen Seite auf Speicherplatz. 4 Klicken Sie anschließend auf der Seite „Speicherplatz“ auf „Verwalten“. 5Wählen Sie abschließend die Konversation aus, in der Sie Dateien wiederherstellen möchten, und klicken Sie rechts auf das Ausrufezeichen-Symbol. Ergänzung: WeChat-Dateien verfallen in der Regel nach einigen Tagen. Wenn die von WeChat empfangene Datei nicht angeklickt wurde, löscht das WeChat-System sie nach 72 Stunden.

So stellen Sie den Browserverlauf im Inkognito-Modus wieder her So stellen Sie den Browserverlauf im Inkognito-Modus wieder her Feb 19, 2024 pm 04:22 PM

Privates Surfen ist eine sehr bequeme Möglichkeit, beim Surfen im Internet auf Ihrem Computer oder Mobilgerät zu surfen und Ihre Privatsphäre zu schützen. Der private Browsermodus verhindert normalerweise, dass der Browser Ihren Besuchsverlauf aufzeichnet, Cookies und Cache-Dateien speichert und verhindert, dass die von Ihnen besuchte Website Spuren im Browser hinterlässt. In einigen Sonderfällen müssen wir jedoch möglicherweise den Browserverlauf des privaten Surfens wiederherstellen. Zunächst müssen wir klarstellen: Der Zweck des privaten Browsermodus besteht darin, die Privatsphäre zu schützen und zu verhindern, dass andere den Online-Verlauf des Benutzers vom Browser abrufen. Daher Inkognito-Surfen

So stellen Sie den Chat-Funken auf TikTok wieder her So stellen Sie den Chat-Funken auf TikTok wieder her Mar 16, 2024 pm 01:25 PM

Auf Douyin, einer Kurzvideoplattform voller Kreativität und Vitalität, können wir nicht nur eine Vielzahl spannender Inhalte genießen, sondern auch intensiv mit gleichgesinnten Freunden kommunizieren. Unter anderem sind Chat-Funken ein wichtiger Indikator für die Intensität der Interaktion zwischen den beiden Parteien und entfachen oft ungewollt die emotionale Bindung zwischen uns und unseren Freunden. Aus bestimmten Gründen kann es jedoch vorkommen, dass der Chat-Funken unterbrochen wird. Was sollten wir also tun, wenn wir den Chat-Funken wiederherstellen möchten, in der Hoffnung, dass er allen hilft? Wie kann man den Funken des Douyin-Chats wiederherstellen? 1. Öffnen Sie die Douyin-Nachrichtenseite und wählen Sie einen Freund zum Chatten aus. 2. Senden Sie Nachrichten und chatten Sie miteinander. 3. Wenn Sie 3 Tage lang ununterbrochen Nachrichten senden, können Sie das Spark-Logo erhalten. Schicken Sie sich alle drei Tage gegenseitig Bilder oder Videos

So stellen Sie das Xiaomi Cloud-Fotoalbum lokal wieder her So stellen Sie das Xiaomi Cloud-Fotoalbum lokal wieder her Feb 24, 2024 pm 03:28 PM

Wie kann man Xiaomi Cloud Photo Album lokal wiederherstellen? Die meisten Freunde wissen nicht, wie man Xiaomi Cloud Photo Album lokal wiederherstellt. Lokale Methoden-Grafik-Tutorials, interessierte Benutzer kommen vorbei und schauen sich um! So stellen Sie das Xiaomi-Cloud-Fotoalbum lokal wieder her 1. Öffnen Sie zunächst die Einstellungsfunktion im Xiaomi-Telefon und wählen Sie [Persönlicher Avatar] auf der Hauptoberfläche. 2. Rufen Sie dann die Xiaomi-Kontooberfläche auf und klicken Sie auf die Funktion [Cloud-Dienst]. Springen Sie zu Xiaomi. Wählen Sie für die Funktion des Cloud-Dienstes [Cloud-Backup] aus. 4. Klicken Sie abschließend in der unten gezeigten Benutzeroberfläche auf [Cloud-Album], um das Album lokal wiederherzustellen.

So stellen Sie das Standardhintergrundbild in Win10 wieder her So stellen Sie das Standardhintergrundbild in Win10 wieder her Feb 10, 2024 pm 10:51 PM

Das Windows 10-Update vom Mai 2019 bietet einen neuen, helleren Standard-Desktop-Hintergrund. Es sieht toll aus – mit dem neuen Lichtthema. Wenn Sie das dunkle Design von Windows 10 verwenden, möchten Sie möglicherweise einen dunkleren Hintergrund. Seltsamerweise wurde der ursprüngliche Windows 10-Desktophintergrund aus der neuesten Version von Windows 10 entfernt. Sie müssen es aus dem Internet herunterladen oder seine Dateien von einem alten Windows 10-PC kopieren. Obwohl wir dieses Hintergrundbild nicht auf der offiziellen Website von Microsoft finden konnten, können Sie es von anderen Quellen herunterladen. Wir haben auf Imgur eine Kopie des Original-Desktophintergrunds von Windows 10 in 4K-Auflösung gefunden. Darüber hinaus gibt es andere Größen und mehr Standardwände

So führen Sie das Thinkphp-Projekt aus So führen Sie das Thinkphp-Projekt aus Apr 09, 2024 pm 05:33 PM

Um das ThinkPHP-Projekt auszuführen, müssen Sie: Composer installieren, das Projektverzeichnis aufrufen und http://localhost:8000 aufrufen.

Es gibt mehrere Versionen von thinkphp Es gibt mehrere Versionen von thinkphp Apr 09, 2024 pm 06:09 PM

ThinkPHP verfügt über mehrere Versionen, die für verschiedene PHP-Versionen entwickelt wurden. Zu den Hauptversionen gehören 3.2, 5.0, 5.1 und 6.0, während Nebenversionen dazu dienen, Fehler zu beheben und neue Funktionen bereitzustellen. Die neueste stabile Version ist ThinkPHP 6.0.16. Berücksichtigen Sie bei der Auswahl einer Version die PHP-Version, die Funktionsanforderungen und den Community-Support. Für optimale Leistung und Support wird empfohlen, die neueste stabile Version zu verwenden.

So führen Sie thinkphp aus So führen Sie thinkphp aus Apr 09, 2024 pm 05:39 PM

Schritte zum lokalen Ausführen von ThinkPHP Framework: Laden Sie ThinkPHP Framework herunter und entpacken Sie es in ein lokales Verzeichnis. Erstellen Sie einen virtuellen Host (optional), der auf das ThinkPHP-Stammverzeichnis verweist. Konfigurieren Sie Datenbankverbindungsparameter. Starten Sie den Webserver. Initialisieren Sie die ThinkPHP-Anwendung. Greifen Sie auf die URL der ThinkPHP-Anwendung zu und führen Sie sie aus.

See all articles