Files
download/mysql/update.sh
耗子 758e1c8799
All checks were successful
Generate Checksums / checksums (push) Successful in 46s
feat: 清理提交
2026-01-31 07:03:45 +08:00

152 lines
3.8 KiB
Bash

#!/bin/bash
source <(curl -f -s --connect-timeout 10 --retry 3 https://dl.acepanel.net/public.sh)
if [ $? -ne 0 ]; then
echo "Download public.sh failed, please check the network or try again later."
exit 1
fi
channel=${1}
version=${2}
mysql_path="${setup_path}/server/mysql"
mysql_password=$(acepanel setting get mysql_root_password)
# 预检查
systemctl is-active --quiet mysqld
if [ "$?" != "0" ]; then
error "Application is not running properly"
fi
# 准备目录
cd ${mysql_path}
rm -rf src
# 下载源码
dl "${mysql_path}" "/mysql/percona-server-${version}.7z"
7z x percona-server-${version}.7z
rm -f percona-server-${version}.7z
mv percona-server-${version} src
cd src
# 编译
mkdir build
cd build
# 57 和 80 需要 boost 和禁用 TOKUDB
if [[ ${channel} == "57" ]] || [[ ${channel} == "80" ]]; then
WITH_BOOST="-DWITH_BOOST=../boost"
WITHOUT_TOKUDB="-DWITH_TOKUDB=0"
fi
MAX_INDEXES=255
# MariaDB 只能设置 128
[[ ${channel} == "mariadb" ]] && MAX_INDEXES=128
WITH_SYSTEMD=ON
# MariaDB 要使用 yes
[[ ${channel} == "mariadb" ]] && WITH_SYSTEMD="yes"
# 内存小于 8G 禁用 RocksDB
WITH_ROCKSDB=1
if [ ${MEM} -lt 7900 ]; then
WITH_ROCKSDB=0
fi
cmake -G Ninja .. \
-DCMAKE_C_COMPILER=gcc \
-DCMAKE_CXX_COMPILER=g++ \
-DCMAKE_INSTALL_PREFIX=${mysql_path} \
-DMYSQL_DATADIR=${mysql_path}/data \
-DSYSCONFDIR=${mysql_path}/conf \
-DINSTALL_SYSCONFDIR=${mysql_path}/conf \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=0 \
-DWITH_EXAMPLE_STORAGE_ENGINE=0 \
-DWITH_FEDERATED_STORAGE_ENGINE=0 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=0 \
-DWITH_PARTITION_STORAGE_ENGINE=0 \
-DWITH_NDBCLUSTER_STORAGE_ENGINE=0 \
-DPLUGIN_CONNECT=NO \
-DPLUGIN_COLUMNSTORE=NO \
-DPLUGIN_SPHINX=NO \
-DPLUGIN_SPIDER=NO \
-DPLUGIN_S3=NO \
-DPLUGIN_ARCHIVE=NO \
-DPLUGIN_BLACKHOLE=NO \
-DPLUGIN_FEDERATED=NO \
-DPLUGIN_FEDERATEDX=NO \
-DPLUGIN_EXAMPLE=NO \
-DPLUGIN_PARTITION=NO \
-DPLUGIN_PERFSCHEMA=NO \
-DPLUGIN_MROONGA=NO \
-DPLUGIN_ROCKSDB=NO \
-DWITH_TOKUDB=0 \
-DWITH_ROCKSDB=${WITH_ROCKSDB} \
-DWITH_COREDUMPER=0 \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DMAX_INDEXES=${MAX_INDEXES} \
-DWITH_RAPID=OFF \
-DWITH_NDBMTD=OFF \
-DENABLED_LOCAL_INFILE=ON \
-DWITH_BUILD_ID=OFF \
-DWITH_DEBUG=OFF \
-DWITH_UNIT_TESTS=OFF \
-DINSTALL_MYSQLTESTDIR= \
-DCMAKE_BUILD_TYPE=Release \
-DWITH_SYSTEMD=${WITH_SYSTEMD} \
-DSYSTEMD_PID_DIR=${mysql_path} \
-DWITH_EMBEDDED_SERVER=OFF \
-DWITH_EMBEDDED_SHARED_LIBRARY=OFF \
-DWITH_ICU=system \
-DWITH_PROTOBUF=system \
${WITH_BOOST} \
-DWITH_MYSQLX=OFF \
-DWITH_ROUTER=OFF \
-DWITH_MEB=OFF \
-DWITH_GROUP_REPLICATION=OFF \
-DWITH_LTO=ON \
-DCOMPRESS_DEBUG_SECTIONS=ON
if [ "$?" != "0" ]; then
error "Compilation initialization failed"
fi
ninja
if [ "$?" != "0" ]; then
error "Compilation failed"
fi
# 停止已有服务
systemctl stop mysqld
# 安装
ninja install
if [ "$?" != "0" ]; then
error "Installation failed"
fi
# 设置权限
chown -R mysql:mysql ${mysql_path}
chmod -R 700 ${mysql_path}
# 启动服务
systemctl daemon-reload
systemctl start mysqld
if [ "$?" != "0" ]; then
error "Failed to start"
fi
# 执行更新后的初始化
if [[ "${channel}" == "57" ]]; then
${mysql_path}/bin/mysql_upgrade -uroot -p${mysql_password}
fi
${mysql_path}/bin/mysql -uroot -p${mysql_password} -e "DROP DATABASE test;"
${mysql_path}/bin/mysql -uroot -p${mysql_password} -e "DELETE FROM mysql.user WHERE user='';"
${mysql_path}/bin/mysql -uroot -p${mysql_password} -e "FLUSH PRIVILEGES;"
acepanel app write mysql ${channel} ${version}
echo -e $HR
echo "Upgrade successful"
echo -e $HR