152 lines
3.8 KiB
Bash
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
|