Contents
6.2. 02.MySQL版本升级¶
6.2.1. 升级方式¶
·In-Place Upgrade,直接替换安装目录和my.cnf文件,利用mysql_upgrade脚本完成系统表升级,一般适用于跨小版本的升级
·Logical Upgrade,利用mysqldump直接导出SQL文件,然后导入到新库中,相对安全,并能整理表中碎片,时间上消耗很大,效率较低
6.2.2. 流程¶
In-Place Upgrade方式¶
第一步,将innodb_fast_shutdown参数设置为0
set global innodb_fast_shutdown=0;
show variables like '%fast%';
innodb_fast_shutdown有0,1,2三个值
为0时,MySQL关闭时,InnoDB需要完成所有full purge和merge insert buffer操作,这个过程要一定时间,有时甚至会花上几个小时
为1时,默认,MySQL关闭时,不完成full purge和merge insert buffer操作,但是缓冲池中的脏页还是会写到磁盘中
为2时,什么也不做,仅将日志写入日志文件中
第二步,关闭MySQL服务
mysqladmin -uroot -proot123 shutdown
第三步,替换MySQL安装文件
执行unlink mysql命令
解压新版本软件包,重新做连接并赋予mysql权限
第四步,替换配置文件my.cnf,并启动MySQL实例
在启动过程中加上--skip-grant-tables和--skip-networking参数,保证没有任何应用连接,让升级更安全
/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --skip-grant-tables --skip-networking &
第五步,升级系统表数据字典信息
/usr/local/mysql/bin/mysql_upgrade
第六步,正常启动MySQL服务
Logical Upgrade方式¶
第一步,mysqldump导出数据
/usr/local/mysql/bin/mysqldump -uroot -proot123 --single-transaction --master-data=2 -A >all.sql
第二步,将旧版本MySQL数据库关闭且备份原来的数据目录
建立新版本的数据目录并授权
/usr/local/mysql/bin/mysqladmin -uroot -proot123 shutdown
mv /data/mysql /data/mysql_bak
mkdir -p /data/mysql
chown mysql:mysql -R /data
第三步,替换MySQL安装文件
执行unlink mysql命令
解压新版本软件包,重新做连接并赋予mysql权限
第四步,替换my.cnf,并初始化数据库
/usr/local/mysql/bin/mysqld --default-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql --initialize
第五步,启动新版本MySQL
启动过程中添加--skip-grant-tables 和 --skip-networking参数,保证没有任何应用连接,让升级更安全
/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --skip-grant-tables --skip-networking &
第六步,导入之前导出的文件到数据库
/usr/local/mysql/bin/mysql < all.sql
第七步,需要升级数据字典信息
/usr/local/mysql/bin/mysql_upgrade
第八步,正常启动MySQL数据库
关闭数据库,重新正常启动数据库
6.2.3. 参考¶
阿里云MySQL及Redis灵异断连现象:安全组静默丢包解决方法¶
wait_timeout、interactive_timeout两个超时参数只对闲置的数据库连接生效
对于正在执行sql的连接,最大执行时间受max_execution_time限制
为防止在超过一定时间后连接被回收,在内核层面可这样设置
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3
net.ipv3.tcp_keepalive_time = 1800
解释:tcp连接闲置1800s后,每隔30s给对方发一个ack包,最多发3次
若在此期间对方回复,则计时器重置,再等待1800s。