天天看点

MySQL升级从5.1.71到5.7.17

最近系统漏洞扫描,扫出来很多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版本,并创建测试数据库和测试表

<code>mysql&gt; </code><code>select</code> <code>version();</code>

<code>+</code><code>------------------+</code>

<code>| version()        |</code>

<code>| 5.1.71-community |</code>

<code>mysql&gt; </code><code>create</code> <code>database</code> <code>zx;</code>

<code>Query OK, 1 row affected (0.00 sec)</code>

<code>mysql&gt; show databases;</code>

<code>+</code><code>--------------------+</code>

<code>| </code><code>Database</code>           <code>|</code>

<code>| information_schema |</code>

<code>| mysql              |</code>

<code>| test               |</code>

<code>| zx                 |</code>

<code>4 </code><code>rows</code> <code>in</code> <code>set</code> <code>(0.00 sec)</code>

<code>mysql&gt; use zx;</code>

<code>Database</code> <code>changed</code>

<code>mysql&gt; </code><code>create</code> <code>table</code> <code>test_upgrade (id </code><code>int</code><code>);</code>

<code>Query OK, 0 </code><code>rows</code> <code>affected (0.07 sec)</code>

<code>......</code>

<code>mysql&gt; </code><code>select</code> <code>count</code><code>(*) </code><code>from</code> <code>test_upgrade;</code>

<code>+</code><code>----------+</code>

<code>| </code><code>count</code><code>(*) |</code>

<code>| 33554432 |</code>

<code>1 row </code><code>in</code> <code>set</code> <code>(0.00 sec)</code>

现在test_upgrade表里有33554432条数据。

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

<code>[root@rhel6 mysql]# service mysql stop</code>

<code>Shutting down MySQL.. SUCCESS! </code>

<code>#这里直接用cp备份数据</code>

<code>[root@rhel6 lib]# cp -R mysql mysql_bak</code>

<code>[root@rhel6 lib]# du -sk mysql*</code>

<code>250880  mysql</code>

<code>250880  mysql_bak</code>

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

<code>[root@rhel6 ~]# tar -zxvf mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz </code>

<code>#解压完后移动到/opt目录下</code>

<code>[root@rhel6 ~]# mv mysql-5.7.17-linux-glibc2.5-x86_64 mysql-5.7.17</code>

<code>[root@rhel6 ~]# mv mysql-5.7.17 /opt</code>

<code>[root@rhel6 ~]# cd /opt</code>

<code>[root@rhel6 opt]# chown -R mysql:mysql mysql-5.7.17/</code>

<code>[root@rhel6 opt]# ll</code>

<code>total 4</code>

<code>drwxr-xr-x. 9 mysql mysql 4096 Mar 22 21:07 mysql-5.7.17</code>

4、修改my.cnf

主要修改basedir参数:

<code>[root@rhel6 opt]# vi /etc/my.cnf</code>

<code>basedir=/opt/mysql-5.7.17</code>

5、启动新MySQL

<code>[root@rhel6 mysql-5.7.17]# ./bin/mysqld_safe &amp;</code>

1)启动报错1:

<code>2017-03-22T13:12:39.131998Z 0 [ERROR] InnoDB: The Auto-extending innodb_system data file </code><code>'./ibdata1'</code> <code>is</code> <code>of</code> <code>a different </code><code>size</code> <code>640 pages (rounded down </code><code>to</code> <code>MB) than specified </code><code>in</code> <code>the .cnf file: initial 768 pages, </code><code>max</code> <code>0 (relevant if non-zero) pages!2017-03-22T13:12:39.132028Z 0 [ERROR] InnoDB: Plugin initialization aborted </code><code>with</code> <code>error Generic error</code>

<code>2017-03-22T13:12:39.733953Z 0 [ERROR] Plugin </code><code>'InnoDB'</code> <code>init </code><code>function</code> <code>returned error.</code>

<code>2017-03-22T13:12:39.733986Z 0 [ERROR] Plugin </code><code>'InnoDB'</code> <code>registration </code><code>as</code> <code>a STORAGE ENGINE failed.</code>

<code>2017-03-22T13:12:39.733994Z 0 [ERROR] Failed </code><code>to</code> <code>initialize plugins.</code>

<code>2017-03-22T13:12:39.734000Z 0 [ERROR] Aborting</code>

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

<code>innodb_data_file_path = ibdata1:10M:autoextend</code>

再次启动

2)启动报错2:

<code>2017-03-22T13:16:03.374717Z 0 [ERROR] unknown </code><code>option</code> <code>'--skip-locking'</code>

<code>2017-03-22T13:16:03.374735Z 0 [ERROR] Aborting</code>

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

3)启动报错3:

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

<code>2017-03-22T13:18:20.278954Z 0 [ERROR] Aborting</code>

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

<code>[root@rhel6 mysql-5.7.17]# ./bin/mysqld_safe </code><code>--skip-grant-tables&amp;</code>

启动成功

<code>2017-03-22T13:20:23.919677Z 0 [Note] ./bin/mysqld: ready </code><code>for</code> <code>connections.</code>

<code>Version: </code><code>'5.7.17'</code>  <code>socket: </code><code>'/var/lib/mysql/mysql.sock'</code>  <code>port: 3306  MySQL Community Server (GPL)</code>

6、执行升级

<code>[root@rhel6 mysql-5.7.17]# ./bin/mysql_upgrade -uroot</code>

<code>Checking if </code><code>update</code> <code>is</code> <code>needed.</code>

<code>Checking server version.</code>

<code>Running queries </code><code>to</code> <code>upgrade MySQL server.</code>

<code>Checking system </code><code>database</code><code>.</code>

<code>mysql.columns_priv                                 OK</code>

<code>mysql.db                                           OK</code>

<code>mysql.engine_cost                                  OK</code>

<code>mysql.event                                        OK</code>

<code>mysql.func                                         OK</code>

<code>mysql.general_log                                  OK</code>

<code>mysql.gtid_executed                                OK</code>

<code>mysql.help_category                                OK</code>

<code>mysql.help_keyword                                 OK</code>

<code>mysql.help_relation                                OK</code>

<code>mysql.help_topic                                   OK</code>

<code>mysql.host                                         OK</code>

<code>mysql.innodb_index_stats                           OK</code>

<code>mysql.innodb_table_stats                           OK</code>

<code>mysql.ndb_binlog_index                             OK</code>

<code>mysql.plugin                                       OK</code>

<code>mysql.proc                                         OK</code>

<code>mysql.procs_priv                                   OK</code>

<code>mysql.proxies_priv                                 OK</code>

<code>mysql.server_cost                                  OK</code>

<code>mysql.servers                                      OK</code>

<code>mysql.slave_master_info                            OK</code>

<code>mysql.slave_relay_log_info                         OK</code>

<code>mysql.slave_worker_info                            OK</code>

<code>mysql.slow_log                                     OK</code>

<code>mysql.tables_priv                                  OK</code>

<code>mysql.time_zone                                    OK</code>

<code>mysql.time_zone_leap_second                        OK</code>

<code>mysql.time_zone_name                               OK</code>

<code>mysql.time_zone_transition                         OK</code>

<code>mysql.time_zone_transition_type                    OK</code>

<code>mysql.</code><code>user</code>                                         <code>OK</code>

<code>Upgrading the sys </code><code>schema</code><code>.</code>

<code>Checking databases.</code>

<code>sys.sys_config                                     OK</code>

<code>zx.test_upgrade                                    OK</code>

<code>Upgrade process completed successfully.</code>

7、重启MySQL,并验证

<code>[root@rhel6 mysql-5.7.17]# ./bin/mysqladmin -uroot -p shutdown</code>

<code>+</code><code>-----------+</code>

<code>| version() |</code>

<code>| 5.7.17    |</code>

<code>| performance_schema |</code>

<code>| sys                |</code>

<code>6 </code><code>rows</code> <code>in</code> <code>set</code> <code>(0.00 sec)</code>

<code>mysql&gt; </code><code>select</code> <code>count</code><code>(*) </code><code>from</code> <code>zx.test_upgrade;</code>

<code>1 row </code><code>in</code> <code>set</code> <code>(0.01 sec)</code>

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

      本文转自hbxztc 51CTO博客,原文链接:http://blog.51cto.com/hbxztc/1909466,如需转载请自行联系原作者