MySQL/MariaDB/Percona数据库升级脚本

 2022-10-27    356  

  MySQL/MariaDB/Percona数据库升级脚本截取《OneinStack》中upgrade_db.sh,一般情况下不建议升级数据库版本,该脚本专提供给各位版本控们。为防止大版本之间兼容问题,脚本默认仅支持同一大版本之间的升级,如:MySQL-5.6.25升级到MySQL-5.6.26、MySQL-5.5.44升级到MySQL-5.5.45、MariaDB-10.0.20升级到MariaDB-10.0.21;不能跨分支版本且不能跨大版本,如从MySQL-5.5.44升级到PerconaL-5.5.44-37.3、MySQL-5.5.44升级到MySQL-5.6.25。

  2015-07-16之前版本如何支持数据库版本升级?

MySQL/MariaDB/Percona数据库升级脚本

  《OneinStack》:

cponeinstack/options.conf./#备份options.conf
rm-rfoneinstack#删除旧版
wgethttp://mirrors.linuxeye.com/oneinstack-full.tar.gz#下载***版
tarxzfoneinstack-full.tar.gz
/bin/mvoptions.conf./oneinstack#还原options.conf,必须使用旧版options.conf文件
cdoneinstack
./upgradedb#升级数据库版本

  《lnmp一键安装包》:

cplnmp/options.conf./#备份options.conf
rm-rflnmp#删除旧版
wgethttp://mirrors.linuxeye.com/lnmp-full.tar.gz#下载***版
tarxzflnmp-full.tar.gz
/bin/mvoptions.conf./lnmp#还原options.conf,必须使用旧版options.conf文件
cdlnmp
./upgradedb#升级数据库版本

  PS:

  MySQL/MariaDB/Percona数据库升级脚本内容如下(cat upgrade_db.sh):

#!/bin/bash
#Author:yeho<lj2007331ATgmail.com>
#Blog:http://blog.linuxeye.com

Upgrade_DB()
{
cd$oneinstack_dir/src
[!-e"$db_install_dir/bin/mysql"]&&echo-e"\033[31mTheMySQL/MariaDB/Perconaisnotinstalledonyoursystem!\033[0m"&&exit1
DB_version_tmp=`$db_install_dir/bin/mysql-V|awk'{print$5}'|awk-F,'{print$1}'`
DB_tmp=`echo$DB_version_tmp|awk-F'-''{print$2}'`
if["$DB_tmp"=='MariaDB'];then
public_IP=`../functions/get_public_ip.py`
if["`../functions/get_ip_area.py$public_IP`"=='\u4e2d\u56fd'];then
FLAG_IP=CN
fi
["$FLAG_IP"x=="CN"x]&&DOWN_ADDR=http://mirrors.aliyun.com/mariadb||DOWN_ADDR=https://downloads.mariadb.org/f
[-d"/lib64"]&&{SYS_BIT_a=x86_64;SYS_BIT_b=x86_64;}||{SYS_BIT_a=x86;SYS_BIT_b=i686;}
LIBC_VERSION=`getconf-a|grepGNU_LIBC_VERSION|awk'{print$NF}'`
LIBC_YN=`echo"$LIBC_VERSION<2.14"|bc`
[$LIBC_YN=='1']&&GLIBC_FLAG=linux||GLIBC_FLAG=linux-glibc_214

DB=MariaDB
Old_DB_version=`echo$DB_version_tmp|awk-F'-''{print$1}'`
elif[-n"$DB_tmp"-a"$DB_tmp"!='MariaDB'];then
DB=Percona
Old_DB_version=$DB_version_tmp
else
DB=MySQL
Old_DB_version=$DB_version_tmp
fi

#backup
while:
do
$db_install_dir/bin/mysql-uroot-p${dbrootpwd}-e"quit">/dev/null2>&1
if[$?-eq0];then
break
else
echo
read-p"Pleaseinputtherootpasswordofdatabase:"NEW_dbrootpwd
$db_install_dir/bin/mysql-uroot-p${NEW_dbrootpwd}-e"quit">/dev/null2>&1
if[$?-eq0];then
dbrootpwd=$NEW_dbrootpwd
sed-i"s+^dbrootpwd.*+dbrootpwd='$dbrootpwd'+"../options.conf
break
else
echo-e"\033[31m$DBrootpasswordincorrect,Pleaseenteragain!\033[0m"
fi
fi

done
echo
echo-e"\033[32mStarting$DBbackup......\033[0m"
$db_install_dir/bin/mysqldump-uroot-p${dbrootpwd}--opt--all-databases>DB_all_backup_$(date+"%Y%m%d").sql
[-f"DB_all_backup_$(date+"%Y%m%d").sql"]&&echo-e"$DBbackupsuccess,Backupfile:\033[32m`pwd`/DB_all_backup_$(date+"%Y%m%d").sql\033[0m"

#upgrade
echo
echo-e"Current$DBVersion:\033[32m$Old_DB_version\033[0m"
[-e/usr/local/lib/libtcmalloc.so]&&{je_tc_malloc=2;EXE_LINKER="-DCMAKE_EXE_LINKER_FLAGS='-ltcmalloc'";}
[-e/usr/local/lib/libjemalloc.so]&&{je_tc_malloc=1;EXE_LINKER="-DCMAKE_EXE_LINKER_FLAGS='-ljemalloc'";}

while:
do
echo
read-p"Pleaseinputupgrade$DBVersion(example:5.6.25):"DB_version
if[`echo$DB_version|awk-F.'{print$1"."$2}'`==`echo$Old_DB_version|awk-F.'{print$1"."$2}'`];then
if["$DB"=='MariaDB'];then
DB_name=mariadb-${DB_version}-${GLIBC_FLAG}-${SYS_BIT_b}
DB_URL=$DOWN_ADDR/mariadb-${DB_version}/bintar-${GLIBC_FLAG}-$SYS_BIT_a/$DB_name.tar.gz
elif["$DB"=='Percona'];then
DB_name=percona-server-$DB_version
DB_URL=http://www.percona.com/redir/downloads/Percona-Server-`echo$DB_version|awk-F.'{print$1"."$2}'`/LATEST/source/tarball/$DB_name.tar.gz
elif["$DB"=='MySQL'];then
DB_name=mysql-$DB_version
DB_URL=http://cdn.mysql.com/Downloads/MySQL-`echo$DB_version|awk-F.'{print$1"."$2}'`/$DB_name.tar.gz
fi
[!-e"$DB_name.tar.gz"]&&wget-c$DB_URL>/dev/null2>&1

if[-e"$DB_name.tar.gz"];then
echo-e"Download\033[32m$DB_name.tar.gz\033[0msuccessfully!"
else
echo-e"\033[31mItdoesnotexist!\033[0m"
fi
break
else
echo-e"\033[31minputerror!\033[0mPleaseonlyinput'\033[32m${Old_DB_version%.*}.xx'\033[0m"
fi
done

if[-e"$DB_name.tar.gz"];then
echo-e"\033[32m$DB_name.tar.gz\033[0m[found]"
echo"PressCtrl+ctocancelorPressanykeytocontinue..."
char=`get_char`
if["$DB"=='MariaDB'];then
servicemysqldstop
mv${db_install_dir}{,_old_`date+"%Y%m%d"`}
mv${db_data_dir}{,_old_`date+"%Y%m%d"`}
mkdir-p$db_data_dir;chownmysql.mysql-R$db_data_dir
tarxzf$DB_name.tar.gz
[!-d"$db_install_dir"]&&mkdir-p$db_install_dir
mvmariadb-${DB_version}-linux-${SYS_BIT_b}/*$db_install_dir
if["$je_tc_malloc"=='1'];then
sed-i's@executingmysqld_safe@executingmysqld_safe\nexportLD_PRELOAD=/usr/local/lib/libjemalloc.so@'$db_install_dir/bin/mysqld_safe
elif["$je_tc_malloc"=='2'];then
sed-i's@executingmysqld_safe@executingmysqld_safe\nexportLD_PRELOAD=/usr/local/lib/libtcmalloc.so@'$db_install_dir/bin/mysqld_safe
fi
$db_install_dir/scripts/mysql_install_db--user=mysql--basedir=$db_install_dir--datadir=$db_data_dir
chownmysql.mysql-R$db_data_dir
servicemysqldstart
$db_install_dir/bin/mysql<DB_all_backup_$(date+"%Y%m%d").sql
servicemysqldrestart
$db_install_dir/bin/mysql-uroot-p${dbrootpwd}-e"dropdatabasetest;">/dev/null2>&1
$db_install_dir/bin/mysql-uroot-p${dbrootpwd}-e"resetmaster;">/dev/null2>&1
[$?-eq0]&&echo-e"Youhave\033[32m$DBsuccessfully\033[0mupgradefrom\033[32m$Old_DB_version\033[0mto\033[32m$DB_version\033[0m"
elif["$DB"=='Percona'];then
tarzxf$DB_name.tar.gz
cd$DB_name
makeclean
if["`echo$DB_version|awk-F.'{print$1"."$2}'`"=='5.5'];then
cmake.-DCMAKE_INSTALL_PREFIX=$db_install_dir\
-DMYSQL_DATADIR=$db_data_dir\
-DSYSCONFDIR=/etc\
-DWITH_INNOBASE_STORAGE_ENGINE=1\
-DWITH_PARTITION_STORAGE_ENGINE=1\
-DWITH_FEDERATED_STORAGE_ENGINE=1\
-DWITH_BLACKHOLE_STORAGE_ENGINE=1\
-DWITH_MYISAM_STORAGE_ENGINE=1\
-DWITH_ARCHIVE_STORAGE_ENGINE=1\
-DWITH_READLINE=1\
-DENABLE_DTRACE=0\
-DENABLED_LOCAL_INFILE=1\
-DDEFAULT_CHARSET=utf8mb4\
-DDEFAULT_COLLATION=utf8mb4_general_ci\
$EXE_LINKER
else
cmake.-DCMAKE_INSTALL_PREFIX=$db_install_dir\
-DMYSQL_DATADIR=$db_data_dir\
-DSYSCONFDIR=/etc\
-DWITH_INNOBASE_STORAGE_ENGINE=1\
-DWITH_PARTITION_STORAGE_ENGINE=1\
-DWITH_FEDERATED_STORAGE_ENGINE=1\
-DWITH_BLACKHOLE_STORAGE_ENGINE=1\
-DWITH_MYISAM_STORAGE_ENGINE=1\
-DWITH_ARCHIVE_STORAGE_ENGINE=1\
-DENABLED_LOCAL_INFILE=1\
-DENABLE_DTRACE=0\
-DDEFAULT_CHARSET=utf8mb4\
-DDEFAULT_COLLATION=utf8mb4_general_ci\
$EXE_LINKER
fi
make-j`grepprocessor/proc/cpuinfo|wc-l`
servicemysqldstop
mv${db_install_dir}{,_old_`date+"%Y%m%d"`}
mv${db_data_dir}{,_old_`date+"%Y%m%d"`}
[!-d"$db_install_dir"]&&mkdir-p$db_install_dir
mkdir-p$db_data_dir;chownmysql.mysql-R$db_data_dir
makeinstall
$db_install_dir/scripts/mysql_install_db--user=mysql--basedir=$db_install_dir--datadir=$db_data_dir
chownmysql.mysql-R$db_data_dir
servicemysqldstart
$db_install_dir/bin/mysql<DB_all_backup_$(date+"%Y%m%d").sql
servicemysqldrestart
$db_install_dir/bin/mysql-uroot-p${dbrootpwd}-e"dropdatabasetest;">/dev/null2>&1
$db_install_dir/bin/mysql-uroot-p${dbrootpwd}-e"resetmaster;">/dev/null2>&1
[$?-eq0]&&echo-e"Youhave\033[32m$DBsuccessfully\033[0mupgradefrom\033[32m$Old_DB_version\033[0mto\033[32m$DB_version\033[0m"
elif["$DB"=='MySQL'];then
tarzxf$DB_name.tar.gz
cd$DB_name
makeclean
if["`echo$DB_version|awk-F.'{print$1"."$2}'`"=='5.5'];then
cmake.-DCMAKE_INSTALL_PREFIX=$db_install_dir\
-DMYSQL_DATADIR=$db_data_dir\
-DSYSCONFDIR=/etc\
-DWITH_INNOBASE_STORAGE_ENGINE=1\
-DWITH_PARTITION_STORAGE_ENGINE=1\
-DWITH_FEDERATED_STORAGE_ENGINE=1\
-DWITH_BLACKHOLE_STORAGE_ENGINE=1\
-DWITH_MYISAM_STORAGE_ENGINE=1\
-DWITH_ARCHIVE_STORAGE_ENGINE=1\
-DWITH_READLINE=1\
-DENABLED_LOCAL_INFILE=1\
-DENABLE_DTRACE=0\
-DDEFAULT_CHARSET=utf8mb4\
-DDEFAULT_COLLATION=utf8mb4_general_ci\
-DWITH_EMBEDDED_SERVER=1\
$EXE_LINKER
else
cmake.-DCMAKE_INSTALL_PREFIX=$db_install_dir\
-DMYSQL_DATADIR=$db_data_dir\
-DSYSCONFDIR=/etc\
-DWITH_INNOBASE_STORAGE_ENGINE=1\
-DWITH_PARTITION_STORAGE_ENGINE=1\
-DWITH_FEDERATED_STORAGE_ENGINE=1\
-DWITH_BLACKHOLE_STORAGE_ENGINE=1\
-DWITH_MYISAM_STORAGE_ENGINE=1\
-DENABLED_LOCAL_INFILE=1\
-DENABLE_DTRACE=0\
-DDEFAULT_CHARSET=utf8mb4\
-DDEFAULT_COLLATION=utf8mb4_general_ci\
-DWITH_EMBEDDED_SERVER=1\
$EXE_LINKER
fi
make-j`grepprocessor/proc/cpuinfo|wc-l`
servicemysqldstop
mv${db_install_dir}{,_old_`date+"%Y%m%d"`}
mv${db_data_dir}{,_old_`date+"%Y%m%d"`}
[!-d"$db_install_dir"]&&mkdir-p$db_install_dir
mkdir-p$db_data_dir;chownmysql.mysql-R$db_data_dir
makeinstall
$db_install_dir/scripts/mysql_install_db--user=mysql--basedir=$db_install_dir--datadir=$db_data_dir
chownmysql.mysql-R$db_data_dir
servicemysqldstart
$db_install_dir/bin/mysql<DB_all_backup_$(date+"%Y%m%d").sql
servicemysqldrestart
$db_install_dir/bin/mysql-uroot-p${dbrootpwd}-e"dropdatabasetest;">/dev/null2>&1
$db_install_dir/bin/mysql-uroot-p${dbrootpwd}-e"resetmaster;">/dev/null2>&1
[$?-eq0]&&echo-e"Youhave\033[32m$DBsuccessfully\033[0mupgradefrom\033[32m$Old_DB_version\033[0mto\033[32m$DB_version\033[0m"
fi
fi
}

Thu Jul 16 12:34:49 CST 2015

关于版权

《Linux运维笔记》的博文均基于创作共享的知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议发布。转载本站博文时请务必以超链接形式标明源文出处,否则谢绝一切转载!

转载请保留固定链接:https://blog.linuxeye.com/424.html

原文链接:https://77isp.com/post/5631.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。