阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL升级从5.1.71到5.7.17

188次阅读
没有评论

共计 4871 个字符,预计需要花费 13 分钟才能阅读完成。

最近系统漏洞扫描,扫出来很多 MySQL 的漏洞,没有什么好的办法,先升级到最新版本。在梳理 MySQL 数据库信息时发现有一套 zabbix 用的 MySQL 版本是 5.1.71 的,现在的最新版本是 5.7.17,版本跨越的太大了,不知道直接升级是否可行。库的数据量大概 15G,于是就想先备份,备份完后用 mysql_upgrade 做升级。如果实在不行就再新创建一套库把数据导进去。

下面是在虚拟机上测试的升级步骤,中间也遇到了一些问题,不过好在最后还是升级成功了,说明这条路还是可行了。

操作系统版本 RHEL 6.7 旧的 MySQL 版本 5.1.71,新的 MySQL 版本 5.7.17。

1、查看旧的 MySQL 版本,并创建测试数据库和测试表

mysql> select version();
+——————+
| version()        |
+——————+
| 5.1.71-community |
+——————+
mysql> create database zx;
Query OK, 1 row affected (0.00 sec)
 
mysql> show databases;
+——————–+
| Database          |
+——————–+
| information_schema |
| mysql              |
| test              |
| zx                |
+——————–+
4 rows in set (0.00 sec)
 
mysql> use zx;
Database changed
mysql> create table test_upgrade (id int);
Query OK, 0 rows affected (0.07 sec)
……
mysql> select count(*) from test_upgrade;
+———-+
| count(*) |
+———-+
| 33554432 |
+———-+
1 row in set (0.00 sec)

现在 test_upgrade 表里有 33554432 条数据。

2、停止旧 MySQL,并备份数据

[root@rhel6 mysql]# service mysql stop
Shutting down MySQL.. SUCCESS! 
# 这里直接用 cp 备份数据
[root@rhel6 lib]# cp -R mysql mysql_bak
[root@rhel6 lib]# du -sk mysql*
250880  mysql
250880  mysql_bak

3、安装新 Msql 软件,这里下载的是编译好的解压就可以使用

[root@rhel6 ~]# tar -zxvf mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz 
# 解压完后移动到 /opt 目录下
[root@rhel6 ~]# mv mysql-5.7.17-linux-glibc2.5-x86_64 mysql-5.7.17
[root@rhel6 ~]# mv mysql-5.7.17 /opt
[root@rhel6 ~]# cd /opt
[root@rhel6 opt]# chown -R mysql:mysql mysql-5.7.17/
[root@rhel6 opt]# ll
total 4
drwxr-xr-x. 9 mysql mysql 4096 Mar 22 21:07 mysql-5.7.17

4、修改 my.cnf

主要修改 basedir 参数:

[root@rhel6 opt]# vi /etc/my.cnf
basedir=/opt/mysql-5.7.17

5、启动新 MySQL

[root@rhel6 mysql-5.7.17]# ./bin/mysqld_safe &

1)启动报错 1:

2017-03-22T13:12:39.131998Z 0 [ERROR] InnoDB: The Auto-extending innodb_system data file ‘./ibdata1’ is of a different size 640 pages (rounded down to MB) than specified in the .cnf file: initial 768 pages, max 0 (relevant if non-zero) pages!2017-03-22T13:12:39.132028Z 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error
2017-03-22T13:12:39.733953Z 0 [ERROR] Plugin ‘InnoDB’ init function returned error.
2017-03-22T13:12:39.733986Z 0 [ERROR] Plugin ‘InnoDB’ registration as a STORAGE ENGINE failed.
2017-03-22T13:12:39.733994Z 0 [ERROR] Failed to initialize plugins.
2017-03-22T13:12:39.734000Z 0 [ERROR] Aborting

解决方法在 my.cnf 中的 [mysqld] 部分添加如下参数

innodb_data_file_path = ibdata1:10M:autoextend

再次启动

2)启动报错 2:

2017-03-22T13:16:03.374717Z 0 [ERROR] unknown option ‘–skip-locking’
2017-03-22T13:16:03.374735Z 0 [ERROR] Aborting

解决方法从 my.cnf 中注释掉相关参数 skip-locking

再次启动

3)启动报错 3:

2017-03-22T13:18:20.278752Z 0 [ERROR] Fatal error: mysql.user table is damaged. Please run mysql_upgrade.
2017-03-22T13:18:20.278954Z 0 [ERROR] Aborting

5.7 无法读取 5.1 的 mysql.user 表,解决方法使用 –skip-grant-tables 参数跳过授权验证

再次启动

[root@rhel6 mysql-5.7.17]# ./bin/mysqld_safe –skip-grant-tables&

启动成功

2017-03-22T13:20:23.919677Z 0 [Note] ./bin/mysqld: ready for connections.
Version: ‘5.7.17’  socket: ‘/var/lib/mysql/mysql.sock’  port: 3306  MySQL Community Server (GPL)

6、执行升级

[root@rhel6 mysql-5.7.17]# ./bin/mysql_upgrade -uroot
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.host                                        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
zx.test_upgrade                                    OK
Upgrade process completed successfully.
Checking if update is needed.

7、重启 MySQL,并验证

[root@rhel6 mysql-5.7.17]# ./bin/mysqladmin -uroot -p shutdown
[root@rhel6 mysql-5.7.17]# ./bin/mysqld_safe &
mysql> select version();
+———–+
| version() |
+———–+
| 5.7.17    |
+———–+
1 row in set (0.00 sec)
 
mysql> show databases;
+——————–+
| Database          |
+——————–+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test              |
| zx                |
+——————–+
6 rows in set (0.00 sec)
 
mysql> select count(*) from zx.test_upgrade;
+———-+
| count(*) |
+———-+
| 33554432 |
+———-+
1 row in set (0.01 sec)

验证通过后,删除旧版本的 MySQL 软件。

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-03/142126.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计4871字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中