ホームページ > 記事 > PHPフレームワーク > Larave を使用して MySQL データベースのバックアップ スケジュール タスクを作成する方法
ターミナルで 1 行のコマンドを実行すると、データベース全体をエクスポートできます。この解決策は単純かつ直接的であるだけでなく、効果的でもあります。しかし、さらに自動化されたソリューションもあります。それが何なのか調べてみましょう!
数日前、私は間違ったデータベースにログインし、18,000行のオンラインデータログを強制終了してしまいました。さらに悪いことに、このデータベースのバックアップがないのです。次に、データベースのエクスポートと SQL ファイルへの保存を自動化するスクリプトを作成することにしました。
また、強力なデータバックアップシステムが必要な場合は、この拡張機能をチェックしてください。このようにすると、データベースのバックアップの詳細に注意を払う必要がなく、データベースのエクスポートとエクスポート計画だけに集中する必要があります。
この 1 行のスニペットを使用すると、データベースを SQL ファイルにすばやくエクスポートできます。多くのアプリケーションは、次のコマンドを使用してデータベースからデータをエクスポートします。
mysqldump -u[user] -p[pass] [db] > [file_path]
ご覧のとおり、エクスポートする必要があるユーザー名、パスワード、DB を渡して、出力を指定されたファイルにリダイレクトする必要があります。摂取するのが簡単で便利であり、驚くべき効果があります。
ここで、artisan コマンドを使用してこのコマンドをカプセル化して、実行とスケジュールされたタスクへの追加を簡単にしましょう。
Artisan Console (コンソール) を使用してシェル コマンドを統合するための重要な出発点は、一度記述すればどこでも実行できることです。私たちが行う必要があるのは、これらの構成を構成して使用することです。これは、パラメーターが変更されると、コマンド自体を使用して調整する必要がないことを意味します。次に、このコンソール コマンドを作成します。
php Artisan make:comman コマンドを実行して、カスタム コマンドを作成します。ここでのコマンドの名前は BackupDatabase です。コマンドを作成した後、Laravel はコマンドをシステムに自動的に登録します。必要なのは、コマンドの署名を定義することだけです。
このコマンド ファイルをプレビューしてみましょう。どのように機能するかは後ほど説明します:
<?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 = 'db:backup'; protected $description = 'Backup the database'; 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.'); } } }
ご覧のとおり、コマンド シグネチャは db:backup です。 Laravel にはすでに db コマンド空間があるため、このコマンドはより明確です。
コンストラクターで、新しい SymfonyComponentProcessProcess インスタンスをインスタンス化します。その理由は、ここでは単に shell_exec 関数を呼び出すのではなく、Symfony の Process コンポーネントを使用する必要があるためです。このコンポーネントは多くの優れた機能を提供します。たとえば、プロセスが失敗した場合、例外をスローして、その例外を効率的に処理できます。
プロセスの run() メソッドを使用している場合は、実行エラーを手動で検出し、例外をスローする必要があります。そして、mustRun() メソッドを通じて、自動的に例外がスローされます。詳細については、ドキュメントを参照してください。
シェルコマンドと必要なパラメーターをsprintf()関数に渡します。これにより、プレースホルダーが実際のパラメーターに置き換えられます。プロセス インスタンスを処理した後、handle)( メソッドを使用して次のステップに進むことができます。
handle メソッドには、try-catch コード ブロックがあります。まず、mustRun() を呼び出します。メソッドでは、エラーがない場合は緑色のメッセージがコンソールに出力され、そうでない場合は ProcessFailedException 例外がスローされ、catch コード ブロックでキャプチャされ、エラー メッセージがコンソールに出力されます
次に何が起こるでしょうか? php 職人 db:backup コマンドを実行すると、データベースに移動して storage/backups/backup.sql ファイルに保存されますが、まだやるべき作業がいくつかあります。
まず、Laravel では、簡単でチェーン操作をサポートする組み込みの API インターフェイスが提供されます。この記事を読み続ける場合は、ドキュメントの中国語翻訳を強くお勧めします。
Console/Kernel.php ファイルに移動して、たとえば、schedule() 関数を確認します。実行計画は次のようにコーディングされています: protected function schedule(Schedule $schedule)
{
$schedule->command('db:backup')->mondays()->at('23:00');
}
さらに良いのは、ここで必要なだけコマンドを定義できることです。 このスケジューラーを実行するには、
コマンドを実行する必要があります。これにより、実行する必要があるすべてのコマンドがトリガーされます。これは、指定した時刻に任意のコマンドをトリガーできるという点で優れています。しかし、ここで問題となるのは、スケジューラー自体をどのように管理するかということです。これは卵が先か鶏が先かの問題に似ていますが、それほど複雑ではありません
。CORN の実行原則に関連する基本的なサポートがまだ必要な場合は、Mohamed Said が CRON 関連の知識を詳しく説明する一連の記事を用意しています。重要な点は、スケジュールされたタスクごとに CRON タイマーを作成する必要がないということです。前に紹介したようにタスク実行運を定義し、タスク呼び出し元を実行するだけです。
ただし、phpArtisanSchedule:runコマンドを実行する時間を設定する必要があります。 Laravel Forge を使用すると、スケジュールされたタスクを簡単に作成できます。 [スケジューラー] タブに移動するだけで、必要なスケジュールされたタスクを作成できます。
ご覧のとおり、
schedule:run コマンドがデフォルトで追加されています。必要なのは、タスクのサイクル (頻度) を定義し、デフォルトのコマンドをサーバーのコマンドに置き換えることだけです。 。
準備ができていれば、スケジューラーは毎回適切な時間に実行され、すべてのコマンドの実行がトリガーされます。 まとめ より大きなパッケージに依存せずに軽量なソリューションを提供できることを嬉しく思います。ここでは、ニーズを満たすために Laravel を活用することもできます。 Process コンポーネントを使用してデータベースを簡単にエクスポートし、artisan コマンドでカプセル化できます。その後、コマンドの実行サイクルをすばやく設定でき、残りは Laravel のスケジューラーが処理します。ただ横になって仕事をすることもできました。 関連する推奨事項:Laravel フレームワークでの構成管理システムの設計プロセス (コード付き)
Laravel フレームワーク モデルの作成方法と使用方法以上がLarave を使用して MySQL データベースのバックアップ スケジュール タスクを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。