Heim  >  Artikel  >  PHP-Framework  >  So erstellen Sie mit Larave eine Zeitplanaufgabe für die Sicherung einer MySQL-Datenbank

So erstellen Sie mit Larave eine Zeitplanaufgabe für die Sicherung einer MySQL-Datenbank

不言
不言Original
2018-08-14 10:23:062794Durchsuche
Der Inhalt dieses Artikels befasst sich mit der Verwendung von Larave zum Entwickeln einer MySQL-Datenbank-Sicherungsplanaufgabe. Ich hoffe, dass er für Sie hilfreich ist.

Sie können die gesamte Datenbank exportieren, indem Sie einen einzeiligen Befehl im Terminal ausführen. Diese Lösung ist nicht nur einfach und direkt, sondern auch effektiv. Es gibt aber auch automatisiertere Lösungen. Finden wir heraus, was es ist!

So erstellen Sie mit Larave eine Zeitplanaufgabe für die Sicherung einer MySQL-Datenbank

Hintergrund

Vor ein paar Tagen habe ich mich in der falschen Datenbank angemeldet und 18 000 Online-Daten gelöscht Aufnahme. Was noch schlimmer ist, ist, dass wir kein Backup dieser Datenbank haben. Dann beschloss ich, ein Skript zu schreiben, das den Datenbankexport automatisiert und in einer SQL-Datei speichert.

Wenn Sie außerdem ein leistungsstarkes Datensicherungssystem benötigen, können Sie sich diese Erweiterung ansehen. Auf diese Weise müssen wir nicht auf weitere Details der Datenbanksicherung achten und uns nur auf den Datenbankexport und den Exportplan konzentrieren.

Exportbefehl

Mit diesem einzeiligen Snippet können Sie die Datenbank schnell in eine SQL-Datei exportieren. Viele Anwendungen verwenden den folgenden Befehl, um Daten aus der Datenbank zu exportieren.

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

Wie Sie sehen können, müssen wir den Benutzernamen, das Passwort und die DB übergeben, die exportiert werden müssen, und dann die Ausgabe in die angegebene Datei umleiten. Es ist einfach und bequem einzunehmen und hat bemerkenswerte Wirkungen.

Jetzt kapseln wir diesen Befehl mit dem Befehl artisan, um die Ausführung und das Hinzufügen zu geplanten Aufgaben zu vereinfachen.

Aufwärmen der Artiasn-Konsolenschnittstelle

Ein wichtiger Ausgangspunkt für die Integration von Shell-Befehlen mithilfe der Artisan-Konsole (Konsole) besteht darin, einmal schreiben und überall ausführen zu können. Was wir tun müssen, ist, diese Konfigurationen zu konfigurieren und zu verwenden. Das bedeutet, dass wir, sobald ein Parameter geändert wurde, ihn nicht über den Befehl selbst anpassen müssen. Als nächstes können wir diesen Konsolenbefehl erstellen.

Erstellen Sie einen benutzerdefinierten Befehl, indem Sie den Befehl php artisan make:comman ausführen. Hier heißt unser Befehl BackupDatabase. Nachdem Sie Ihren Befehl erstellt haben, registriert Laravel den Befehl automatisch beim System. Sie müssen lediglich die Signatur des Befehls definieren.

Sehen wir uns eine Vorschau dieser Befehlsdatei an. Wir erklären später, wie sie funktioniert:

<?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.');
        }
    }
}

Wie Sie sehen können, lautet unsere Befehlssignatur db:backup. Da Laravel bereits über einen DB-Befehlsraum verfügt, ist dieser Befehl klarer.

Im Konstruktor instanziieren wir eine neue SymfonyComponentProcessProcess-Instanz. Der Grund dafür ist, dass wir hier die Process-Komponente von Symfony verwenden müssen – anstatt einfach die Funktion shell_exec aufzurufen. Diese Komponente bietet viele tolle Funktionen. Wenn beispielsweise ein Prozess fehlschlägt, können wir eine Ausnahme auslösen und die Ausnahme dann effizient behandeln.

Wenn Sie die run()-Prozessmethode verwenden, müssen Sie Lauffehler manuell erkennen und Ausnahmen auslösen. Und über die Methode mustRun() wird automatisch eine Ausnahme für uns ausgelöst. Weitere Informationen können Sie der Dokumentation entnehmen.

Wir übergeben den Shell-Befehl und die erforderlichen Parameter an die Funktion sprintf(), die die Platzhalter durch die tatsächlichen Parameter ersetzt. Nach der Verarbeitung der Prozessinstanz können wir mit dem nächsten Schritt der handle)(-Methode fortfahren.

In der handle-Methode haben wir einen try-catch-Code Zuerst rufen wir die Methode mustRun() auf, geben wir eine grüne Meldung an die Konsole aus, andernfalls wird eine Ausnahme ProcessFailedException ausgelöst Fangen Sie den Codeblock ab und geben Sie Fehlerinformationen an die Konsole aus.

Was kommt als nächstes? Die Datei 🎜>storage/backups/backup.sql funktioniert einwandfrei, wir müssen jedoch noch einige Aufgaben erledigen, nämlich geplante Aufgaben für Sicherungsaufgaben schreiben. >Zunächst können Sie geplante Aufgaben ganz einfach in Laravel erstellen . Es bietet eine integrierte API-Schnittstelle zum Definieren von Aufgaben, die einfach ist und Kettenoperationen unterstützt. Es wird dringend empfohlen, die chinesische Übersetzung der Dokumentation zu lesen. > Gehen Sie dann zur Konsole /Kernel.php und schauen Sie sich die Funktion schedule()

an. Wir können die Aufgabe und den Aufgabenausführungszyklus jeden Montag um 23:00 Uhr definieren ist wie folgt codiert:

rrree

Ist es nicht sehr einfach? Was noch besser ist, ist, dass Sie hier so viele Befehle definieren können, wie Sie möchten. Der Zeitplaner wird separat angegeben >

Um diesen Scheduler auszuführen, müssen wir den Befehl

php artisan scheme:run

ausführen und er löst alle Befehle aus, die ausgeführt werden müssen. Das ist großartig. Nur eine Befehlszeile kann auslösen Jeder entsprechende Befehl zu einem bestimmten Zeitpunkt Aber das aktuelle Problem ist, wie man den Planer selbst verwaltet. Das ist ein bisschen wie ein Henne-Ei-Problem, aber glauben Sie mir, es ist nicht so kompliziert

Verwenden Sie Forge, um den Planer einzurichten

Wenn Sie noch grundlegende Unterstützung in Bezug auf die CORN-Ausführungsprinzipien benötigen, hat Mohamed Said eine Reihe von Artikeln, die CRON-bezogenes Wissen ausführlich erläutern. Der entscheidende Punkt ist, dass wir nicht für jede geplante Aufgabe einen CRON-Timer erstellen müssen. Wir müssen nur das zuvor beschriebene Aufgabenausführungsglück definieren und dann den Aufgabenaufrufer ausführen.

Allerdings müssen wir die Zeit festlegen, zu der der Befehl php artisan scheme:run ausgeführt werden soll. Wenn Sie Laravel Forge verwenden, können Sie ganz einfach geplante Aufgaben erstellen. Gehen Sie einfach zur Registerkarte Planer und Sie können jede gewünschte geplante Aufgabe erstellen.

So erstellen Sie mit Larave eine Zeitplanaufgabe für die Sicherung einer MySQL-Datenbank

Wie Sie sehen können, wurde der Befehl schedule:run standardmäßig hinzugefügt. Alles, was Sie tun müssen, ist: Definieren Sie die Aufgabenhäufigkeit (Häufigkeit) und ersetzen Sie den Standardbefehl durch den Befehl Ihres Servers.

Wenn der Scheduler bereit ist, wird er jedes Mal zum richtigen Zeitpunkt ausgeführt und löst die Ausführung aller Befehle aus.

Zusammenfassung

Es ist großartig, dass wir eine leichte Lösung anbieten können, ohne auf ein größeres Paket angewiesen zu sein. Auch hier können wir Laravel nutzen, um unsere Bedürfnisse zu erfüllen.

Wir können die Datenbank einfach mit der Process-Komponente exportieren und im artisan-Befehl kapseln. Wir können dann schnell einen Ausführungszyklus für unseren Befehl einrichten und der Scheduler von Laravel kümmert sich um den Rest. Wir könnten uns einfach hinlegen und die Arbeit machen.

Verwandte Empfehlungen:

Der Entwurfsprozess des Konfigurationsmanagementsystems unter dem Laravel-Framework (mit Code)

So erstellen und verwenden Sie Laravel Rahmenmodell Modell

Das obige ist der detaillierte Inhalt vonSo erstellen Sie mit Larave eine Zeitplanaufgabe für die Sicherung einer MySQL-Datenbank. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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