move database tasks to separate file

Cette révision appartient à :
Daniel Seifert 2024-11-02 14:38:00 +01:00
Parent 64de601728
révision b3092e0bee
Signé par: DanielS
ID de la clé GPG: 6A513E13AEE66170
4 fichiers modifiés avec 60 ajouts et 44 suppressions

Voir le fichier

@ -10,8 +10,14 @@ See Deployer OXID recipe project for further instructions.
## available tasks
### OXID
- dep `oxid:getVersion` [stage] - show version of current OXID installation
- dep `oxid:backupDatabase` [stage] - rotate old database backups and create a new one
- dep `oxid:cloneDatabase` [stage] - dump contents from source to destination database
- dep `oxid:runMigration` [stage] - run all database migrations
### database
- dep `database:createBackup` [stage] - rotate old database backups and create a new one
- dep `database:clone` [stage] - dump contents from source to destination database
### setup
- dep `setup:createDbConfig` [stage] - generate database configuration file

51
recipe/databaseTasks.php Fichier normal
Voir le fichier

@ -0,0 +1,51 @@
<?php
namespace Deployer;
require_once 'inc/database.php';
desc('dump contents from source to destination database');
task('database:clone', function () {
if (get('mysql_configured') && get('mysqldump_configured')) {
info('Note: Use a dedicated read only user for accessing the source database.');
info('Using the following source database:');
$source_host = ask('source database host', 'localhost');
$source_port = ask('source database port', '3306');
$source_name = ask('source database name');
$source_user = ask('source database user');
$source_pass = askHiddenResponse('source database password');
$target_name = parse_ini_file(get('db_conf_path'))['database'];
if (askConfirmation('Do you really want to clone from "'.$source_name.'" to "'.$target_name.'"? The target database "'.$target_name.'" will be overwritten!')) {
info('cloning database');
$auth = "-h".$source_host." -P".$source_port." -u".$source_user." -p'".$source_pass."'";
run("{{bin/mysqldump}} ".$auth." --opt --no-create-db -f ".$source_name." $({{bin/mysql}} ".$auth." -ANe\"SET group_concat_max_len = 10485760; SELECT GROUP_CONCAT(table_name SEPARATOR ' ') FROM information_schema.tables WHERE table_schema='".$source_name."' AND engine IS NOT NULL;\") | {{bin/mysql}} --defaults-extra-file={{db_conf_path}} -f");
info('creating views');
run('{{release_or_current_path}}/vendor/bin/oe-eshop-db_views_regenerate');
info('successfully finished');
} else {
info('abborted');
}
} else {
warning('missing config, task skipped');
}
});
desc('rotate old database backups and create a new one');
task('database:createBackup', function () {
if (get('mysql_configured') && get('mysqldump_configured')) {
if (!test("[ -f {{deploy_path}}/database/rotatemap.conf ]")) {
run('printf "{{deploy_path}}/database/backup/backup.sql {\n rotate 5\n}" > {{deploy_path}}/database/rotatemap.conf');
}
if (!test("[ -d {{deploy_path}}/database/backup ]")) {
run("mkdir -p {{deploy_path}}/database/backup");
}
$source_name = parse_ini_file(get('db_conf_path'))['database'];
if (test("[ -f {{deploy_path}}/database/backup/backup.sql ]")) {
run("logrotate -f -s {{deploy_path}}/database/rotatemap.state {{deploy_path}}/database/rotatemap.conf");
}
run("{{bin/mysqldump}} --defaults-extra-file={{db_conf_path}} --opt --no-create-db -f ".$source_name." $({{bin/mysql}} --defaults-extra-file={{db_conf_path}} -ANe\"SET group_concat_max_len = 10485760; SELECT GROUP_CONCAT(table_name SEPARATOR ' ') FROM information_schema.tables WHERE table_schema='".$source_name."' AND engine IS NOT NULL;\") > {{deploy_path}}/database/backup/backup.sql");
info('successfully dumped to {{deploy_path}}/database/backup/backup.sql');
} else {
warning('missing config, task skipped');
}
});

Voir le fichier

@ -6,6 +6,7 @@ require_once __DIR__.'/../../../deployer/deployer/recipe/composer.php';
require_once __DIR__.'/menu.php';
require_once __DIR__.'/hooks.php';
require_once __DIR__.'/databaseTasks.php';
require_once __DIR__.'/deployTasks.php';
require_once __DIR__.'/setupTasks.php';
require_once __DIR__.'/shopTasks.php';

Voir le fichier

@ -9,7 +9,6 @@ task('oxid:runMigration', [
'oxid:setShopsOnline'
]);
require_once 'inc/database.php';
desc('set shops offline');
@ -59,46 +58,5 @@ task('oxid:getVersion', function () {
desc('dump contents from source to destination database');
task('oxid:cloneDatabase', function () {
if (get('mysql_configured') && get('mysqldump_configured')) {
info('Note: Use a dedicated read only user for accessing the source database.');
info('Using the following source database:');
$source_host = ask('source database host', 'localhost');
$source_port = ask('source database port', '3306');
$source_name = ask('source database name');
$source_user = ask('source database user');
$source_pass = askHiddenResponse('source database password');
$target_name = parse_ini_file(get('db_conf_path'))['database'];
if (askConfirmation('Do you really want to clone from "'.$source_name.'" to "'.$target_name.'"? The target database "'.$target_name.'" will be overwritten!')) {
info('cloning database');
$auth = "-h".$source_host." -P".$source_port." -u".$source_user." -p'".$source_pass."'";
run("{{bin/mysqldump}} ".$auth." --opt --no-create-db -f ".$source_name." $({{bin/mysql}} ".$auth." -ANe\"SET group_concat_max_len = 10485760; SELECT GROUP_CONCAT(table_name SEPARATOR ' ') FROM information_schema.tables WHERE table_schema='".$source_name."' AND engine IS NOT NULL;\") | {{bin/mysql}} --defaults-extra-file={{db_conf_path}} -f");
info('creating views');
run('{{release_or_current_path}}/vendor/bin/oe-eshop-db_views_regenerate');
info('successfully finished');
} else {
info('abborted');
}
} else {
warning('missing config, task skipped');
}
});
desc('rotate old database backups and create a new one');
task('oxid:backupDatabase', function () {
if (get('mysql_configured') && get('mysqldump_configured')) {
if (!test("[ -f {{deploy_path}}/database/rotatemap.conf ]")) {
run('printf "{{deploy_path}}/database/backup/backup.sql {\n rotate 5\n}" > {{deploy_path}}/database/rotatemap.conf');
}
if (!test("[ -d {{deploy_path}}/database/backup ]")) {
run("mkdir -p {{deploy_path}}/database/backup");
}
$source_name = parse_ini_file(get('db_conf_path'))['database'];
if (test("[ -f {{deploy_path}}/database/backup/backup.sql ]")) {
run("logrotate -f -s {{deploy_path}}/database/rotatemap.state {{deploy_path}}/database/rotatemap.conf");
}
run("{{bin/mysqldump}} --defaults-extra-file={{db_conf_path}} --opt --no-create-db -f ".$source_name." $({{bin/mysql}} --defaults-extra-file={{db_conf_path}} -ANe\"SET group_concat_max_len = 10485760; SELECT GROUP_CONCAT(table_name SEPARATOR ' ') FROM information_schema.tables WHERE table_schema='".$source_name."' AND engine IS NOT NULL;\") > {{deploy_path}}/database/backup/backup.sql");
info('successfully dumped to {{deploy_path}}/database/backup/backup.sql');
} else {
warning('missing config, task skipped');
}
invoke('database:clone');
});