测试环境:Centos6.x

rpm安装

https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.33.tar.gz

# centos6的rpm包
# yum -y install numactl-devel
# bundle包含了所有rpm包
https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.33-1.el6.x86_64.rpm-bundle.tar
# 解压安装
tar -xvf mysql-5.7.33-1.el6.x86_64.rpm-bundle.tar
# yum可以自动安装基础依赖包
yum install *rpm
# rpm -ivh *rpm

# 查看安装包文件列表
rpm -qpl mysql-community-server-5.7.33-1.el6.x86_64.rpm

二进制安装

建议二进制安装

https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz

# 确定版本在当前系统是否可用
# strings /lib64/libc.so.6 | grep GLIBC
# GLIBC_2.12 对应 glibc2.12 即可在当前系统可用
(mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz)
MD5: 0884a3562e89fd8acc82c37d3b52ad3b | Signature

# Boost: 从 MySQL 5.7.5 开始 Boost 库是必需的
# mysql 源码中用到了 C++的 Boost 库,要求必须安装 boost1.59.0 或以上版本。
# 自带boost库就不需要从网上单独下载了
# cmake . -LH | grep WITH_BOOST
# 增加参数即可:-DWITH_BOOST=boost
(mysql-boost-5.7.33.tar.gz)	
MD5: ccffd7f0f488972b084c1cce42bfba64 | Signature

(mysql-8.0.23-1.el6.x86_64.rpm-bundle.tar) 
MD5: 52d4593357a69c32ccae2b288c70695b | Signature

(mysql-5.7.33-1.el6.x86_64.rpm-bundle.tar)  
MD5: 82f5932f75458d3076864655ef065691 | Signature

编译安装

https://dev.mysql.com/downloads/mysql/

依赖环境

yum -y install gcc gcc-c++ cmake bison ncurses-devel.`uname -m`

编译

# 5.3G	mysql-5.7.33 源码编译包大小
tar xzf mysql-boost-5.7.33.tar.gz && cd mysql-5.7.33
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql57 \
-DMYSQL_DATADIR=/usr/local/mysql57/data/ \
-DDEFAULT_CHARSET=utf8 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_BOOST=boost \
-DEXTRA_CHARSETS=big5,ascii,gb2312,gbk,utf8,latin1
make && make install
[ ! -L /usr/local/mysql -o ! -d /usr/local/mysql ] && ln -s /usr/local/mysql57 /usr/local/mysql

echo "PATH=\$PATH:\$HOME/bin:/usr/local/mysql/bin" >> /etc/profile
echo "export PATH" >> /etc/profile
source /etc/profile

# 初始化
id -u mysql &>/dev/null || useradd mysql -M -s /bin/false
# cd /usr/local/mysql3308 && ./scripts/mysql_install_db --defaults-file=/usr/local/mysql3308/my.cnf --user=mysql --datadir=/data2/mysql_data/3308/data
# 5.7版本命令:mysqld --defaults-file=/usr/local/mysql/my.cnf --initialize --user=mysql
cd /usr/local/mysql57 && /usr/local/mysql57/scripts/mysql_install_db --user=mysql --datadir=/data/mysql_data/data

# 配置文件参考线上配置文件
#cp -f support-files/my-medium.cnf /etc/my.cnf
vim /etc/my.cnf

# mkdir -pv /backup/mysql_log/{log_bin,slow_log}
# chown -R mysql:root /backup/mysql_log
# chmod 750 /backup/mysql_log

install -c -o root -g root -m 744 support-files/mysql.server /etc/init.d/mysqld57
chkconfig --level 345 mysqld57 on
/etc/init.d/mysqld57 start

# 授权    
netstat -ntlp|grep 3306 && mysql -uroot -h127.0.0.1 << EOF
UPDATE mysql.user SET Password=PASSWORD('123456') WHERE User='root';
DELETE FROM mysql.user WHERE User='';
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('127.0.0.1');
DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%';
DROP DATABASE test;
FLUSH PRIVILEGES;
EOF

5.6升级到5.7

删除无用参数

2021-01-27T09:14:12.740737Z 0 [ERROR] unknown variable 'innodb_additional_mem_pool_size=16M'
2021-01-27T09:16:26.483991Z 0 [ERROR] unknown variable 'innodb_use_sys_malloc=1'

启动

# [ERROR] Native table 'performance_schem # 升级前正常报错
# Table mysql/innodb_table_stats has length mismatch in the column name table_name.  Please run mysql_upgrade # 提示升级

升级

mysql_upgrade --version
mysql_upgrade

5.5升级到5.7

https://dev.mysql.com/doc/refman/5.7/en/upgrading.html

The upgrade path is MySQL 5.5 -> MySQL 5.6 -> MySQL 5.7

升级流程

# 1. 检查当前版本是否是5.6, 停库&备份datadir目录
/usr/local/mysql/bin/mysql --version
# 或者登陆到数据库中检查
mysql -e "\s;select version();"

# 关闭数据库
/etc/init.d/mysqld stop
# 备份
# tar -czvf xxxx.tar.gz /data/mysql_data/

# 2. 下载5.7版本包&解压到/usr/local/, 安装libnuma.so依赖
tar -xf mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
yum install -y numactl-devel.x86_64

# 3. 确认mysql已停掉,修改配置并切换mysql源码包
ps -ef |grep mysql

cd /usr/local/ \
&& mv mysql mysql56 \
&& mv mysql-5.7.33-linux-glibc2.12-x86_64/ mysql

# cp mysql56/my.cnf mysql/
# vim /etc/my.cnf 或者 vim mysql/my.cnf
# 注释这两个参数
# innodb_additional_mem_pool_size=16M
# innodb_use_sys_malloc=1

# 4. 启动5.7版本mysql
/etc/init.d/mysqld start
ps -ef | grep mysql

# 5. 检查升级版本并执行升级
# 注:检查版本时,检查你要升级版本的mysql之前的端口对应的版本是否与你将要升级的版本 对应。
# 即,比如,线上有几个端口,3306,3307,3308, 3306 mysql版本是5.5, 3307 mysql版本是 5.6, 3308 版本是 5.7 ,
# 这时,你可能打算升级的是3307对应的5.6版本,所以升级时,不要搞错了升级的版本,还有启动脚本 /etc/init.d/mydqld ,
# 配置文件不要搞错了。 这种情形就是在一台机器存在多实例时,需要注意这个问题。
# 升级前检测启动的数据库版本
mysql -e "\s;select version();"

# 确定mysql_upgrade的版本
./mysql/bin/mysql_upgrade --version
# 确定数据库和mysql_upgrade版本后,开始升级版本
./mysql/bin/mysql_upgrade -uxxx -pxxxxxx -h127.0.0.1 -P3306

# 6. 检查版本是否升级成功,重启一次保证升级参数等生效
mysql -e "\s;select version();"

# 重启
/etc/init.d/mysqld restart