From a63be15a4a19459753b77968bfddd01ea5c59b72 Mon Sep 17 00:00:00 2001 From: zhangsz Date: Sat, 22 Feb 2025 19:02:43 +0800 Subject: [PATCH] feat: support upgrade to version --- build/bin/wfcupgdb.sh | 100 +++++++++++------------------------ build/bin/wfcupgrade.sh | 32 +++++++++++ build/docker/env/wfc-release | 5 ++ 3 files changed, 69 insertions(+), 68 deletions(-) create mode 100644 build/bin/wfcupgrade.sh create mode 100644 build/docker/env/wfc-release diff --git a/build/bin/wfcupgdb.sh b/build/bin/wfcupgdb.sh index a225ac6..aa20013 100755 --- a/build/bin/wfcupgdb.sh +++ b/build/bin/wfcupgdb.sh @@ -3,77 +3,41 @@ wfc_work_dir=/opt/wfc docker_work_dir=${wfc_work_dir}/docker mysql_sql_dir=${docker_work_dir}/mysql/db -docker_sql_dir=/docker-entrypoint-initdb.d docker_mysql_conf_d=/etc/mysql/conf.d docker_my_conf_file=${docker_mysql_conf_d}/my.cnf mysql_container_name=wfc-mysql -# # 获取 MySQL 容器的 IP 地址 -# mysql_container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ${mysql_container_name}) -# # 在容器内生成 my.cnf 文件 -# docker exec ${mysql_container_name} bash -c "cat < ${docker_my_conf_file} -# [client] -# user=root -# password=\${MYSQL_ROOT_PASSWORD} -# host=${mysql_container_ip} -# port=3306 -# EOF" +execute_sql_scripts() { + version=$1 + cd ${mysql_sql_dir} + for sql in ./upgrade/${version}/*.sql; do + if [ -f "$sql" ]; then + echo -n "Execute SQL script: ${sql} ... " + docker exec -i ${mysql_container_name} mysql --defaults-extra-file=${docker_my_conf_file} < ${sql} + if [ $? = 0 ]; then + echo "done" + fi + else + echo "No SQL files found in ./upgrade/${version}/" + fi + done +} -case "$1" in - system) - db_name=wfc_system_db - cd ${mysql_sql_dir} - for sql in ./upgrade/${db_name}/*.sql; do - if [ -f "$sql" ]; then - echo -n "Execute SQL script: ${sql} ... " - # docker exec -i ${mysql_container_name} mysql -u ${db_name} < ${sql}; - docker exec -i ${mysql_container_name} mysql --defaults-extra-file=${docker_my_conf_file} ${db_name} < ${sql} - if [ $? = 0 ]; then - echo "done" - fi - else - echo "No SQL files found in ./upgrade/${db_name}/" - fi - done - ;; - user) - db_name=wfc_user_db - cd ${mysql_sql_dir} - for sql in ./upgrade/${db_name}/*.sql; do - if [ -f "$sql" ]; then - echo -n "Execute SQL script: ${sql} ... " - docker exec -i ${mysql_container_name} mysql --defaults-extra-file=${docker_my_conf_file} ${db_name} < ${sql} - if [ $? = 0 ]; then - echo "done" - fi - else - echo "No SQL files found in ./upgrade/${db_name}/" - fi - done - ;; - config) - db_name=wfc_config_db - cd ${mysql_sql_dir} - for sql in ./upgrade/${db_name}/*.sql; do - if [ -f "$sql" ]; then - echo -n "Execute SQL script: ${sql} ... " - docker exec -i ${mysql_container_name} mysql --defaults-extra-file=${docker_my_conf_file} ${db_name} < ${sql} - if [ $? = 0 ]; then - echo "done" - fi - else - echo "No SQL files found in ./upgrade/${db_name}/" - fi - done - ;; - all) - $0 config - $0 system - $0 user - ;; - *) - echo "WANFi Control and Billing System Upgrade Database ..." - echo "Usage: $0 config|system|user|all" +if [ -z "$1" ]; then + # No parameter, traverse all subdirectories in upgrade directory + for dir in ${mysql_sql_dir}/upgrade/*; do + if [ -d "$dir" ]; then + version=$(basename $dir) + echo "Executing upgrade for version $version" + execute_sql_scripts $version + fi + done +else + # Parameter provided, execute for the specific version or database name + ver_or_dbname=$1 + if [ ! -d ${mysql_sql_dir}/upgrade/${ver_or_dbname} ]; then + echo "No upgrade scripts found for ${ver_or_dbname}" exit 1 - ;; -esac \ No newline at end of file + fi + execute_sql_scripts $ver_or_dbname +fi \ No newline at end of file diff --git a/build/bin/wfcupgrade.sh b/build/bin/wfcupgrade.sh new file mode 100644 index 0000000..c3b5a09 --- /dev/null +++ b/build/bin/wfcupgrade.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +wfc_work_dir=/opt/wfc +docker_work_dir=${wfc_work_dir}/docker + +# Get the new version number +new_version=$(grep '^VERSION_ID=' ${docker_work_dir}/env/wfc-release | cut -d'=' -f2 | tr -d '"') + +# Get the original version number +old_version=$(grep '^VERSION_ID=' ${docker_work_dir}/.wfc-release | cut -d'=' -f2 | tr -d '"') + +# Convert the version number to a comparable format +version_to_number() { + echo "$1" | awk -F. '{ printf("%d%03d%03d\n", $1,$2,$3); }' +} + +new_version_num=$(version_to_number $new_version) +old_version_num=$(version_to_number $old_version) + +# Find and execute all version directories higher than the original version number +for dir in ${docker_work_dir}/mysql/db/upgrade/*; do + version=$(basename $dir) + version_num=$(version_to_number $version) + if [ $version_num -gt $old_version_num ] && [ $version_num -le $new_version_num ]; then + echo "Executing upgrade for version $version" + ${wfc_work_dir}/bin/wfcupgdb.sh $version + fi +done + +# Update the version number +cp -f ${docker_work_dir}/env/wfc-release ${docker_work_dir}/.wfc-release +echo "Upgrade complete" \ No newline at end of file diff --git a/build/docker/env/wfc-release b/build/docker/env/wfc-release new file mode 100644 index 0000000..d48c3ac --- /dev/null +++ b/build/docker/env/wfc-release @@ -0,0 +1,5 @@ +NAME="wfc" +VERSION="1.0.7-YYYYMMDD" +ID="wfc" +VERSION_ID="1.0.7" +DESCRIPTION="WANFi Control and Billing System" \ No newline at end of file