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》:

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

  《lnmp一键安装包》:

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

  PS:

 

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

  1. #!/bin/bash 
  2. # Author:  yeho <lj2007331 AT gmail.com> 
  3. # Blog:  http://blog.linuxeye.com 
  4.  
  5. Upgrade_DB() 
  6. cd $oneinstack_dir/src 
  7. [ ! -e "$db_install_dir/bin/mysql" ] && echo -e "\033[31mThe MySQL/MariaDB/Percona is not installed on your system!\033[0m " && exit 1 
  8. DB_version_tmp=`$db_install_dir/bin/mysql -V | awk '{print $5}' | awk -F, '{print $1}'
  9. DB_tmp=`echo $DB_version_tmp | awk -F'-' '{print $2}'
  10. if [ "$DB_tmp" == 'MariaDB' ];then 
  11.     public_IP=`../functions/get_public_ip.py` 
  12.     if [ "`../functions/get_ip_area.py $public_IP`" == '\u4e2d\u56fd' ];then 
  13.             FLAG_IP=CN 
  14.     fi 
  15.     [ "$FLAG_IP"x == "CN"x ] && DOWN_ADDR=http://mirrors.aliyun.com/mariadb || DOWN_ADDR=https://downloads.mariadb.org/f 
  16.     [ -d "/lib64" ] && { SYS_BIT_a=x86_64;SYS_BIT_b=x86_64; } || { SYS_BIT_a=x86;SYS_BIT_b=i686; } 
  17.     LIBC_VERSION=`getconf -a | grep GNU_LIBC_VERSION | awk '{print $NF}'
  18.     LIBC_YN=`echo "$LIBC_VERSION < 2.14" | bc` 
  19.     [ $LIBC_YN == '1' ] && GLIBC_FLAG=linux || GLIBC_FLAG=linux-glibc_214 
  20.  
  21.     DB=MariaDB 
  22.     Old_DB_version=`echo $DB_version_tmp | awk -F'-' '{print $1}'
  23. elif [ -n "$DB_tmp" -a "$DB_tmp" != 'MariaDB' ];then 
  24.     DB=Percona 
  25.     Old_DB_version=$DB_version_tmp 
  26. else 
  27.     DB=MySQL 
  28.     Old_DB_version=$DB_version_tmp 
  29. fi 
  30.  
  31. #backup 
  32. while : 
  33. do 
  34.         $db_install_dir/bin/mysql -uroot -p${dbrootpwd} -e "quit" >/dev/null 2>&1 
  35.         if [ $? -eq 0 ];then 
  36.                 break 
  37.         else 
  38.                 echo 
  39.                 read -p "Please input the root password of database: " NEW_dbrootpwd 
  40.                 $db_install_dir/bin/mysql -uroot -p${NEW_dbrootpwd} -e "quit" >/dev/null 2>&1 
  41.                 if [ $? -eq 0 ];then 
  42.                         dbrootpwd=$NEW_dbrootpwd 
  43.                         sed -i "s+^dbrootpwd.*+dbrootpwd='$dbrootpwd'+" ../options.conf 
  44.                         break 
  45.                 else 
  46.                         echo -e "\033[31m$DB root password incorrect,Please enter again! \033[0m" 
  47.                 fi 
  48.         fi 
  49.  
  50. done 
  51. echo 
  52. echo -e "\033[32mStarting $DB backup......\033[0m" 
  53. $db_install_dir/bin/mysqldump -uroot -p${dbrootpwd} --opt --all-databases > DB_all_backup_$(date +"%Y%m%d").sql 
  54. [ -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" 
  55.  
  56. #upgrade 
  57. echo 
  58. echo -e "Current $DB Version: \033[32m$Old_DB_version\033[0m" 
  59. [ -e /usr/local/lib/libtcmalloc.so ] && { je_tc_malloc=2; EXE_LINKER="-DCMAKE_EXE_LINKER_FLAGS='-ltcmalloc'"; } 
  60. [ -e /usr/local/lib/libjemalloc.so ] && { je_tc_malloc=1; EXE_LINKER="-DCMAKE_EXE_LINKER_FLAGS='-ljemalloc'"; } 
  61.  
  62. while : 
  63. do 
  64.         echo 
  65.         read -p "Please input upgrade $DB Version(example: 5.6.25): " DB_version 
  66.         if [ `echo $DB_version | awk -F. '{print $1"."$2}'` == `echo $Old_DB_version | awk -F. '{print $1"."$2}'` ]; then 
  67.         if [ "$DB" == 'MariaDB' ];then 
  68.             DB_name=mariadb-${DB_version}-${GLIBC_FLAG}-${SYS_BIT_b} 
  69.             DB_URL=$DOWN_ADDR/mariadb-${DB_version}/bintar-${GLIBC_FLAG}-$SYS_BIT_a/$DB_name.tar.gz 
  70.         elif [ "$DB" == 'Percona' ];then 
  71.             DB_name=percona-server-$DB_version 
  72.             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 
  73.         elif [ "$DB" == 'MySQL' ];then 
  74.             DB_name=mysql-$DB_version 
  75.             DB_URL=http://cdn.mysql.com/Downloads/MySQL-`echo $DB_version | awk -F. '{print $1"."$2}'`/$DB_name.tar.gz 
  76.         fi 
  77.                 [ ! -e "$DB_name.tar.gz" ] && wget -c $DB_URL > /dev/null 2>&1 
  78.          
  79.                 if [ -e "$DB_name.tar.gz" ];then 
  80.                         echo -e "Download \033[32m$DB_name.tar.gz\033[0m successfully! " 
  81.                 else 
  82.                         echo -e "\033[31mIt does not exist!\033[0m" 
  83.                 fi 
  84.                 break 
  85.         else 
  86.                 echo -e "\033[31minput error!\033[0m Please only input '\033[32m${Old_DB_version%.*}.xx' \033[0m" 
  87.         fi 
  88. done 
  89.  
  90. if [ -e "$DB_name.tar.gz" ];then 
  91.         echo -e "\033[32m$DB_name.tar.gz\033[0m [found]" 
  92.         echo "Press Ctrl+c to cancel or Press any key to continue..." 
  93.         char=`get_char` 
  94.     if [ "$DB" == 'MariaDB' ];then  
  95.         service mysqld stop 
  96.         mv ${db_install_dir}{,_old_`date +"%Y%m%d"`} 
  97.         mv ${db_data_dir}{,_old_`date +"%Y%m%d"`} 
  98.         mkdir -p $db_data_dir;chown mysql.mysql -R $db_data_dir 
  99.         tar xzf $DB_name.tar.gz 
  100.         [ ! -d "$db_install_dir" ] && mkdir -p $db_install_dir 
  101.         mv mariadb-${DB_version}-linux-${SYS_BIT_b}/* $db_install_dir 
  102.         if [ "$je_tc_malloc" == '1' ];then 
  103.                 sed -i 's@executing mysqld_safe@executing mysqld_safe\nexport LD_PRELOAD=/usr/local/lib/libjemalloc.so@' $db_install_dir/bin/mysqld_safe 
  104.         elif [ "$je_tc_malloc" == '2' ];then 
  105.                 sed -i 's@executing mysqld_safe@executing mysqld_safe\nexport LD_PRELOAD=/usr/local/lib/libtcmalloc.so@' $db_install_dir/bin/mysqld_safe 
  106.         fi 
  107.         $db_install_dir/scripts/mysql_install_db --user=mysql --basedir=$db_install_dir --datadir=$db_data_dir 
  108.         chown mysql.mysql -R $db_data_dir 
  109.         service mysqld start 
  110.         $db_install_dir/bin/mysql < DB_all_backup_$(date +"%Y%m%d").sql  
  111.         service mysqld restart 
  112.         $db_install_dir/bin/mysql -uroot -p${dbrootpwd} -e "drop database test;" >/dev/null 2>&1 
  113.         $db_install_dir/bin/mysql -uroot -p${dbrootpwd} -e "reset master;" >/dev/null 2>&1 
  114.                 [ $? -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" 
  115.     elif [ "$DB" == 'Percona' ];then 
  116.         tar zxf $DB_name.tar.gz  
  117.         cd $DB_name 
  118.         make clean 
  119.         if [ "`echo $DB_version | awk -F. '{print $1"."$2}'`" == '5.5' ];then 
  120.             cmake . -DCMAKE_INSTALL_PREFIX=$db_install_dir \ 
  121. -DMYSQL_DATADIR=$db_data_dir \ 
  122. -DSYSCONFDIR=/etc \ 
  123. -DWITH_INNOBASE_STORAGE_ENGINE=1 \ 
  124. -DWITH_PARTITION_STORAGE_ENGINE=1 \ 
  125. -DWITH_FEDERATED_STORAGE_ENGINE=1 \ 
  126. -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ 
  127. -DWITH_MYISAM_STORAGE_ENGINE=1 \ 
  128. -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ 
  129. -DWITH_READLINE=1 \ 
  130. -DENABLE_DTRACE=0 \ 
  131. -DENABLED_LOCAL_INFILE=1 \ 
  132. -DDEFAULT_CHARSET=utf8mb4 \ 
  133. -DDEFAULT_COLLATION=utf8mb4_general_ci \ 
  134. $EXE_LINKER 
  135.         else 
  136.             cmake . -DCMAKE_INSTALL_PREFIX=$db_install_dir \ 
  137. -DMYSQL_DATADIR=$db_data_dir \ 
  138. -DSYSCONFDIR=/etc \ 
  139. -DWITH_INNOBASE_STORAGE_ENGINE=1 \ 
  140. -DWITH_PARTITION_STORAGE_ENGINE=1 \ 
  141. -DWITH_FEDERATED_STORAGE_ENGINE=1 \ 
  142. -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ 
  143. -DWITH_MYISAM_STORAGE_ENGINE=1 \ 
  144. -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ 
  145. -DENABLED_LOCAL_INFILE=1 \ 
  146. -DENABLE_DTRACE=0 \ 
  147. -DDEFAULT_CHARSET=utf8mb4 \ 
  148. -DDEFAULT_COLLATION=utf8mb4_general_ci \ 
  149. $EXE_LINKER 
  150.         fi 
  151.         make -j `grep processor /proc/cpuinfo | wc -l` 
  152.         service mysqld stop 
  153.         mv ${db_install_dir}{,_old_`date +"%Y%m%d"`} 
  154.                 mv ${db_data_dir}{,_old_`date +"%Y%m%d"`} 
  155.         [ ! -d "$db_install_dir" ] && mkdir -p $db_install_dir 
  156.                 mkdir -p $db_data_dir;chown mysql.mysql -R $db_data_dir 
  157.         make install 
  158.         $db_install_dir/scripts/mysql_install_db --user=mysql --basedir=$db_install_dir --datadir=$db_data_dir 
  159.                 chown mysql.mysql -R $db_data_dir 
  160.                 service mysqld start 
  161.         $db_install_dir/bin/mysql < DB_all_backup_$(date +"%Y%m%d").sql 
  162.                 service mysqld restart 
  163.         $db_install_dir/bin/mysql -uroot -p${dbrootpwd} -e "drop database test;" >/dev/null 2>&1 
  164.         $db_install_dir/bin/mysql -uroot -p${dbrootpwd} -e "reset master;" >/dev/null 2>&1 
  165.                 [ $? -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" 
  166.     elif [ "$DB" == 'MySQL' ];then 
  167.         tar zxf $DB_name.tar.gz 
  168.                 cd $DB_name 
  169.                 make clean 
  170.                 if [ "`echo $DB_version | awk -F. '{print $1"."$2}'`" == '5.5' ];then 
  171.                         cmake . -DCMAKE_INSTALL_PREFIX=$db_install_dir \ 
  172. -DMYSQL_DATADIR=$db_data_dir \ 
  173. -DSYSCONFDIR=/etc \ 
  174. -DWITH_INNOBASE_STORAGE_ENGINE=1 \ 
  175. -DWITH_PARTITION_STORAGE_ENGINE=1 \ 
  176. -DWITH_FEDERATED_STORAGE_ENGINE=1 \ 
  177. -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ 
  178. -DWITH_MYISAM_STORAGE_ENGINE=1 \ 
  179. -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ 
  180. -DWITH_READLINE=1 \ 
  181. -DENABLED_LOCAL_INFILE=1 \ 
  182. -DENABLE_DTRACE=0 \ 
  183. -DDEFAULT_CHARSET=utf8mb4 \ 
  184. -DDEFAULT_COLLATION=utf8mb4_general_ci \ 
  185. -DWITH_EMBEDDED_SERVER=1 \ 
  186. $EXE_LINKER 
  187.                 else 
  188.                         cmake . -DCMAKE_INSTALL_PREFIX=$db_install_dir \ 
  189. -DMYSQL_DATADIR=$db_data_dir \ 
  190. -DSYSCONFDIR=/etc \ 
  191. -DWITH_INNOBASE_STORAGE_ENGINE=1 \ 
  192. -DWITH_PARTITION_STORAGE_ENGINE=1 \ 
  193. -DWITH_FEDERATED_STORAGE_ENGINE=1 \ 
  194. -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ 
  195. -DWITH_MYISAM_STORAGE_ENGINE=1 \ 
  196. -DENABLED_LOCAL_INFILE=1 \ 
  197. -DENABLE_DTRACE=0 \ 
  198. -DDEFAULT_CHARSET=utf8mb4 \ 
  199. -DDEFAULT_COLLATION=utf8mb4_general_ci \ 
  200. -DWITH_EMBEDDED_SERVER=1 \ 
  201. $EXE_LINKER 
  202.                 fi 
  203.         make -j `grep processor /proc/cpuinfo | wc -l` 
  204.         service mysqld stop 
  205.                 mv ${db_install_dir}{,_old_`date +"%Y%m%d"`} 
  206.                 mv ${db_data_dir}{,_old_`date +"%Y%m%d"`} 
  207.                 [ ! -d "$db_install_dir" ] && mkdir -p $db_install_dir 
  208.                 mkdir -p $db_data_dir;chown mysql.mysql -R $db_data_dir 
  209.                 make install 
  210.         $db_install_dir/scripts/mysql_install_db --user=mysql --basedir=$db_install_dir --datadir=$db_data_dir 
  211.                 chown mysql.mysql -R $db_data_dir 
  212.                 service mysqld start 
  213.                 $db_install_dir/bin/mysql < DB_all_backup_$(date +"%Y%m%d").sql 
  214.                 service mysqld restart 
  215.         $db_install_dir/bin/mysql -uroot -p${dbrootpwd} -e "drop database test;" >/dev/null 2>&1 
  216.         $db_install_dir/bin/mysql -uroot -p${dbrootpwd} -e "reset master;" >/dev/null 2>&1 
  217.                 [ $? -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" 
  218.     fi  
  219. fi 
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数据库备份

2019-07-23 10:43:28

MariaDB数据库MySQL

2013-04-25 09:53:52

MariaDB

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数据库

2010-05-24 17:33:43

MySQL数据库

2020-08-07 08:04:03

数据库MySQL技术

2013-04-26 11:39:40

2024-04-18 09:00:00

MySQL数据库

2022-01-19 08:33:17

Oracle数据库AutoUpgrad

2011-05-26 13:29:30

ORACLE数据库升级

2024-04-10 07:16:17

JDBC驱动MySQL数据库

2018-09-04 10:57:50

MySQLMariaDB数据库

2019-02-11 09:48:02

2009-03-16 13:30:55

脚本数据字典Oracle
点赞
收藏

51CTO技术栈公众号