Maison >cadre php >Laravel >Comment utiliser Larave pour créer une tâche de planification de sauvegarde de base de données MySQL

Comment utiliser Larave pour créer une tâche de planification de sauvegarde de base de données MySQL

不言
不言original
2018-08-14 10:23:062854parcourir
Le contenu de cet article explique comment utiliser Larave pour développer une tâche de plan de sauvegarde de base de données MySQL. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Vous pouvez exporter l'intégralité de la base de données en exécutant une commande sur une seule ligne dans le terminal. Cette solution est non seulement simple et directe mais aussi efficace. Mais il existe des solutions plus automatisées. Découvrons ce que c'est !

Comment utiliser Larave pour créer une tâche de planification de sauvegarde de base de données MySQL

Contexte

Il y a quelques jours, je me suis connecté à la mauvaise base de données et j'ai tué 18 000 Données en ligne enregistrement. Le pire, c'est que nous n'avons pas de sauvegarde de cette base de données. J'ai alors décidé d'écrire un script qui automatiserait l'exportation de la base de données et l'enregistrerait dans un fichier SQL.

De plus, si vous avez besoin d'un système de sauvegarde de données puissant, vous pouvez consulter cette extension. De cette façon, nous n'avons pas besoin de prêter attention à davantage de détails sur la sauvegarde de la base de données et devons uniquement nous concentrer sur l'exportation et le plan d'exportation de la base de données.

Commande d'exportation

À l'aide de cet extrait d'une ligne, vous pouvez rapidement exporter la base de données vers un fichier SQL. De nombreuses applications utilisent la commande suivante pour exporter les données de la base de données.

mysqldump -u[user] -p[pass] [db] > [file_path]

Comme vous pouvez le voir, nous devons transmettre le nom d'utilisateur, le mot de passe et la base de données qui doivent être exportés, puis rediriger la sortie vers le fichier spécifié. Il est simple et pratique à consommer et a des effets remarquables.

Encapsulons maintenant cette commande à l'aide de la commande artisan pour faciliter son exécution et son ajout aux tâches planifiées.

Échauffement de l'interface de la console Artiasn

Un point de départ important pour l'intégration des commandes shell à l'aide de la console artisanale (console) est de pouvoir écrire une fois et s'exécuter partout. Ce que nous devons faire, c'est configurer et utiliser ces configurations. Cela signifie qu'une fois qu'un paramètre est modifié, nous n'avons pas besoin de l'ajuster via la commande elle-même. Ensuite, nous pouvons créer cette commande de console.

Créez une commande personnalisée en exécutant la commande php artisan make:comman. Ici, notre commande est nommée BackupDatabase. Après avoir créé votre commande, Laravel enregistrera automatiquement la commande auprès du système. Il ne vous reste plus qu'à définir la signature de la commande.

Prenons un aperçu de ce fichier de commande ; nous expliquerons comment il fonctionne plus tard :

<?php namespace App\Console\Commands;

use Illuminate\Console\Command;
use Symfony\Component\Process\Process;
use Symfony\Component\Process\Exception\ProcessFailedException;

class BackupDatabase extends Command
{
    protected $signature = &#39;db:backup&#39;;

    protected $description = &#39;Backup the database&#39;;

    protected $process;

    public function __construct()
    {
        parent::__construct();

        $this->process = new Process(sprintf(
            'mysqldump -u%s -p%s %s > %s',
            config('database.connections.mysql.username'),
            config('database.connections.mysql.password'),
            config('database.connections.mysql.database'),
            storage_path('backups/backup.sql')
        ));
    }

    public function handle()
    {
        try {
            $this->process->mustRun();

            $this->info('The backup has been proceed successfully.');
        } catch (ProcessFailedException $exception) {
            $this->error('The backup process has been failed.');
        }
    }
}

Comme vous pouvez le voir, notre signature de commande est db:backup. Puisque Laravel dispose déjà d’un espace de commande db, cette commande est plus claire.

Dans le constructeur, nous instancions une nouvelle instance de SymfonyComponentProcessProcess. La raison est qu'ici nous devons utiliser le composant Process de Symfony - plutôt que de simplement appeler la fonction shell_exec. Ce composant offre de nombreuses fonctionnalités intéressantes. Par exemple, si un processus échoue, nous pouvons lever une exception, puis la gérer efficacement.

Si vous utilisez la méthode de traitement run(), vous devez détecter manuellement les erreurs en cours d'exécution et lever des exceptions. Et grâce à la méthode mustRun(), elle lèvera automatiquement une exception pour nous. Vous pouvez obtenir plus d'informations dans la documentation.

Nous transmettons la commande shell et les paramètres requis dans la fonction sprintf(), qui remplace les espaces réservés par les paramètres réels. Après avoir traité l'instance de processus, nous pouvons passer à l'étape suivante de la méthode handle)(.

Dans la méthode handle, nous avons un code try-catch Tout d'abord, nous appelons la méthode mustRun() S'il n'y a pas d'erreur, nous envoyons un message vert à la console ; sinon, une exception ProcessFailedException est levée et capturée dans le fichier. attraper le bloc de code et afficher les informations d'erreur sur la console

Et ensuite ? Si nous exécutons la commande php artisan db:backup, nous irons dans la base de données ici et l'enregistrerons dans . Le fichier 🎜>storage/backups/backup.sql fonctionne bien, cependant, nous avons encore du travail à faire, qui consiste à écrire des tâches planifiées pour les tâches de sauvegarde >Tout d'abord, vous pouvez facilement créer des tâches planifiées dans Laravel. . Il fournit une interface API intégrée pour définir des tâches simples et prenant en charge les opérations en chaîne. Avant de continuer à lire cet article, il est fortement recommandé de lire la traduction chinoise de sa documentation > Ensuite, accédez à la

Console. /Kernel.php

et regardez la fonction

schedule()

Nous pouvons définir la tâche et le cycle d'exécution de la tâche

tous les lundis à 23h00

Exécuter le plan. est codé comme suit : N'est-ce pas simple ? Ce qui est encore mieux, c'est que vous pouvez définir ici autant de commandes que vous le souhaitez. Traitez ces tâches séparément à l'heure spécifiée Pour exécuter ce planificateur, nous devons exécuter la commande php artisan planning:run et elle déclenchera toutes les commandes qui doivent être exécutées. C'est génial, nous pouvons déclencher n'importe quelle commande correspondante à un moment spécifié. time avec une seule ligne de commande

protected function schedule(Schedule $schedule)
{
    $schedule->command('db:backup')->mondays()->at('23:00');
}
Mais le problème actuel est de savoir comment gérer le planificateur lui-même. C'est un peu comme un problème de poule et d'œuf, mais je n'y crois pas si compliqué.

Utilisez Forge pour configurer le planificateur

Si vous avez toujours besoin d'une assistance de base liée aux principes d'exécution de CORN, Mohamed Said propose une série d'articles qui expliquent en profondeur les connaissances liées à CRON. Le point clé est que nous n'avons pas besoin de créer un minuteur CRON pour chaque tâche planifiée. Il nous suffit de définir la chance d'exécution de la tâche comme introduit précédemment, puis d'exécuter l'appelant de la tâche.

Cependant, nous devons définir l'heure d'exécution de la commande php artisan planning:run. Si vous utilisez Laravel Forge, vous pouvez facilement créer des tâches planifiées. Accédez simplement à l'onglet Planificateur et vous pourrez créer la tâche planifiée de votre choix.

Comment utiliser Larave pour créer une tâche de planification de sauvegarde de base de données MySQL

Comme vous pouvez le voir, la commande schedule:run a été ajoutée par défaut. définissez la fréquence des tâches (fréquence) et remplacez la commande par défaut par la commande de votre serveur.

S'il est prêt, le planificateur s'exécutera à chaque fois au moment approprié et déclenchera l'exécution de toutes les commandes.

Résumé

C'est formidable que nous puissions fournir une solution légère sans compter sur un package plus volumineux. Ici, nous pouvons également profiter de Laravel pour répondre à nos besoins.

Nous pouvons facilement exporter la base de données à l'aide du composant Process et l'encapsuler dans la commande artisan. Nous pouvons alors rapidement mettre en place un cycle d'exécution de notre commande et le planificateur de Laravel se chargera du reste. Nous pourrions simplement nous allonger et faire le travail.

Recommandations associées :

Le processus de conception du système de gestion de configuration sous le framework Laravel (avec code)

Comment créer et utiliser le laravel modèle de modèle de cadre

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:
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