介绍
随着互联网技术不停的发展,一些应用程序在使用的过程中,其中的漏洞就会慢慢的被发现。不法分子就会利用这些漏洞对我们的应用程序进行攻击、获取企业的信息等。
其中数据库服务器是企业应用中很重要的一环,其中保存着企业,用户的重要数据库。所以对于数据库的漏洞更加应该重视。
为了应该组件中出现的漏洞,组建的厂商会不定期的发布新的版本,去修复老版本中的bug和漏洞。我们只需下载新版本的程序升级即可。
mysql数据库跨版本升级
由于以前的项目使用的数据库是mysql 5.6.X版本,随着业务的发展,发现5.6.X版本中已经无法满足业务的需要,比如,5.6.X中许多函数就无法使用。而且在实际生产中,安全厂商对5.6.X进行漏洞扫描,5.6.X存在漏洞。
考虑到上面的两个原因,这里决定将mysql 5.6跨版本升级到mysql 5.7
-
下载mysql 5.7
mysql的安装文件从官方网站下载,官网地址:https://downloads.mysql.com/archives/community/ -
查看当前mysql版本
select version();
或
mysql -V
- 查看mysql 5.6的sql_mode参数
mysql> show variables like "sql_mode";
+---------------+--------------------------------------------+
| Variable_name | Value |
+---------------+--------------------------------------------+
| sql_mode | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+---------------+--------------------------------------------+
1 row in set (0.07 sec)
- 解压mysql 5.7安装文件
在mysql服务器上新建一个目录,用于报错mysql 5.7安装包解压文件
# cd /opt
# mkdir /opt/mysql5.7
# tar xf mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar -C mysql5.7
mysql5.7的压缩文件会解压出10个rpm文件
[root@server opt]# ll mysql5.7
总用量 533048
-rw-r--r-- 1 7155 31415 27768112 12月 19 2019 mysql-community-client-5.7.29-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 318972 12月 19 2019 mysql-community-common-5.7.29-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 4085448 12月 19 2019 mysql-community-devel-5.7.29-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 47521016 12月 19 2019 mysql-community-embedded-5.7.29-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 23354680 12月 19 2019 mysql-community-embedded-compat-5.7.29-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 131015588 12月 19 2019 mysql-community-embedded-devel-5.7.29-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 2596180 12月 19 2019 mysql-community-libs-5.7.29-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 1353080 12月 19 2019 mysql-community-libs-compat-5.7.29-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 183618644 12月 19 2019 mysql-community-server-5.7.29-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 124193252 12月 19 2019 mysql-community-test-5.7.29-1.el7.x86_64.rpm
- 备份数据库
为防止升级出现故障以及人为的错误操作,升级前对数据库进行备份。
# mysqldump -uroot -p --add-drop-database --event --routines -A -Y -B >/opt/mysql5.6/mysql_all_backup.sql
- 关闭缓存
SQL> set global innodb_fast_shutdown=0
关闭此缓存的原因是为了避免版本不通而导致的缓存差异
- 关闭mysql 5.6数据库
# systemctl stop mysql
注意:测试发现,升级时不关闭数据库也可以,升级完成后数据库会被重新启动,若升级时关闭了数据库,升级完成后记得重新启动数据
- 升级mysql
升级mysql比较简单,直接使用rpm -Uvh 进行升级即可,
在升级时需要注意,mysql 5.7的安装包需要依赖perl-JSON组件,所以需要安装此组件,使用yum源安装即可
# yum install perl-JSON
perl-JSON依赖包安装完成后使用命令进行升级mysql
[root@server mysql5.7]# rpm -Uvh mysql-community-*.rpm
警告:mysql-community-client-5.7.29-1.el7.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:mysql-community-common-5.7.29-1.e################################# [ 6%]
2:mysql-community-libs-5.7.29-1.el7################################# [ 12%]
3:mysql-community-client-5.7.29-1.e################################# [ 18%]
4:mysql-community-server-5.7.29-1.e警告:/etc/my.cnf 已建立为 /etc/my.cnf.rpmnew
################################# [ 24%]
5:mysql-community-devel-5.7.29-1.el################################# [ 29%]
6:mysql-community-embedded-5.7.29-1################################# [ 35%]
7:mysql-community-embedded-devel-5.################################# [ 41%]
8:mysql-community-test-5.7.29-1.el7################################# [ 47%]
9:mysql-community-libs-compat-5.7.2################################# [ 53%]
10:mysql-community-embedded-compat-5################################# [ 59%]
正在清理/删除...
11:MySQL-test-5.6.48-1.el7 ################################# [ 65%]
12:MySQL-embedded-5.6.48-1.el7 ################################# [ 71%]
13:MySQL-devel-5.6.48-1.el7 ################################# [ 76%]
14:MySQL-client-5.6.48-1.el7 ################################# [ 82%]
15:MySQL-server-5.6.48-1.el7 ################################# [ 88%]
16:MySQL-shared-compat-5.6.48-1.el7 ################################# [ 94%]
17:MySQL-shared-5.6.48-1.el7 ################################# [100%]
升级完成后,启动数据库,使用命令检查mysql当前版本
[root@server mysql5.7]# systemctl start mysqld
[root@server mysql5.7]# mysql -V
mysql Ver 14.14 Distrib 5.7.29, for Linux (x86_64) using EditLine wrapper
- 使用mysql_upgrade检查当前版本与升级版本的不兼容性
检查的过程如下,
[root@server mysql5.7]# mysql upgrade -uroot -p111111 --force
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1049 (42000): Unknown database 'upgrade'
[root@server mysql5.7]# mysql_upgrade -uroot -p111111
mysql_upgrade: [Warning] Using a password on the command line interface can be insecure.
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
Upgrading the sys schema.
Checking databases.
sys.sys_config OK
up.acct_loan_record OK
up.acct_loan_record_app OK
up.acct_loan_record_sync OK
up.accumulation_fund OK
up.act_ge_bytearray OK
up.act_ge_property OK
up.act_hi_actinst OK
up.act_hi_attachment OK
up.act_hi_comment OK
up.act_hi_detail OK
up.act_hi_identitylink OK
up.act_hi_procinst OK
up.act_hi_taskinst OK
up.act_hi_varinst OK
up.act_re_deployment OK
up.act_re_model OK
up.act_re_procdef OK
up.act_ru_event_subscr OK
up.act_ru_execution OK
up.act_ru_identitylink OK
up.act_ru_job OK
up.act_ru_task OK
up.act_ru_variable OK
up.active_award_record OK
up.active_award_record0917 OK
up.active_cookie_info OK
up.active_cookie_info0917 OK
up.active_mch_transfer_serial0917 OK
up.active_transfer_serial OK
up.active_transfer_serial0917 OK
up.activity_award_level OK
up.activity_award_pool OK
up.activity_award_pool0917 OK
up.activity_award_pool_20200609 OK
up.activity_award_pool_new OK
up.activity_award_pool_temp OK
......
Upgrade process completed successfully.
Checking if update is needed.
mysql_upgrade检查完成后要重启mysql数据库
[root@server mysql5.7]# systemctl restart mysqld
若升级完后,为使用mysql_upgrade进程检查,则在使用时可能会报错,这里给出一个遇到的错误:
在使用查询mysql参数配置
SQL> show variables like "sql_mode";
若未使用mysql_upgrade进行检查,则会报如下错误
ERROR 1146 (42S02): Table 'performance_schema.session_variables' doesn't ...
使用mysql_upgrade升级后问题解决
总结:
到此mysql升级完成,其中需要注意:
1、升级前一定要备份数据库。
2、升级完成后,使用mysql_upgrade进行新旧版本数据库兼容性的检查。