1.备份原来的数据库
可以用Mysqldump导出来,空间足够的话,也可以用冷备份的方法
set global innodb_fast_shutdown=0;
然后关闭mysql数据库,拷贝一份
例: cp -rp mysql5_data3306 mysql5_data3306_before_upgrade
2.先升级到5.6
cd /apps/svr
tar xvf mysql-5.6.31-linux-glibc2.5-x86_64.tar.gz
ln -s mysql-5.6.31-linux-glibc2.5-x86_64 mysql56
cp /apps/conf/mysql/mysql5_3306.cnf /apps/conf/mysql/mysql5_3306.cnf.bak
可使用原来的配置文件
vi /apps/conf/mysql/mysql5_3306.cnf
将 svr/mysql5 都替换为svr/mysql56
对于主从,先升级从库,升级前 打开 skip-slave-start
/apps/svr/mysql56/bin/mysqld_safe --defaults-file=/apps/conf/mysql/mysql5_3306.cnf &
/apps/svr/mysql56/bin/mysql_upgrade -uroot -p$pass -S $socketfile
然后关闭重启,看mysql的error log有无报错
3.升级到5.7
set global innodb_fast_shutdown=0;
关闭mysql
cd /apps/svr
tar xvf mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz
ln -s mysql-5.7.17-linux-glibc2.5-x86_64 mysql57
使用mysql5.7的模板配置文件mysql57_3306.cnf ,需要修改的地方
以下参数根据原来的修改
server-id
read_only
relay_log_purge
innodb_buffer_pool_size
innodb_buffer_pool_instances
对于主从,先升级从库,升级前 打开 skip-slave-start
以下先不启动
gtid-mode=on 改为OFF
修改
mv mysql5_data3306 mysql57_data3306
修改 数据文件目录中log/mysql-bin.index 中的信息 mysql5_data3306 为 mysql57_data3306
如果数据库中包括有时间日期的列(应该大部分的库都有),还需要打开以下参数(强烈建议,否则升级的时候需要拷表,对于数据量大的表非常耗时)
avoid_temporal_upgrade=true
使用以下脚本启动
cat /apps/sh/mysql57_3306.sh
#!/bin/sh
#SH_DIR=$(dirname $(which $0))
#. $SH_DIR/app_env.sh
MYSQL_BASE=/apps/svr/mysql57
MYSQL_CONF=/apps/conf/mysql
export PATH=$MYSQL_BASE/bin:/usr/sbin:/usr/bin:/sbin:/bin
export LD_LIBRARY_PATH=$MYSQL_BASE/lib
if [ "$1" = "stop" ] ; then
$MYSQL_BASE/bin/mysqladmin --defaults-file=$MYSQL_CONF/mysql57_3306.cnf -uroot -p shutdown
elif [ "$1" = "restart" ]; then
$MYSQL_BASE/bin/mysqladmin --defaults-file=$MYSQL_CONF/mysql57_3306.cnf -uroot -p shutdown
cd /apps/svr/mysql57 && ./bin/mysqld_safe --defaults-file=$MYSQL_CONF/mysql57_3306.cnf &
elif [ "$1" = "start" ]; then
cd /apps/svr/mysql57 && ./bin/mysqld_safe --defaults-file=$MYSQL_CONF/mysql57_3306.cnf &
else
echo "usage: $0 start|stop|restart"
fi
/apps/sh/mysql57_3306.sh start
/apps/svr/mysql57/bin/mysql_upgrade -uroot -p$pass -S $socketfile
升级完成,没有报错,重启,检查errorlog看有无错误