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

数据库 MySQL MariaDB
MySQL/MariaDB/Percona数据库升级脚本截取《OneinStack》中upgrade_db.sh,一般情况下不建议升级数据库版本,该脚本专提供给各位版本控们。

   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之前版本如何支持数据库版本升级?

  《OneinStack》:

cp oneinstack/options.conf ./  #备份options.conf 
rm -rf oneinstack  #删除旧版 
wget http://mirrors.linuxeye.com/oneinstack-full.tar.gz  #下载***版 
tar xzf oneinstack-full.tar.gz 
/bin/mv options.conf ./oneinstack  #还原options.conf, 必须使用旧版options.conf文件 
cd oneinstack 
./upgrade db  #升级数据库版本 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

  《lnmp一键安装包》:

cp lnmp/options.conf ./  #备份options.conf 
rm -rf lnmp  #删除旧版 
wget http://mirrors.linuxeye.com/lnmp-full.tar.gz  #下载***版 
tar xzf lnmp-full.tar.gz 
/bin/mv options.conf ./lnmp  #还原options.conf, 必须使用旧版options.conf文件 
cd lnmp 
./upgrade db  #升级数据库版本 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

  PS:

 

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

#!/bin/bash 
# Author:  yeho <lj2007331 AT gmail.com> 
# Blog:  http://blog.linuxeye.com 
 
Upgrade_DB() 

cd $oneinstack_dir/src 
[ ! -e "$db_install_dir/bin/mysql" ] && echo -e "\033[31mThe MySQL/MariaDB/Percona is not installed on your system!\033[0m " && exit 1 
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 | grep GNU_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/null 2>&1 
        if [ $? -eq 0 ];then 
                break 
        else 
                echo 
                read -p "Please input the root password of database: " NEW_dbrootpwd 
                $db_install_dir/bin/mysql -uroot -p${NEW_dbrootpwd} -e "quit" >/dev/null 2>&1 
                if [ $? -eq 0 ];then 
                        dbrootpwd=$NEW_dbrootpwd 
                        sed -i "s+^dbrootpwd.*+dbrootpwd='$dbrootpwd'+" ../options.conf 
                        break 
                else 
                        echo -e "\033[31m$DB root password incorrect,Please enter again! \033[0m" 
                fi 
        fi 
 
done 
echo 
echo -e "\033[32mStarting $DB backup......\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 "$DB backup success, Backup file: \033[32m`pwd`/DB_all_backup_$(date +"%Y%m%d").sql\033[0m" 
 
#upgrade 
echo 
echo -e "Current $DB Version: \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 "Please input upgrade $DB Version(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/null 2>&1 
         
                if [ -e "$DB_name.tar.gz" ];then 
                        echo -e "Download \033[32m$DB_name.tar.gz\033[0m successfully! " 
                else 
                        echo -e "\033[31mIt does not exist!\033[0m" 
                fi 
                break 
        else 
                echo -e "\033[31minput error!\033[0m Please only input '\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 "Press Ctrl+c to cancel or Press any key to continue..." 
        char=`get_char` 
    if [ "$DB" == 'MariaDB' ];then  
        service mysqld stop 
        mv ${db_install_dir}{,_old_`date +"%Y%m%d"`} 
        mv ${db_data_dir}{,_old_`date +"%Y%m%d"`} 
        mkdir -p $db_data_dir;chown mysql.mysql -R $db_data_dir 
        tar xzf $DB_name.tar.gz 
        [ ! -d "$db_install_dir" ] && mkdir -p $db_install_dir 
        mv mariadb-${DB_version}-linux-${SYS_BIT_b}/* $db_install_dir 
        if [ "$je_tc_malloc" == '1' ];then 
                sed -i 's@executing mysqld_safe@executing mysqld_safe\nexport LD_PRELOAD=/usr/local/lib/libjemalloc.so@' $db_install_dir/bin/mysqld_safe 
        elif [ "$je_tc_malloc" == '2' ];then 
                sed -i 's@executing mysqld_safe@executing mysqld_safe\nexport LD_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 
        chown mysql.mysql -R $db_data_dir 
        service mysqld start 
        $db_install_dir/bin/mysql < DB_all_backup_$(date +"%Y%m%d").sql  
        service mysqld restart 
        $db_install_dir/bin/mysql -uroot -p${dbrootpwd} -e "drop database test;" >/dev/null 2>&1 
        $db_install_dir/bin/mysql -uroot -p${dbrootpwd} -e "reset master;" >/dev/null 2>&1 
                [ $? -eq 0 ] &&  echo -e "You have \033[32m$DB successfully\033[0m upgrade from \033[32m$Old_DB_version\033[0m to \033[32m$DB_version\033[0m" 
    elif [ "$DB" == 'Percona' ];then 
        tar zxf $DB_name.tar.gz  
        cd $DB_name 
        make clean 
        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 `grep processor /proc/cpuinfo | wc -l` 
        service mysqld stop 
        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;chown mysql.mysql -R $db_data_dir 
        make install 
        $db_install_dir/scripts/mysql_install_db --user=mysql --basedir=$db_install_dir --datadir=$db_data_dir 
                chown mysql.mysql -R $db_data_dir 
                service mysqld start 
        $db_install_dir/bin/mysql < DB_all_backup_$(date +"%Y%m%d").sql 
                service mysqld restart 
        $db_install_dir/bin/mysql -uroot -p${dbrootpwd} -e "drop database test;" >/dev/null 2>&1 
        $db_install_dir/bin/mysql -uroot -p${dbrootpwd} -e "reset master;" >/dev/null 2>&1 
                [ $? -eq 0 ] &&  echo -e "You have \033[32m$DB successfully\033[0m upgrade from \033[32m$Old_DB_version\033[0m to \033[32m$DB_version\033[0m" 
    elif [ "$DB" == 'MySQL' ];then 
        tar zxf $DB_name.tar.gz 
                cd $DB_name 
                make clean 
                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 `grep processor /proc/cpuinfo | wc -l` 
        service mysqld stop 
                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;chown mysql.mysql -R $db_data_dir 
                make install 
        $db_install_dir/scripts/mysql_install_db --user=mysql --basedir=$db_install_dir --datadir=$db_data_dir 
                chown mysql.mysql -R $db_data_dir 
                service mysqld start 
                $db_install_dir/bin/mysql < DB_all_backup_$(date +"%Y%m%d").sql 
                service mysqld restart 
        $db_install_dir/bin/mysql -uroot -p${dbrootpwd} -e "drop database test;" >/dev/null 2>&1 
        $db_install_dir/bin/mysql -uroot -p${dbrootpwd} -e "reset master;" >/dev/null 2>&1 
                [ $? -eq 0 ] &&  echo -e "You have \033[32m$DB successfully\033[0m upgrade from \033[32m$Old_DB_version\033[0m to \033[32m$DB_version\033[0m" 
    fi  
fi 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
  • 120.
  • 121.
  • 122.
  • 123.
  • 124.
  • 125.
  • 126.
  • 127.
  • 128.
  • 129.
  • 130.
  • 131.
  • 132.
  • 133.
  • 134.
  • 135.
  • 136.
  • 137.
  • 138.
  • 139.
  • 140.
  • 141.
  • 142.
  • 143.
  • 144.
  • 145.
  • 146.
  • 147.
  • 148.
  • 149.
  • 150.
  • 151.
  • 152.
  • 153.
  • 154.
  • 155.
  • 156.
  • 157.
  • 158.
  • 159.
  • 160.
  • 161.
  • 162.
  • 163.
  • 164.
  • 165.
  • 166.
  • 167.
  • 168.
  • 169.
  • 170.
  • 171.
  • 172.
  • 173.
  • 174.
  • 175.
  • 176.
  • 177.
  • 178.
  • 179.
  • 180.
  • 181.
  • 182.
  • 183.
  • 184.
  • 185.
  • 186.
  • 187.
  • 188.
  • 189.
  • 190.
  • 191.
  • 192.
  • 193.
  • 194.
  • 195.
  • 196.
  • 197.
  • 198.
  • 199.
  • 200.
  • 201.
  • 202.
  • 203.
  • 204.
  • 205.
  • 206.
  • 207.
  • 208.
  • 209.
  • 210.
  • 211.
  • 212.
  • 213.
  • 214.
  • 215.
  • 216.
  • 217.
  • 218.
  • 219.
  • 220.
  • 221.
Thu Jul 16 12:34:49 CST 2015

关于版权

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

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

责任编辑:honglu 来源: linux运维笔记
相关推荐

2011-05-25 10:13:54

MariaDB

2021-07-09 13:58:16

MySQL数据库运维

2023-02-28 00:01:53

MySQL数据库工具

2011-05-16 09:32:33

mysql数据库备份

2013-04-25 09:53:52

MariaDB

2019-07-23 10:43:28

MariaDB数据库MySQL

2020-11-14 11:28:20

MariaDB MySQL数据库

2010-05-20 15:22:37

2013-05-17 09:56:59

MariaDB

2011-03-30 08:56:43

Zabbix数据库

2013-04-26 11:39:40

2024-04-18 09:00:00

MySQL数据库

2020-08-07 08:04:03

数据库MySQL技术

2010-05-24 17:33:43

MySQL数据库

2018-09-04 10:57:50

MySQLMariaDB数据库

2022-01-19 08:33:17

Oracle数据库AutoUpgrad

2009-03-16 13:30:55

脚本数据字典Oracle

2011-05-26 13:29:30

ORACLE数据库升级

2024-04-10 07:16:17

JDBC驱动MySQL数据库

2019-02-11 09:48:02

点赞
收藏

51CTO技术栈公众号