Maison cadre php PensezPHP Comment utiliser ThinkPHP6 pour implémenter la sauvegarde et la récupération de bases de données

Comment utiliser ThinkPHP6 pour implémenter la sauvegarde et la récupération de bases de données

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

Dans le processus de développement de systèmes d'entreprise, la base de données est un élément très important. Par conséquent, la sauvegarde et la restauration de la base de données sont une opération très nécessaire. Cet article combinera des exemples du framework ThinkPHP6 pour présenter comment utiliser ThinkPHP6 pour implémenter la sauvegarde et la récupération de bases de données.

1. Sauvegarde de la base de données

1.1 Préparation de l'environnement

Avant d'effectuer la sauvegarde de la base de données, vous devez confirmer les points suivants :

1 Vous devez définir l'adresse du répertoire bin de la base de données mysql et ajouter son chemin au chemin système. variable ;

2. L'outil de ligne de commande mysqldump doit être installé

3. Confirmez que sur la machine où se trouve la base de données, l'utilisateur qui effectue la sauvegarde a le droit d'exécuter la commande mysqldump sur la base de données.

1.2 Implémentation de la sauvegarde de la base de données

1.2.1 Configurer les paramètres de sauvegarde

Créez le fichier database.php dans le dossier de configuration, définissez les informations de connexion à la base de données et les paramètres requis pour la sauvegarde.

<?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/',
];
Copier après la connexion

1.2.2 Écrire le code de sauvegarde

Créez le fichier BackupController.php sous app/controller et ajoutez le code suivant.

<?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;
    }
}
Copier après la connexion

1.2.3 Effectuer une sauvegarde

Entrez l'adresse URL suivante dans le navigateur pour effectuer la sauvegarde :

http://localhost/backup/backup
Copier après la connexion

1.3 Récupération de la base de données

1.3.1 Écrire le code de récupération

Créez le fichier RecoveryController.php sous app/controller, et ajoutez le code suivant.

<?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;
    }
}
Copier après la connexion

1.3.2 Effectuer une récupération

Entrez l'adresse URL suivante dans le navigateur pour effectuer la récupération :

http://localhost/recovery/recovery?filename=20200101-121212.sql.zip
Copier après la connexion

Ce qui précède est la méthode d'implémentation de sauvegarde et de récupération de base de données dans ThinkPHP6. Les lecteurs peuvent appliquer le code à leurs propres projets, qui. est flexible Utilisez ces conseils pour rendre votre entreprise plus robuste et plus fiable.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment récupérer des fichiers WeChat expirés ? Les fichiers WeChat expirés peuvent-ils être récupérés ? Comment récupérer des fichiers WeChat expirés ? Les fichiers WeChat expirés peuvent-ils être récupérés ? Feb 22, 2024 pm 02:46 PM

Ouvrez WeChat, sélectionnez Paramètres dans Moi, sélectionnez Général, puis sélectionnez Espace de stockage, sélectionnez Gestion dans Espace de stockage, sélectionnez la conversation dans laquelle vous souhaitez restaurer les fichiers et sélectionnez l'icône de point d'exclamation. Didacticiel Modèle applicable : iPhone13 Système : iOS15.3 Version : WeChat 8.0.24 Analyse 1 Ouvrez d'abord WeChat et cliquez sur l'option Paramètres sur la page Ma. 2 Ensuite, recherchez et cliquez sur Options générales sur la page des paramètres. 3Cliquez ensuite sur Espace de stockage sur la page générale. 4 Ensuite, cliquez sur Gérer sur la page de l'espace de stockage. 5Enfin, sélectionnez la conversation dans laquelle vous souhaitez récupérer des fichiers et cliquez sur l'icône de point d'exclamation à droite. Supplément : les fichiers WeChat expirent généralement au bout de quelques jours. Si le fichier reçu par WeChat n'a pas été cliqué, le système WeChat l'effacera après 72 heures. Si le fichier WeChat a été consulté,

Comment récupérer l'historique de navigation en mode navigation privée Comment récupérer l'historique de navigation en mode navigation privée Feb 19, 2024 pm 04:22 PM

La navigation privée est un moyen très pratique de naviguer et de protéger votre vie privée lorsque vous surfez sur Internet sur votre ordinateur ou appareil mobile. Le mode de navigation privée empêche généralement le navigateur d'enregistrer votre historique de visites, de sauvegarder les cookies et les fichiers cache et d'empêcher le site Web que vous parcourez de laisser des traces dans le navigateur. Cependant, dans certains cas particuliers, nous pouvons être amenés à restaurer l'historique de navigation de la navigation incognito. Tout d’abord, il faut être clair : le but du mode de navigation privée est de protéger la vie privée et d’empêcher des tiers d’obtenir l’historique en ligne de l’utilisateur à partir du navigateur. Par conséquent, la navigation incognito

Comment restaurer l'étincelle de discussion sur TikTok Comment restaurer l'étincelle de discussion sur TikTok Mar 16, 2024 pm 01:25 PM

Sur Douyin, une courte plateforme vidéo pleine de créativité et de vitalité, nous pouvons non seulement profiter d'une variété de contenus passionnants, mais également avoir des communications approfondies avec des amis partageant les mêmes idées. Parmi eux, les étincelles de discussion sont un indicateur important de l’intensité de l’interaction entre les deux parties, et elles enflamment souvent par inadvertance les liens émotionnels entre nous et nos amis. Cependant, parfois pour certaines raisons, le chat spark peut être déconnecté. Alors, que devons-nous faire si nous voulons restaurer le chat spark ? Ce guide didacticiel vous apportera une introduction détaillée à la stratégie de contenu, dans l'espoir d'aider tout le monde. Comment restaurer l'étincelle du chat Douyin ? 1. Ouvrez la page de message Douyin et sélectionnez un ami avec qui discuter. 2. Envoyez des messages et discutez entre vous. 3. Si vous envoyez des messages en continu pendant 3 jours, vous pouvez obtenir le logo Spark. Tous les 3 jours, envoyez-vous des photos ou des vidéos

Comment restaurer l'album photo Xiaomi Cloud en local Comment restaurer l'album photo Xiaomi Cloud en local Feb 24, 2024 pm 03:28 PM

Comment restaurer l'album photo Xiaomi Cloud en local ? L'application Xiaomi Cloud Photo Album peut restaurer en local, mais la plupart des amis ne savent pas comment restaurer l'album photo Xiaomi Cloud en local. L'étape suivante consiste à restaurer l'album photo Xiaomi Cloud en local. Tutoriels graphiques de méthode locale, les utilisateurs intéressés viennent y jeter un oeil ! Comment restaurer l'album photo cloud Xiaomi en local 1. Ouvrez d'abord la fonction de paramètres dans le téléphone Xiaomi et sélectionnez [Avatar personnel] sur l'interface principale ; 2. Entrez ensuite dans l'interface du compte Xiaomi et cliquez sur la fonction [Service Cloud] ; passez à Xiaomi Pour la fonction de service cloud, sélectionnez [Cloud Backup] ; 4. Enfin, dans l'interface comme indiqué ci-dessous, cliquez sur [Cloud Album] pour restaurer l'album en local.

Comment exécuter le projet thinkphp Comment exécuter le projet thinkphp Apr 09, 2024 pm 05:33 PM

Pour exécuter le projet ThinkPHP, vous devez : installer Composer ; utiliser Composer pour créer le projet ; entrer dans le répertoire du projet et exécuter php bin/console serve ; visiter http://localhost:8000 pour afficher la page d'accueil.

Comment restaurer le fond d'écran par défaut dans Win10 Comment restaurer le fond d'écran par défaut dans Win10 Feb 10, 2024 pm 10:51 PM

La mise à jour de mai 2019 de Windows 10 propose un nouvel arrière-plan de bureau par défaut plus lumineux. Cela a fière allure - avec le nouveau thème de lumière. Si vous utilisez le thème sombre de Windows 10, vous souhaiterez peut-être un arrière-plan plus sombre. Étrangement, l'arrière-plan du bureau d'origine de Windows 10 a été supprimé de la dernière version de Windows 10. Vous devez le télécharger depuis le Web ou copier ses fichiers depuis un ancien PC Windows 10. Bien que nous n'ayons pas pu trouver cette image de fond d'écran sur le site officiel de Microsoft, vous pouvez la télécharger à partir d'autres sources. Nous avons trouvé une copie du fond d’écran original de Windows 10 en résolution 4K sur Imgur. De plus, il existe d'autres tailles et davantage de murs par défaut

Il existe plusieurs versions de thinkphp Il existe plusieurs versions de thinkphp Apr 09, 2024 pm 06:09 PM

ThinkPHP dispose de plusieurs versions conçues pour différentes versions de PHP. Les versions majeures incluent 3.2, 5.0, 5.1 et 6.0, tandis que les versions mineures sont utilisées pour corriger les bogues et fournir de nouvelles fonctionnalités. La dernière version stable est ThinkPHP 6.0.16. Lorsque vous choisissez une version, tenez compte de la version PHP, des exigences en matière de fonctionnalités et du support de la communauté. Il est recommandé d'utiliser la dernière version stable pour de meilleures performances et une meilleure assistance.

Comment exécuter thinkphp Comment exécuter thinkphp Apr 09, 2024 pm 05:39 PM

Étapes pour exécuter ThinkPHP Framework localement : Téléchargez et décompressez ThinkPHP Framework dans un répertoire local. Créez un hôte virtuel (facultatif) pointant vers le répertoire racine ThinkPHP. Configurez les paramètres de connexion à la base de données. Démarrez le serveur Web. Initialisez l'application ThinkPHP. Accédez à l'URL de l'application ThinkPHP et exécutez-la.

See all articles