From 1788e8ddd756eec3b356b4fc091a03751822dda4 Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 7 Oct 2022 12:49:05 +0200 Subject: [PATCH] db dump job --- .docker/Dockerfile | 6 +- src/server/server/config/boot_local.php | 2 +- .../job/TB_Server_Job_DailyDbBackup.php | 80 +++++++++++++++++++ 3 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 src/server/server/job/TB_Server_Job_DailyDbBackup.php diff --git a/.docker/Dockerfile b/.docker/Dockerfile index 94210cb..733a4f0 100644 --- a/.docker/Dockerfile +++ b/.docker/Dockerfile @@ -12,13 +12,17 @@ RUN apt-get install -y \ libjpeg62-turbo-dev \ libpng-dev \ libicu-dev \ + libzip-dev \ + zip \ && docker-php-ext-install -j$(nproc) iconv \ && docker-php-ext-configure gd --with-jpeg=/usr/include/ --with-freetype=/usr/include/ \ && docker-php-ext-install -j$(nproc) gd \ && docker-php-ext-install -j$(nproc) intl \ - && docker-php-ext-install -j$(nproc) pdo_mysql + && docker-php-ext-install -j$(nproc) pdo_mysql \ + && docker-php-ext-install zip RUN apt-get install -y git zip +RUN apt-get install mariadb-client -y RUN apt install nano diff --git a/src/server/server/config/boot_local.php b/src/server/server/config/boot_local.php index 67bbc4d..ce3c70f 100644 --- a/src/server/server/config/boot_local.php +++ b/src/server/server/config/boot_local.php @@ -21,7 +21,7 @@ Francis_Utils_Config::set( 'db.tbteamdata.pass', 'root' ); // Paths Francis_Utils_Config::set( 'path.logfile', '/var/www/html/logs/tbserver-log.txt' ); Francis_Utils_Config::set( 'path.cron_logfile', '/var/www/html/logs/tbserver-cron-log.txt' ); -Francis_Utils_Config::set( 'path.backup_folder', '/temp' ); +Francis_Utils_Config::set( 'path.backup_folder', '/var/www/html/temp' ); Francis_Utils_Config::set( 'path.root', realpath( dirname( __FILE__ ) . '/../../../..' ) ); Francis_Core_Autoloader::attachLocator( new Francis_Core_Locator( 'TB', Francis_Utils_Config::get( 'path.root' ) . '/src/server' ) ); Francis_Utils_Config::set( 'path.server.controller', Francis_Utils_Config::get( 'path.root' ) . '/src/server/server/control' ); diff --git a/src/server/server/job/TB_Server_Job_DailyDbBackup.php b/src/server/server/job/TB_Server_Job_DailyDbBackup.php new file mode 100644 index 0000000..2c1f86f --- /dev/null +++ b/src/server/server/job/TB_Server_Job_DailyDbBackup.php @@ -0,0 +1,80 @@ +entity = $jobEntity; + } + + public function execute() + { + // Remove old DB dumps + $dayInSeconds = 60 * 60 * 24; + $pastDays = 7; + $dumpFile = Francis_Utils_Config::get( 'path.backup_folder' ) . '/dbdump'; + while ( file_exists( $dumpFile . date( 'Y-m-d', ( time() - ( $pastDays * $dayInSeconds ) ) ) . '.zip' ) ) { + unlink( $dumpFile . date( 'Y-m-d', ( time() - ( $pastDays * $dayInSeconds ) ) ) . '.zip' ); + $pastDays++; + } + + // DB Core + $db_host = Francis_Utils_Config::get( 'db.tbcore.host' ); + $db_user = Francis_Utils_Config::get( 'db.tbcore.user' ); + $db_name = Francis_Utils_Config::get( 'db.tbcore.name' ); + $db_passwd = Francis_Utils_Config::get( 'db.tbcore.pass' ); + + $sql_file = Francis_Utils_Config::get( 'path.backup_folder' ) . "/tbcore.sql"; + //exec("mysql -u $db_name -p'$db_passwd' --allow-keywords --add-drop-table --complete-insert --quote-names --routines $db_name > $sql_file"); + exec("mysqldump -h $db_host -u $db_user -p'$db_passwd' $db_name > $sql_file"); + + // DB Teamdata + $db_host = Francis_Utils_Config::get( 'db.tbteamdata.host' ); + $db_user = Francis_Utils_Config::get( 'db.tbteamdata.user' ); + $db_name = Francis_Utils_Config::get( 'db.tbteamdata.name' ); + $db_passwd = Francis_Utils_Config::get( 'db.tbteamdata.pass' ); + + $sql_file = Francis_Utils_Config::get( 'path.backup_folder' ) . "/tbteamdata.sql"; + exec("mysqldump -h $db_host -u $db_user -p'$db_passwd' $db_name > $sql_file"); + //exec("mysql -u $db_name -p'$db_passwd' --allow-keywords --add-drop-table --complete-insert --quote-names --routines $db_name > $sql_file"); + + // Zip + $zipFilename = Francis_Utils_Config::get( 'path.backup_folder' ) . '/dbdump' . date( 'Y-m-d' ) . '.zip'; + $zip = new ZipArchive(); + if ( !$zip->open( $zipFilename, ZipArchive::CREATE ) ) { + TB_Server_Utils_Log::get()->log( "Cannot zip db dump." ); + return; + } + $zip->addFile( Francis_Utils_Config::get( 'path.backup_folder' ) . '/tbcore.sql' , 'tbcore.sql' ); + $zip->addFile( Francis_Utils_Config::get( 'path.backup_folder' ) . '/tbteamdata.sql' , 'tbteamdata.sql' ); + $zip->close(); + + // Cleanup + $sql_file = Francis_Utils_Config::get( 'path.backup_folder' ) . "/tbcore.sql"; + unlink( $sql_file ); + $sql_file = Francis_Utils_Config::get( 'path.backup_folder' ) . "/tbteamdata.sql"; + unlink( $sql_file ); + echo 'bla'; + } + + public function onDone() + { + // Reset event to start the next day + $nowDt = new DateTime( 'now', new \DateTimeZone( "UTC" ) ); + $nowDt->setTime( 2, 0, 0 ); + $nowDt->modify( '+1 day' ); + $this->entity->trigger_dt = $nowDt; + $this->entity->job_status = TB_Shared_Ent_TeamData_Job::JOB_STATUS_READY; + $this->entity->touch( 'job_status' ); + $this->entity->save(); + } + + public static function getRefId() + { + return 'system-daily-db-backup'; + } +} \ No newline at end of file