diff --git a/examples/migration-8.0/.gitignore b/examples/migration-8.0/.gitignore new file mode 100644 index 00000000..7aea0eaa --- /dev/null +++ b/examples/migration-8.0/.gitignore @@ -0,0 +1 @@ +dump-data/* \ No newline at end of file diff --git a/examples/migration-8.0/compose-mysql8.0.yml b/examples/migration-8.0/compose-mysql8.0.yml index fedd730a..9bcb5025 100644 --- a/examples/migration-8.0/compose-mysql8.0.yml +++ b/examples/migration-8.0/compose-mysql8.0.yml @@ -29,6 +29,8 @@ services: MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} MARIADB_USER: ${DB_USER} MARIADB_PASSWORD: ${DB_PASSWORD} + MARIADB_DB: ${DB_DATABASE} + MYSQL_CONT_NAME: ${MYSQL_name} container_name: ${MARIADB_DUMP_name} image: mariadb:lts depends_on: @@ -40,28 +42,11 @@ services: interval: 20s timeout: 20s retries: 3 - # command: > - # bash -c " - # echo 'MariaDB service started. Dump MySQL data ...' - # mariadb-dump -h mysql-container -uroot -psecret testdb > /etc/dump/mysql-dump-data.sql" - # user: ${UID}:${EUID} volumes: - mysqldump:/etc/dump/ - # This will not exit container, but command: will - ./dump-mysql.sh:/docker-entrypoint-initdb.d/dump-mysql.sh networks: - backend - # entrypoint: ["/docker-entrypoint-initdb.d/dump-mysql.sh"] - -# We cannot share the same dump directory, we need to stop mariadb-dump - stopper: - image: docker:20.10 - depends_on: - mariadb-dump: - condition: service_healthy - volumes: - - /var/run/docker.sock:/var/run/docker.sock - command: ["sh", "-c", "docker stop mariadb-container-dump"] # Sidecar for insert dump file mariadb-migrated-from-mysql8: @@ -69,11 +54,13 @@ services: MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} MARIADB_USER: ${DB_USER} MARIADB_PASSWORD: ${DB_PASSWORD} + MARIADB_DB: ${DB_DATABASE} container_name: ${MARIADB_MIGRATED_name} image: mariadb:lts depends_on: mariadb-dump: - condition: service_completed_successfully + condition: service_healthy + # restart: true volumes: - mysqldump:/etc/dump/ - ./migrate-mariadb.sh:/docker-entrypoint-initdb.d/migrate-mariadb.sh @@ -82,7 +69,7 @@ services: volumes: dbdata: {} - # sudo chown -R 999:999 ${PWD}/dump-data # host + # sudo chown -R 999:999 ${PWD}/dump-data # on host before running this file mysqldump: driver: local driver_opts: diff --git a/examples/migration-8.0/dump-data/mysql-dump-data-utf8mb4_unicode_ci.sql b/examples/migration-8.0/dump-data/mysql-dump-data-utf8mb4_unicode_ci.sql deleted file mode 100644 index 1ada824f..00000000 --- a/examples/migration-8.0/dump-data/mysql-dump-data-utf8mb4_unicode_ci.sql +++ /dev/null @@ -1,50 +0,0 @@ --- MariaDB dump 10.19 Distrib 10.11.6-MariaDB, for debian-linux-gnu (x86_64) --- --- Host: mysql-container Database: testdb --- ------------------------------------------------------ --- Server version 8.3.0 - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; -/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -/*!40103 SET TIME_ZONE='+00:00' */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; - --- --- Table structure for table `countries` --- - -DROP TABLE IF EXISTS `countries`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `countries` ( - `name` char(20) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `countries` --- - -LOCK TABLES `countries` WRITE; -/*!40000 ALTER TABLE `countries` DISABLE KEYS */; -INSERT INTO `countries` VALUES -('Bosnia & Herzegovina'); -/*!40000 ALTER TABLE `countries` ENABLE KEYS */; -UNLOCK TABLES; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; - -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; - --- Dump completed on 2024-02-12 13:48:45 diff --git a/examples/migration-8.0/dump-data/mysql-dump-data.sql b/examples/migration-8.0/dump-data/mysql-dump-data.sql deleted file mode 100644 index 497e0568..00000000 --- a/examples/migration-8.0/dump-data/mysql-dump-data.sql +++ /dev/null @@ -1,50 +0,0 @@ --- MariaDB dump 10.19 Distrib 10.11.6-MariaDB, for debian-linux-gnu (x86_64) --- --- Host: mysql-container Database: testdb --- ------------------------------------------------------ --- Server version 8.3.0 - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; -/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -/*!40103 SET TIME_ZONE='+00:00' */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; - --- --- Table structure for table `countries` --- - -DROP TABLE IF EXISTS `countries`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `countries` ( - `name` char(20) DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `countries` --- - -LOCK TABLES `countries` WRITE; -/*!40000 ALTER TABLE `countries` DISABLE KEYS */; -INSERT INTO `countries` VALUES -('Bosnia & Herzegovina'); -/*!40000 ALTER TABLE `countries` ENABLE KEYS */; -UNLOCK TABLES; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; - -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; - --- Dump completed on 2024-02-12 13:48:45 diff --git a/examples/migration-8.0/dump-mysql.sh b/examples/migration-8.0/dump-mysql.sh index db2cff63..4c41bbba 100755 --- a/examples/migration-8.0/dump-mysql.sh +++ b/examples/migration-8.0/dump-mysql.sh @@ -1,14 +1,13 @@ #!/bin/bash -echo 'MariaDB service started. Dump MySQL data ...' +echo 'MariaDB service started.' # Run your commands and exit container -whoami # mysql" +whoami # mysql # sh -c "chown -R mysql:mysql /etc/dump" # Operation permitted -# sh -c "ls -la /etc/dump" -sh -c "mariadb-dump -h mysql-container -uroot -psecret testdb > /etc/dump/mysql-dump-data.sql" -sh -c "ls -la /etc/dump/" -echo "List before" -sh -c "cp /etc/dump/mysql-dump-data.sql /etc/dump/mysql-dump-data-utf8mb4_unicode_ci.sql" -sh -c "ls -la /etc/dump/" -echo "List after" -sh -c "sed -i 's/utf8mb4_0900_ai_ci/utf8mb4_unicode_ci/g' /etc/dump/mysql-dump-data-utf8mb4_unicode_ci.sql" \ No newline at end of file +echo 'Dump and compress MySQL data with changed collation ...' +fileName="mysql-dump-data.sql.zst" +if [ -f "$fileName" ]; then + echo "File ${fileName} exists. Remove it ... " + rm "$fileName" +fi +sh -c "mariadb-dump -h${MYSQL_CONT_NAME} -uroot -p${MARIADB_ROOT_PASSWORD} ${MARIADB_DB} | sed 's/utf8mb4_0900/uca1400/g' | zstd > /etc/dump/${fileName}" \ No newline at end of file diff --git a/examples/migration-8.0/migrate-mariadb.sh b/examples/migration-8.0/migrate-mariadb.sh index 7ad79d5e..d56f7481 100644 --- a/examples/migration-8.0/migrate-mariadb.sh +++ b/examples/migration-8.0/migrate-mariadb.sh @@ -1,5 +1,13 @@ #!/bin/bash +echo "Extract file" +oldFile="/etc/dump/mysql-dump.sql" +if [ -f "$oldFile" ]; then + echo "Old file ${oldFile} exists. Remove it ... " + rm "$oldFile" + echo "Extracting ..." +fi +sh -c "zstd -d /etc/dump/mysql-dump-data.sql.zst -o /etc/dump/mysql-dump.sql" echo "Show data in MariaDB" -mariadb -uroot -psecret -e "create database testdb;" -mariadb -uroot -psecret testdb < /etc/dump/mysql-dump-data-utf8mb4_unicode_ci.sql -mariadb -uroot -psecret -e "show databases; select * from countries;" \ No newline at end of file +mariadb -uroot -p"${MARIADB_ROOT_PASSWORD}" -e "create database testdb;" +mariadb -uroot -p"${MARIADB_ROOT_PASSWORD}" "${MARIADB_DB}" < /etc/dump/mysql-dump.sql +mariadb -uroot -p"${MARIADB_ROOT_PASSWORD}" -e "show databases; select * from testdb.countries;" \ No newline at end of file