diff --git a/bin/dbmigrate.php b/bin/dbmigrate.php --- a/bin/dbmigrate.php +++ b/bin/dbmigrate.php @@ -1,40 +1,65 @@ $section) { if (substr($name, 0, strlen('env_')) === 'env_') - { $envs[substr($name, strlen('env_'))] = $section; - } } -echo 'Available environments:' . PHP_EOL; +// check if config is valid +if (count($envs) < 2) + exit('Define at leaste 2 environments in the config!'); + +// list envs +echo 'Available environments: ' . PHP_EOL; foreach ($envs as $name => $env_config) echo '* ' . $name . PHP_EOL; echo PHP_EOL; -echo 'Select the source env:' . PHP_EOL; +// ask source env +echo 'Select the source env: '; $source = trim(fgets(STDIN)); echo PHP_EOL; -echo 'Select the destination env:' . PHP_EOL; +// ask dest env +echo 'Select the destination env: '; $dest = trim(fgets(STDIN)); echo PHP_EOL; -echo 'Please make sure: You want to export the ' . $source . ' database to ' . $dest . '? Y|N' . PHP_EOL; +// ask confirmation +echo 'Please make sure:' . PHP_EOL . 'You want to export the ' . $source . ' database to the ' . $dest . ' database, all data in ' . $dest . ' will be removed! [Y|N]? '; $confirm = strtolower(trim(fgets(STDIN))); echo PHP_EOL; if (in_array($confirm, array('y', 'yes', 'j', 'ja', 'ok')) === false) exit('Okay, exit!'); +// create backup directory if (file_exists($base_dir . DIRECTORY_SEPARATOR . 'backup') === false) +{ + echo 'Creating backup directory ' . $base_dir . DIRECTORY_SEPARATOR . 'backup'; mkdir($base_dir . DIRECTORY_SEPARATOR . 'backup'); +} +// dump source and save path echo 'Dump source database:' . PHP_EOL; $source_dump = $file = $base_dir . DIRECTORY_SEPARATOR . 'backup' . DIRECTORY_SEPARATOR . 'dbbackup_' . $source . '_' . date('YmdHis') . '.sql'; $command = 'mysqldump --add-drop-table --comments --host=' . $envs[$source]['host'] . ' --no-create-db --password=' . $envs[$source]['password'] . ' --port=' . $envs[$source]['port'] . ' --result-file=' . $file . ' --default-character-set=utf8 --user=' . $envs[$source]['user'] . ' ' . $envs[$source]['name']; @@ -43,6 +68,7 @@ echo ' command: ' . $command . PHP_EOL; system($command); echo PHP_EOL . 'Complete' . PHP_EOL . PHP_EOL; +// dump dest and save path echo 'Dump source database:' . PHP_EOL; $dest_dump = $file = $base_dir . DIRECTORY_SEPARATOR . 'backup' . DIRECTORY_SEPARATOR . 'dbbackup_' . $dest . '_' . date('YmdHis') . '.sql'; $command = 'mysqldump --add-drop-table --comments --host=' . $envs[$dest]['host'] . ' --no-create-db --password=' . $envs[$dest]['password'] . ' --port=' . $envs[$dest]['port'] . ' --result-file=' . $file . ' --default-character-set=utf8 --user=' . $envs[$dest]['user'] . ' ' . $envs[$dest]['name']; @@ -51,6 +77,7 @@ echo ' command: ' . $command . PHP_EOL; system($command); echo PHP_EOL . 'Complete' . PHP_EOL . PHP_EOL; +// load data echo 'Load data on destination database:' . PHP_EOL; $command = 'mysql --host=' . $envs[$dest]['host'] . ' --password=' . $envs[$dest]['password'] . ' --port=' . $envs[$dest]['port'] . ' --default-character-set=utf8 --user=' . $envs[$dest]['user'] . ' --database=' . $envs[$dest]['name'] . ' < ' . $source_dump; echo ' load sql: ' . $source_dump . PHP_EOL; @@ -58,6 +85,7 @@ echo ' command: ' . $command . PHP_EOL; system($command); echo PHP_EOL . 'Complete' . PHP_EOL . PHP_EOL; +// run dvdgiessen dbsr echo 'Replace domain information in database:' . PHP_EOL; $command = 'php vendor\dvdgiessen\dbsr\index.php --host ' . $envs[$dest]['host'] . ' --user ' . $envs[$dest]['user'] . ' --password ' . $envs[$dest]['password'] . ' --database ' . $envs[$dest]['name'] . ' --charset utf8 -- ' . $envs[$source]['domain'] . ' ' . $envs[$dest]['domain']; echo ' search for: ' . $envs[$source]['domain'] . PHP_EOL; @@ -66,4 +94,6 @@ echo ' command: ' . $command . PHP_EOL; system($command); echo PHP_EOL . 'Complete' . PHP_EOL . PHP_EOL; +// info user +echo 'A copy of the old database of ' . $dest . ' is saved in ' . $dest_dump . PHP_EOL; echo PHP_EOL . 'Done!' . PHP_EOL . PHP_EOL; \ No newline at end of file