터미널에서 한 줄 명령을 실행하여 전체 데이터베이스를 내보낼 수 있습니다. 이 솔루션은 간단하고 직접적일 뿐만 아니라 효과적입니다. 그러나 더 자동화된 솔루션이 있습니다. 그것이 무엇인지 알아봅시다!
며칠 전 잘못된 데이터베이스에 로그인하여 온라인 데이터 로깅의 18 000줄을 죽였습니다. 더 나쁜 점은 이 데이터베이스의 백업이 없다는 것입니다. 그런 다음 데이터베이스 내보내기를 자동화하고 SQL 파일에 저장하는 스크립트를 작성하기로 결정했습니다.
또한, 강력한 데이터 백업 시스템이 필요하다면 이 확장 프로그램을 확인해 보세요. 이러한 방식으로 우리는 더 많은 데이터베이스 백업 세부 사항에 주의를 기울일 필요가 없으며 데이터베이스 내보내기 및 내보내기 계획에만 집중하면 됩니다.
이 한 줄 조각을 사용하면 데이터베이스를 SQL 파일로 빠르게 내보낼 수 있습니다. 많은 애플리케이션은 다음 명령을 사용하여 데이터베이스에서 데이터를 내보냅니다.
mysqldump -u[user] -p[pass] [db] > [file_path]
보시다시피 내보내야 하는 사용자 이름, 비밀번호 및 DB를 전달한 다음 출력을 지정된 파일로 리디렉션해야 합니다. 간편하고 간편하게 섭취할 수 있으며 놀라운 효과를 가지고 있습니다.
이제 예약된 작업을 더 쉽게 실행하고 추가할 수 있도록 artisan 명령을 사용하여 이 명령을 캡슐화해 보겠습니다.
artisan 콘솔(콘솔)을 사용하여 셸 명령을 통합하는 중요한 시작점은 한 번 작성하고 어디서나 실행할 수 있다는 것입니다. 우리가 해야 할 일은 이러한 구성을 구성하고 사용하는 것입니다. 이는 매개변수가 수정되면 명령 자체를 통해 이를 조정할 필요가 없음을 의미합니다. 다음으로 이 콘솔 명령을 생성할 수 있습니다.
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의 프로세스 구성 요소를 사용해야 하기 때문입니다. 이 구성 요소는 많은 훌륭한 기능을 제공합니다. 예를 들어, 프로세스가 실패하면 예외를 발생시킨 다음 해당 예외를 효율적으로 처리할 수 있습니다.
프로세스의 run() 메서드를 사용하는 경우 실행 오류를 수동으로 감지하고 예외를 발생시켜야 합니다. 그리고 mustRun() 메서드를 통해 자동으로 예외가 발생합니다. 설명서에서 더 많은 정보를 얻을 수 있습니다.
쉘 명령과 필수 매개변수를 sprintf() 함수에 전달하면 자리 표시자가 실제 매개변수로 대체됩니다. 프로세스 인스턴스를 처리한 후 handle)( 메서드를 사용하여 다음 단계로 진행할 수 있습니다.
handle 메서드에는 try-catch 코드 블록이 있습니다. 먼저 mustRun()을 호출합니다. 메서드에서 오류가 없으면 녹색 메시지를 콘솔에 출력합니다. 그렇지 않으면 ProcessFailedException 예외가 발생하고 catch 코드 블록에 캡처되며 오류 메시지가 콘솔에 출력됩니다.
다음에는 어떻게 될까요? php artisan db:backup 명령을 실행하면 데이터베이스로 이동하여 storage/backups/backup.sql 파일에 저장됩니다. 잘 작동하지만 아직 해야 할 작업이 남아 있습니다.
우선 Laravel에서는 간단하면서도 체인 작업을 지원하는 내장 API 인터페이스를 제공합니다. 이 글을 계속 읽으시면 문서의 중국어 번역을 적극 권장합니다.
그런 다음 Console/Kernel.php 파일로 이동하여 schedule() 함수를 살펴보세요. 매주 월요일 23:00에 실행 계획이 코딩됩니다. protected function schedule(Schedule $schedule)
{
$schedule->command('db:backup')->mondays()->at('23:00');
}
매우 간단하지 않나요? 더 좋은 점은 여기에서 원하는 만큼 많은 명령을 정의할 수 있다는 것입니다.
이 스케줄러를 실행하려면
php artisan Schedule:run명령을 실행해야 하며, 실행해야 하는 모든 명령이 실행됩니다. 이는 지정된 시간에 어떤 명령이든 실행할 수 있다는 점입니다. 단 한 줄의 명령으로 시간을 단축할 수 있습니다. 그러나 이제 문제는 스케줄러 자체를 어떻게 관리하느냐는 것입니다. 이는 닭고기와 계란이 필요한 문제와 비슷하지만 그렇게 복잡하지는 않습니다.
CORN 실행 원칙과 관련된 기본 지원이 여전히 필요한 경우 Mohamed Said는 CRON 관련 지식을 깊이 있게 설명하는 일련의 기사를 제공합니다. 중요한 점은 예약된 각 작업에 대해 CRON 타이머를 만들 필요가 없다는 것입니다. 앞서 소개한 대로 작업 실행 운을 정의한 다음 작업 호출자를 실행하기만 하면 됩니다.
그러나 php artisan Schedule:run 명령을 실행하려면 시간을 설정해야 합니다. Laravel Forge를 사용하면 예약된 작업을 쉽게 생성할 수 있습니다. 스케줄러 탭으로 이동하여 원하는 예약된 작업을 생성할 수 있습니다.
보시다시피 schedule:run 명령이 기본적으로 추가되었습니다. 작업 주기(빈도)를 정의하고 기본 명령을 서버의 명령으로 바꾸기만 하면 됩니다. .
준비되면 스케줄러는 매번 적절한 시간에 실행되고 모든 명령이 실행되도록 트리거합니다.
다행입니다. 더 큰 패키지에 의존하지 않고도 가벼운 솔루션을 제공할 수 있습니다. 여기에서 우리는 필요를 충족하기 위해 Laravel을 활용할 수도 있습니다.
Process 구성 요소를 사용하여 데이터베이스를 쉽게 내보내고 artisan 명령으로 캡슐화할 수 있습니다. 그런 다음 명령에 대한 실행 주기를 신속하게 설정할 수 있으며 Laravel의 스케줄러가 나머지를 처리합니다. 우리는 그냥 누워서 일을 할 수 있었습니다.
관련 권장사항:
Laravel 프레임워크에서 구성 관리 시스템의 설계 프로세스(코드 포함)
laravel 프레임워크 모델 모델 생성 및 사용 방법위 내용은 Larave를 사용하여 MySQL 데이터베이스 백업 일정 작업을 생성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!