热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linuxmysql5.5升级至mysql5.7的步骤与踩到的坑

这篇文章主要介绍了linuxmysql5.5升级至mysql5.7的详细步骤,后面脚本之家小编为大家整理了多个补充,大家可以参考一下

linux mysql5.5升级至mysql5.7

下面先分享一个简单的升级mysql的步骤,后面小编为大家整理了多个补充,大家可以参考一下。

1.下载mysql5.7.32

官方下载地址 https://dev.mysql.com/downloads/mysql/

解压

tar xvf mysql.tar.gz mysql/

2. 进入旧的mysql的bin目录下导出mysql的数据

./mysql -uroot -pxxxx -h127.0.0.1 -P3306

3. 进入新的mysql根目录下创建存放数据的data目录

mkdir data

4. 对于刚解压的新数据库,首先执行初始化命令

cd bin
./mysql_install_db --basedir=../ --datadir=../data

PS: 以上升级是在Cent OS上的,但是在中标麒麟我升级的时候,发现不认识上面的语句,需要替换成下面这个初始化语句

./mysqld --defaults-file=../my.cnf --basedir=../ --datadir=../data --user=root --initialize

5. 设置跳过密码登录

在my.cnf 中的[mysqld]中添加skip-grant-tables
my.cnf 为数据库的配置文件

6. 启动服务

./mysqld --defaults-file=../my.cnf --basedir=../ --datadir=../data --user=root

7. 设置密码

在新的命令行窗口登录mysql

./mysql -uroot
use mysql;
update mysql.user set authentication_string=password('xxxx') where user='root';

8. 停止服务

注释掉配置文件中的skip-grant-tables

9. 启动服务

./mysqld --defaults-file=../my.cnf --basedir=../ --datadir=../data --user=root

10. 新命令行登录

./mysql -uroot -pxxxx
use mysql;

这个时候:不管运行任何命令,总是提示这个 You must reset your password using ALTER USER statement before executing this statement.
这时执行下面的语句

SET PASSWORD = PASSWORD('xxxx');

11. 设置其他ip可以连接mysql

use mysql;
grant all privileges on *.* to "root"@"%" identified by "xxxx";

12. 导入历史数据

cd bin
./mysql -uroot -pxxxx -h127.0.0.1 -P3306

13. 执行更新

cd bin
./mysql_upgrade

14. 升级后可能出现查询语句出现报错的情况,可执行下面的语句

set @@sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
set sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

下面是其他网友的补充

MySQL从5.5升级到5.7

最近有个任务将MySQL从5.5版本升级到5.7,没升级过数据库,只能摸索的前进。上网找了一堆资料。目测看只有两种升级方式

1.升级方式

1.Logical Upgrade(逻辑升级):利用mysqldump来直接导出SQL文件,然后起一个新的MySQL5.7库,将导出的SQL文件导入到新库中,当然如果采用这种方式的话建议不要用mysqldump而使用mydumper.因为我们公司的数据量很大所以没有采用这个方法来处理。

2.In-Place Upgrade:这个升级方法简单快速,就是直接替换原来的MySQL的安装目录和/etc/my.cnf配置文件,利用mysql_upgrade脚本来完成系统表的升级。

2.环境介绍

我们的mysql集群采用的是Atlas读写分离,mysql-proxy下有4台数据库服务器:

master: 172.16.100.1

slave1:172.16.100.2

slave2:172.16.100.3

slave3:172.16.100.4

当前数据库版本:”5.5.21

配置文件:/etc/my.cnf

数据目录:/data/mysql

操作系统版本:CentOS6.9

3.升级思路

因为是线上业务不能中断,所以决定先将其中一台slave踢出集群,并升级到mysql5.7,然后再讲mysql5.7这台设备加入到集群当中,等数据同步完了再做主备切换,再升级其他的slave节点。

4.实在演练

4.1.登陆到mysql-proxy中将其中一台从库从集群中踢出

mysql -uuser -ppwd -h127.0.0.1 -P234

查看后端代理库

mysql> SELECT * FROM backends;

+-------------+-------------------+-------+------+
| backend_ndx | address  | state | type |
+-------------+-------------------+-------+------+
|  1 | 172.16.100.1:3306 | up | rw |
|  2 | 172.16.100.2:3306 | up | ro |
|  3 | 172.16.100.3:3306 | up | ro |
|  4 | 172.16.100.4:3306 | up | ro |
+-------------+-------------------+-------+------+ 

5 rows in set (0.00 sec)
将服务172.16.100.4从集群中踢出
mysql> remove backend 4

4.2.替换mysql的安装目录

到mysql的官网下载mysql5.7版本mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz

解压mysql5.7

tar -zxf mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz -C /usr/local/

如果你之前的mysql目录是链接的方式创建的话,那么只需要取消链接,从新做一下链接就可以了

cd /usr/local/

unlink mysql

ln -s mysql-5.7.23-linux-glibc2.12-x86_64 mysql

如果你之前的mysql目录不是链接的方式,那么重新命名一下,再链接一个mysql目录就可以了

cd /usr/local/

mv mysql mysql5.5

ln -s mysql-5.7.23-linux-glibc2.12-x86_64 mysql(建议尽可能的使用这种方式,比较方便升级)

4.3.启动mysql服务

mysql5.7以后是不需要进行数据库初始化的,也就是不用去执行mysql_install_db这个命令

/usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --basedir=/usr/local/mysql --user=mysql --skip-grant-tables --skip-networking &

ps -ef |grep mysql

如果有出息错误的话查看日志信息

4.4.升级系统表数据字典信息,命令如下:

/usr/loca/mysql/bin/mysql_upgrade

输出的结果:

可能会有一些error提示"ALTER TABLE ** FROCE",这些错误不用担心mysql在后面会自动修复repair的时间可能会有点长,要看你的数据库情况,我这次升级花了两个多小时

最后如果输出Upgrade process completed successfully那么就表示升级成功了。

4.5.升级完以后重启一下mysql

/usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --basedir=/usr/local/mysql --user=mysql &

查看一下是否升级完了,如果升级成功的话输出如下

This installation of MySQL is already upgraded to 5.7.23, use --force if you still need to run mysql_upgrade

4.6.重新做一下主从配置

重做一下主从配置

mysql> change master to master master_host="172.16.100.1",master_user="***",master_passowrd="***",master_log_file=" mysql-bin.000004", master_log_pos=1083;

mysql> start slave;

mysql> show slave status\G;

如果两个yes就说明正常了

4.7加入到读写分离的集群中

到mysql-proxy设备上面

mysql -uuser -ppwd -h127.0.0.1 -P234

mysql> ADD SLAVE 172.16.100.4

mysql> select * from backends;

如果state的状态是up的就说明加入集群成功了。

后记:

我第一次升级数据库,不知道整体思路对不对,先在测试环境上面做的测试,然后又测了几天没有问题了才在线上做的升级。仅供参考。

Mysql5.5升级到5.7的过程已经踩到的坑

故事是这样子的,我们公司有几台老的mysql版本是5.5的,最近项目做了一些升级增加了几个字段,用spring-data-jpa自动刷新表结构的时候报错了,原因是mysql5.5的版本不支持一张表里面有两个以上的 current_timestamp 作为default value。所以就要考虑升级下数据库

先到服务器上面看了下版本

再看了下源


哦,顺带提一句,我们公司在用的aws 的 ec2 ,所以都是amz的源

试了下 yum update mysql-server 然后并没什么卵用,所以继续往下搞。

网上看了好多都说是先把旧版本的数据库卸载了再用装新版本的数据库,那我的里面的数据咋办,为了保险起见,我先办数据库做了个备份,一个库一个库的备份,我看mysql库里面也配了好多用户和权限,就顺便也把mysql备份了,然后开搞。

1、卸载数据库

yum remove mysql-server

但是我们这边装的好像不太一样,我就把刚才yum查到的几个都卸载了。

卸载前记得把mysql服务关掉,要不然装新版本之后用mysql --version 查看是5.7 mysql 登录进去还是5.5然后重启服务就各种问题。因为有些文件没被删掉,导致新装的数据库好奇怪的样子。。。

2、安装新数据库

yum search mysql57

先看看有什么版本可以选,这个没啥说的直接

yum install msyql57-server.x86_64

安装下来就ok,来看看都装了些啥东西


很奇怪一点就是mysql-config依赖竟然还是5.5的,不过用起来没发现啥问题

3、配置

安装好了之后修改以下my.cnf

我的服务器上面是在/etc/my.cnf 不知道其它的镜像有没有变化

在配置的时候我突然想到数据存储的空间是还在的啊,配过去看看能用不

于是就在my.cnf配了这一行(5.5的好多配置都弃用了,之前的my.cnf里面的都要删一删要不然启动时会报错)


配置之后果断启动服务

service mysqld start

果然报错了

看了下启动日志

[ERROR] Fatal error: mysql.user table is damaged. Please run mysql_upgrade.

ERROR: Zend_Db_Adapter_Exception: SQLSTATE[HY000] [2002] No such file or directoryAdditionally, an exception has occurred while trying to report this error: Zend_ExceptionNo entry is registered for key 'translate' (Abstract.php:144)

卧槽,这咋办google一波 搜到了这篇文章https://support.plesk.com/hc/en-us/articles/115001659169-MySQL-fails-to-start-mysql-user-table-is-damaged

具体解决方法如下

a. 登录到那台服务器主机上面

b. Add skip-grant-tables in /etc/my.cnf file under [mysqld] section 意思就是开启安全模式(不验证密码什么的)

c. service mysqld start

d. mysql_upgrade

e. service mysqld restart

我执行了一下mysql_upgrade


查了查官方文档,大体意思就是升级之后好多东西不怎么兼容,官方提供这个脚本来修复之前的工作空间

果然是无缝升级mysql数据库中的用户都还在之前的数据库也没有受到影响

至此升级完成

到此这篇关于linux mysql5.5升级至mysql5.7的详细步骤的文章就介绍到这了,更多相关mysql5.5升级至5.7内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 众筹商城与传统商城的区别及php众筹网站的程序源码
    本文介绍了众筹商城与传统商城的区别,包括所售产品和玩法不同以及运营方式不同。同时还提到了php众筹网站的程序源码和方维众筹的安装和环境问题。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
author-avatar
烦恼的余生_538
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有