feat: support upgrade to version
This commit is contained in:
@@ -3,77 +3,41 @@
|
|||||||
wfc_work_dir=/opt/wfc
|
wfc_work_dir=/opt/wfc
|
||||||
docker_work_dir=${wfc_work_dir}/docker
|
docker_work_dir=${wfc_work_dir}/docker
|
||||||
mysql_sql_dir=${docker_work_dir}/mysql/db
|
mysql_sql_dir=${docker_work_dir}/mysql/db
|
||||||
docker_sql_dir=/docker-entrypoint-initdb.d
|
|
||||||
docker_mysql_conf_d=/etc/mysql/conf.d
|
docker_mysql_conf_d=/etc/mysql/conf.d
|
||||||
docker_my_conf_file=${docker_mysql_conf_d}/my.cnf
|
docker_my_conf_file=${docker_mysql_conf_d}/my.cnf
|
||||||
mysql_container_name=wfc-mysql
|
mysql_container_name=wfc-mysql
|
||||||
|
|
||||||
# # 获取 MySQL 容器的 IP 地址
|
execute_sql_scripts() {
|
||||||
# mysql_container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ${mysql_container_name})
|
version=$1
|
||||||
# # 在容器内生成 my.cnf 文件
|
cd ${mysql_sql_dir}
|
||||||
# docker exec ${mysql_container_name} bash -c "cat <<EOF > ${docker_my_conf_file}
|
for sql in ./upgrade/${version}/*.sql; do
|
||||||
# [client]
|
if [ -f "$sql" ]; then
|
||||||
# user=root
|
echo -n "Execute SQL script: ${sql} ... "
|
||||||
# password=\${MYSQL_ROOT_PASSWORD}
|
docker exec -i ${mysql_container_name} mysql --defaults-extra-file=${docker_my_conf_file} < ${sql}
|
||||||
# host=${mysql_container_ip}
|
if [ $? = 0 ]; then
|
||||||
# port=3306
|
echo "done"
|
||||||
# EOF"
|
fi
|
||||||
|
else
|
||||||
|
echo "No SQL files found in ./upgrade/${version}/"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
case "$1" in
|
if [ -z "$1" ]; then
|
||||||
system)
|
# No parameter, traverse all subdirectories in upgrade directory
|
||||||
db_name=wfc_system_db
|
for dir in ${mysql_sql_dir}/upgrade/*; do
|
||||||
cd ${mysql_sql_dir}
|
if [ -d "$dir" ]; then
|
||||||
for sql in ./upgrade/${db_name}/*.sql; do
|
version=$(basename $dir)
|
||||||
if [ -f "$sql" ]; then
|
echo "Executing upgrade for version $version"
|
||||||
echo -n "Execute SQL script: ${sql} ... "
|
execute_sql_scripts $version
|
||||||
# docker exec -i ${mysql_container_name} mysql -u ${db_name} < ${sql};
|
fi
|
||||||
docker exec -i ${mysql_container_name} mysql --defaults-extra-file=${docker_my_conf_file} ${db_name} < ${sql}
|
done
|
||||||
if [ $? = 0 ]; then
|
else
|
||||||
echo "done"
|
# Parameter provided, execute for the specific version or database name
|
||||||
fi
|
ver_or_dbname=$1
|
||||||
else
|
if [ ! -d ${mysql_sql_dir}/upgrade/${ver_or_dbname} ]; then
|
||||||
echo "No SQL files found in ./upgrade/${db_name}/"
|
echo "No upgrade scripts found for ${ver_or_dbname}"
|
||||||
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"
|
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
fi
|
||||||
esac
|
execute_sql_scripts $ver_or_dbname
|
||||||
|
fi
|
||||||
32
build/bin/wfcupgrade.sh
Normal file
32
build/bin/wfcupgrade.sh
Normal file
@@ -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"
|
||||||
5
build/docker/env/wfc-release
vendored
Normal file
5
build/docker/env/wfc-release
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
NAME="wfc"
|
||||||
|
VERSION="1.0.7-YYYYMMDD"
|
||||||
|
ID="wfc"
|
||||||
|
VERSION_ID="1.0.7"
|
||||||
|
DESCRIPTION="WANFi Control and Billing System"
|
||||||
Reference in New Issue
Block a user