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

作者:东东的脑洞 时间:2024-01-21 17:09:08 

目录
  • linux mysql5.5升级至mysql5.7

    • 1.下载mysql5.7.32

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

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

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

    • 5. 设置跳过密码登录

    • 6. 启动服务

    • 7. 设置密码

    • 8. 停止服务

    • 9. 启动服务

    • 10. 新命令行登录

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

    • 12. 导入历史数据

    • 13. 执行更新

  • MySQL从5.5升级到5.7

    • 1.升级方式

    • 2.环境介绍

    • 3.升级思路

    • 4.实在演练

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

      • 4.2.替换mysql的安装目录

      • 4.3.启动mysql服务

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

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

      • 4.6.重新做一下主从配置

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

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

    • 1、卸载数据库

      • 2、安装新数据库

        • 3、配置

        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 </home/mysql5.5/bin/all.sql

        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 </home/mysql5.5/bin/all.sql

        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。所以就要考虑升级下数据库

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

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

        再看了下源

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

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

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

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

        1、卸载数据库

        yum remove mysql-server

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

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

        2、安装新数据库

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

        yum search mysql57

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

        yum install msyql57-server.x86_64

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

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

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

        3、配置

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

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

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

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

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

        配置之后果断启动服务

        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

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

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

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

        至此升级完成

        来源:https://www.cnblogs.com/dedong/p/14310879.html

        标签:mysql5.5,mysql5.7
        0
        投稿

        猜你喜欢

      • mysql获取字符串长度函数(CHAR_LENGTH)

        2024-01-26 02:42:51
      • CentOS中升级Python版本的方法详解

        2021-08-22 20:22:30
      • 每个程序员都应该学习使用Python或Ruby

        2023-09-05 06:03:52
      • 自然语言处理NLP TextRNN实现情感分类

        2022-01-20 11:14:47
      • Python编程编写完善的命令行工具

        2023-08-02 11:22:56
      • javascript实现双端队列

        2024-05-02 16:18:58
      • python 递归调用返回None的问题及解决方法

        2022-12-21 05:52:56
      • javascript实现tab响应式切换特效

        2024-02-25 00:13:12
      • python通过ElementTree操作XML

        2021-01-09 09:12:20
      • CodeIgniter连贯操作的底层原理分析

        2024-05-02 17:15:11
      • pytorch中tensor的合并与截取方法

        2022-02-11 14:16:58
      • 简析Python的闭包和装饰器

        2021-06-25 03:25:40
      • JavaScript门道之标准库

        2024-06-05 09:53:21
      • OL IE Bug

        2009-09-09 16:25:00
      • python语言使用技巧分享

        2022-10-24 09:29:38
      • python3用PIL把图片转换为RGB图片的实例

        2021-08-20 02:08:49
      • mysql数据库设置utf-8编码的方法步骤

        2024-01-19 05:30:56
      • CKeditor富文本编辑器使用技巧之添加自定义插件的方法

        2024-04-18 09:52:24
      • 客户端数据存储–超越cookies

        2008-01-15 13:01:00
      • python使用正则表达式匹配txt特定字符串(有换行)

        2023-03-23 07:46:03
      • asp之家 网络编程 m.aspxhome.com