MySQL 版本号由三个数字和可选后缀组成,形式 mysql-x.y.z-suffix。比如 mysql-5.7.21 或者 mysql-5.7.34。
- x(5)这位是大版本
- y(7)这位是小版本,大版本小版本组合成 5.7 就是一个发行版
- 最后一位是bugfix release版本,从1逐渐增加,到21,到34,到更大
- 可选后缀,有m1、m2、mN、rc等等,我们使用没有后缀的版本 GA (General Available)
MySQL升级有logical升级、in-place升级等方式。
一、logical 升级
适合不同操作系统的MySQL升级,大版本之间的升级。使用mysqldump 或 mydumper 导入导出数据,实现版本的升级。特点:可以跨操作系统,跨大版本;但,升级速度慢,容易出现乱码等问题。
二、in-place升级
适合小版本的升级(5.7.21 -> 5.7.34)。即关闭当前的MySQL,替换当前的二进制文件或包,在现有的数据目录上重启MySQL,并运行mysql_upgrade。in-place升级不改变数据文件,升级速度快。但是,这不可以跨操作系统,不可以跨大版本(5.5 -> 5.7)。
我们把 MySQL01 那篇文章里面安装的 mysql-5.7.21 升级到 mysql-5.7.34。
创建测试数据,备份数据库
create database db1;
use db1;
create table t1 ( id int, name varchar(10), primary key (id) );
insert into t1 values(3, 'zhang3');
insert into t1 values(4, 'li4');
insert into t1 values(5, 'wang5');
select * from t1;
mysqldump -u root -p --all-databases > ./all.sql
关闭数据库
mysql -u root -p --execute="SET GLOBAL innodb_fast_shutdown=0"
mysqladmin -u root -p shutdown
ps -ef | grep mysql
上传 mysql-5.7.34 二进制安装包,并解压缩。
cd /usr/local/
tar xvzf /data/mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz
tree /usr/local -L 1
/usr/local
├── bin
├── etc
├── games
├── include
├── lib
├── lib64
├── libexec
├── mysql -> /usr/local/mysql-5.7.21-linux-glibc2.12-x86_64/
├── mysql-5.7.21-linux-glibc2.12-x86_64
├── mysql-5.7.34-linux-glibc2.12-x86_64
├── sbin
├── share
└── src
修改目录权限为mysql,把软连接指向 mysql-5.7.34 目录。
chown -R mysql:mysql mysql-5.7.34-linux-glibc2.12-x86_64/
rm mysql
ln -s /usr/local/mysql-5.7.34-linux-glibc2.12-x86_64/ mysql
tree /usr/local/ -L 1
/usr/local/
├── bin
├── etc
├── games
├── include
├── lib
├── lib64
├── libexec
├── mysql -> /usr/local/mysql-5.7.34-linux-glibc2.12-x86_64/
├── mysql-5.7.21-linux-glibc2.12-x86_64
├── mysql-5.7.34-linux-glibc2.12-x86_64
├── sbin
├── share
└── src
启动数据库,登录数据库并验证。
service mysqld start
mysql -u root -p
use db1;
select * from t1;
+----+--------+
| id | name |
+----+--------+
| 3 | zhang3 |
| 4 | li4 |
| 5 | wang5 |
+----+--------+
检测兼容性
mysql_upgrade -uroot -p
Enter password:
Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
Checking system database.
mysql.columns_priv OK
mysql.db OK
mysql.engine_cost OK
mysql.event OK
mysql.func OK
mysql.general_log OK
mysql.gtid_executed OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.innodb_index_stats OK
mysql.innodb_table_stats OK
mysql.ndb_binlog_index OK
mysql.plugin OK
mysql.proc OK
mysql.procs_priv OK
mysql.proxies_priv OK
mysql.server_cost OK
mysql.servers OK
mysql.slave_master_info OK
mysql.slave_relay_log_info OK
mysql.slave_worker_info OK
mysql.slow_log OK
mysql.tables_priv OK
mysql.time_zone OK
mysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
Found outdated sys schema version 1.5.1.
Upgrading the sys schema.
Checking databases.
db1.t1 OK
sys.sys_config OK
Upgrade process completed successfully.
Checking if update is needed.
重启数据库
service mysqld stop
service mysqld start