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版本,並建立測試資料庫和測試表
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軟體。
相關文章
- 【MSSQL】MSSQL 從Express版本升級到Enterprise版本SQLExpress
- PHP版本升級:從php7.1升級到php7.2PHP
- 從CentOS 7.0升級到7.7版本CentOS
- Cocospod 升級到指定版本
- Mac 升級 PHP 到 7.4 版本MacPHP
- MySQL 5.7 升級到 8.0MySql
- 如何將 Ubuntu 版本升級到新版本Ubuntu
- mongodb單機從3.2升級到4.0.4升級MongoDB
- Docker升級MySQL版本的快速方法DockerMySql
- MySQL 5.6.47升級到5.7.20(一)MySql
- MongoDB升級--從3.4到3.6MongoDB
- 升級 ubuntu,從 18.04 到 22.04Ubuntu
- 記一次mysql小版本升級MySql
- Centos7 升級openssh到最高版本CentOS
- ABP Framework 手動升級指南:從6.0.1升級到7.0.0Framework
- 應用升級SpringCloud版本時的注意事項(Dalston升級到Edgware)SpringGCCloud
- npm node升級到最新版本NPM
- MacOs 升級 Git 到最新版本MacGit
- 靜默升級oracle 11g (從11.2.0.1升級到11.2.0.4)Oracle
- gcc版本升級GC
- node 版本升級
- python版本升級Python
- NiFi版本升級Nifi
- 寶塔皮膚版本升級實戰教程—升級寶塔皮膚到最新版本
- PHP study 升級預設的MYSQL版本 為5.7PHPMySql
- mysql57小版本升級操作指南MySql
- ubuntu18.4 升級Python到3.8版本UbuntuPython
- CentOS 6.5下快速安裝MySQL 5.7.17CentOSMySql
- 【Azure Developer】com.azure:azure-identity jar包版本從1.2.0 升級到1.12.2 版本之後報錯DeveloperIDEJAR
- 技術分享 | 如何優雅地在 Windows 上從 MySQL 5.6 升級到 5.7WindowsMySql
- 從10.2.0.1升級到10.2.0.5操作實驗(下)
- 如何從Angular 5 App升級到Angular 6AngularAPP
- 從JDK8升級到JDK17JDK
- SMSSDK從2.x版本升級至3.x版本指導
- MySQL5.5升級到MySQL5.7踩坑日記MySql
- centos7 openssl升級版本到OpenSSL 1.1.1nCentOS
- GitLab跨版本升級Gitlab
- Homestead 升級PHP版本PHP
- win7如何升級到win10系統版本 win7免費升級到win10Win7Win10