#!/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