mysql版本5.5.*升级为5.7.*,遇到的问题和解决方法都来看看吧,最终升级成功~

news/2025/2/23 5:19:20/

背景:由于项目比较老,用的数据库版本也是相当低,现在业务需求需要做数据同步,使用FlinkCDC的时候报数据库版本低,查询FlinkCDC要求的最低版本后果断升级mysql~

FlinkCDC对mysql最低版要求如下图:

(从 2.2 版本开始, MySQL CDC 支持了 MySQL 5.6 版本,满足低版本的 MySQL 用户需求。)

接下来我们就对数据库的升级做好准备:

数据库升级带来的风险:

1. 不兼容的更改:MySQL 5.7.37引入了一些不兼容的更改,可能会影响到现有的应用程序。例如,MySQL 5.7.37默认使用了更严格的SQL模式,这可能会导致一些应用程序无法正常工作。要避免这个问题,可以在升级之前仔细阅读MySQL 5.7.37的发行说明,并检查应用程序是否与新版本兼容。

2. 配置文件更改:MySQL 5.7.37的配置文件可能与旧版本不同,需要进行相应的更改。要避免这个问题,可以在升级之前备份旧的配置文件,并在升级后将其与新的配置文件进行比较,以确定是否需要进行更改。

3. 数据库引擎更改:MySQL 5.7.37默认使用了InnoDB作为默认的存储引擎,而旧版本可能使用了MyISAM或其他存储引擎。要避免这个问题,可以在升级之前检查现有的数据库使用的存储引擎,并在升级后将其更改为InnoDB。

4. 安全设置更改:MySQL 5.7.37引入了一些新的安全设置,例如密码策略和加密功能。要避免这个问题,可以在升级之前仔细阅读MySQL 5.7.37的发行说明,并根据需要进行相应的更改。

为了避免这些问题,可以尝试按照以下步骤进行操作:

1. 在升级之前备份MySQL的数据和配置文件,以防止升级过程中出现意外情况导致数据丢失。

2. 仔细阅读MySQL 5.7.37的发行说明,并检查应用程序是否与新版本兼容。

3. 检查现有的数据库使用的存储引擎,并在升级后将其更改为InnoDB。

4. 在升级之前备份旧的配置文件,并在升级后将其与新的配置文件进行比较,以确定是否需要进行更改。

5. 仔细阅读MySQL 5.7.37的发行说明,并根据需要进行相应的安全设置更改。

总之,在升级MySQL之前,一定要做好充分的准备工作,以确保升级过程顺利,并且不会影响到现有的应用程序和数据。

MySQL查看默认存储引擎:SHOW VARIABLES LIKE 'default_storage_engine%';

一、环境准备(可选):

要在Linux上安装yum,可以按照以下步骤进行操作:

1. 确认系统是否已经安装了yum。可以使用以下命令检查:

   yum --version

如果系统已经安装了yum,则应该输出yum的版本信息。如果系统没有安装yum,则应该输出-bash: yum: command not found。

2. 如果系统没有安装yum,则可以使用以下命令安装:

   sudo yum install yum-utils

这将安装yum及其相关工具。

3. 安装完成后,可以使用以下命令检查yum是否安装成功:

   yum --version

如果yum已经成功安装,则应该输出yum的版本信息。

二、备份数据库所有数据:

要在Linux上将MySQL升级到5.7.37版本,可以按照以下步骤进行操作:

1. 备份MySQL的数据和配置文件,以防止升级过程中出现意外情况导致数据丢失。可以使用以下命令备份:

   mysqldump -u root -p --all-databases > all_databases.sql

这将备份所有数据库到名为all_databases.sql的文件中。

要在Linux上查询all_databases.sql文件的位置,可以使用以下命令:

sudo find / -name all_databases.sql

将备份的数据和配置文件还原到新版本的MySQL中。可以使用以下命令还原:

   mysql -u root -p < all_databases.sql

2.停止MySQL服务,并确保所有MySQL进程已经终止。可以使用以下命令停止MySQL服务

   sudo systemctl stop mysql

要查询MySQL的安装目录,可以使用以下命令:

which mysql

查询mysql所有文件夹

find / -name mysql

删除文件夹

rm -rf /usr/lib64/mysql

3.下载对应版本压缩包

下载地址:https://dev.mysql.com/downloads/mysql/5.7.html#downloads

点击download进入以下页面:

https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz

操作步骤:

3.1在linux运行下载速度比较快(一般放在专门存放下载文件目录):https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz

3.2然后解压文件:tar -xvf mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz,重新命名文件夹名称为mysql5.7.37.

3.3把解压的文件截切到/usr/local/mysql5.7.37文件目录下(养成习惯把安装程序都按一定规则存放):mv mysql-5.7.37-linux-glibc2.12-x86_64 /usr/local/mysql5.7.37/

3.4创建mysql用户组和用户并修改权限

groupadd mysql

useradd -r -g mysql mysql

3.5创建数据目录并赋予权限

mkdir -p  /data/mysql                  #创建目录

chown mysql:mysql -R /data/mysql       #赋予权限

3.6配置my.cnf(最好在外部先以UTF-8格式编辑好传到服务器)

vim /etc/my.cnf

内容如下:(注意空格)

[mysqld]

bind-address=0.0.0.0

port=3306

user=mysql

basedir=/usr/local/mysql5.7.37  #这里特别注意把mysql-5.7.37写成mysql会导致后面无法启动

datadir=/data/mysql

socket=/tmp/mysql.sock

log-error=/data/mysql/mysql.err

pid-file=/data/mysql/mysql.pid

#character config

character_set_server=utf8mb4

symbolic-links=0

explicit_defaults_for_timestamp=true

lower_case_table_names=1    #不区分表名大小写,统一换成小写

sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'

log-bin=mysql-bin      #开启binlog日志,不开启则不需要写以下三行
server-id=12
binlog_format=ROW

expire_logs_days=7        #清除binlog周期,天

3.7初始化数据库

进入mysql的bin目录:cd /usr/local/mysql5.7.37/bin/

初始化:./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql5.7.37/ --datadir=/data/mysql/ --user=mysql --initialize

查看密码:cat /data/mysql/mysql.err

3.8检查MySQL数据目录是否存在。可以使用以下命令检查MySQL数据目录是否存在:

   ls /data/mysql

如果MySQL数据目录不存在,则可以使用以下命令创建:

mkdir /data/mysql

chown mysql:mysql /data/mysql

3.9检查MySQL数据目录的权限。可以使用以下命令检查MySQL数据目录的权限:

   ls -ld /data/mysql

如果MySQL数据目录的权限不正确,则可以使用以下命令更改权限:

chmod 755 /data/mysql

3.10启动mysql,并更改root 密码

先将mysql.server放置到/etc/init.d/mysql中

cp /usr/local/mysql5.7.37/support-files/mysql.server /etc/init.d/mysql

3.11启动!!!

service mysql start

ps -ef|grep mysql

到这里说明mysql已经安装成功了!!

3.12下面修改密码:

首先登录mysql,前面的那个是随机生成的。

./mysql -u root -p   #bin目录下

再执行下面三步操作,然后重新登录。

SET PASSWORD = PASSWORD('EnCanadaForEMC');

ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;

FLUSH PRIVILEGES;   

3.13查看mysql版本:

    

三、必要操作

1.这个时候如果无法连接:

修改mysql的PATH环境变量bin的安装地址

1.1要修改MySQL的PATH环境变量中bin的安装地址,可以按照以下步骤进行操作:

确认MySQL的安装路径。可以使用以下命令检查MySQL的安装路径:   

which mysql

这将显示MySQL的安装路径,例如/usr/local/mysql5.7.37/bin/mysql

1.2打开~/.bashrc文件。可以使用以下命令打开~/.bashrc文件:

   nano ~/.bashrc

1.3在文件末尾添加以下行:

  export PATH=$PATH:/path/to/mysql/bin

其中,/path/to/mysql/bin应替换为MySQL的安装路径中bin目录的路径,例如/usr/local/mysql5.7.37/bin/mysql/bin。

1.4保存并关闭文件。可以使用Ctrl+X、Y和Enter键保存并关闭文件。

1.5使更改生效。可以使用以下命令使更改生效:

source ~/.bashrc

1.6确认PATH环境变量已经更新。可以使用以下命令检查PATH环境变量是否已经更新:

 echo $PATH

这将显示PATH环境变量的当前值,其中应该包含MySQL的安装路径中bin目录的路径。

2.这时候你如果使用远程连接……你会发现你无法连接。

2.1这里主要执行下面三个命令(先登录数据库)

use mysql                                            #访问mysql库

update user set host = '%' where user = 'root';      #使root能再任何host访问

FLUSH PRIVILEGES;                                    #刷新

注意:可以将mysql设置成(不区分大小写)

vim /etc/my.cnf

在这个配置文件下添加这个参数(不区分大小写)

lower_case_table_names = 1

2.2全局使用mysql命令

-bash: mysql: command not found   #mysql命令没有找到

mysql命令没有找到,找到mysql安装目录,which mysql,也可以在上述目录查 /usr/local查找是否有mysql ,然后建立到 /usr/bin/的软链

ln -s /usr/local/mysql55/bin/mysql /usr/bin/

因为系统默认会查找/usr/bin下的命令,所以要连接到这个目录

/usr/local/mysql5.7.37/bin/mysql 是mysql的安装目录

/usr/bin/ 是软链接到的目录

3.设置开启mysql的二进制日志文件binlog

如果要使用Flinkcdc同步MySQL,建议将二进制日志(binlog)的格式设置为ROW。这是因为ROW格式可以更准确地记录每个修改操作的行数据,从而可以更准确地重放修改操作。而且,Flinkcdc默认使用ROW格式进行数据同步,如果MySQL的二进制日志格式不是ROW,可能会导致数据同步的问题。

使用命令

SHOW VARIABLES LIKE 'log_bin';

确认MySQL是否已经启用了二进制日志。

解决方法:

要将MySQL的二进制日志格式设置为ROW,可以按照以下步骤进行操作:

1. 编辑MySQL的配置文件。可以使用以下命令编辑MySQL的配置文件:

   sudo vi /etc/my.cnf

如果MySQL的配置文件不存在,则可以使用以下命令创建:

   sudo cp /usr/share/mysql/my-medium.cnf /etc/my.cnf

2. 在MySQL的配置文件中添加以下内容:

   [mysqld]

   log-bin=mysql-bin

   server-id=1

   binlog_format=ROW

这将启用MySQL的二进制日志,并将二进制日志文件的前缀设置为mysql,将MySQL服务器的ID设置为1,并将二进制日志格式设置为ROW。

3. 重新启动MySQL服务。可以使用以下命令重新启动MySQL服务:

   sudo systemctl restart mysqld

4. 确认MySQL已经启用了二进制日志,并且二进制日志格式为ROW。可以使用以下命令登录MySQL并执行SHOW VARIABLES LIKE 'log_bin';和SHOW VARIABLES LIKE 'binlog_format';命令:

   mysql -u root -p

   SHOW VARIABLES LIKE 'log_bin';

   SHOW VARIABLES LIKE 'binlog_format';

如果输出的结果中Value列的值为ON,则表示MySQL已经启用了二进制日志,并且二进制日志格式为ROW。

5.设置mysql的binlog文件保存过期时间:

        在MySQL的配置文件中添加以下内容:

   [mysqld]
   log-bin=mysql-bin
   server-id=1
   expire_logs_days=7      #清除binlog周期,天

四、数据库操作

1.增加数据库mysql下usr表用户:参见用户表新增sql文件

2.导出的sql文件需要去除mysql、information_schema、performance_schema三个数据库。

五、注意事项

使用sudo systemctl 会报错,但是使用service mysql start不报错:

例如:   sudo systemctl status mysqld

如图:

实际数据库已经启动:

六、问题:

 问题1:

mysql -u root -p

-bash: mysql: 未找到命令

解决方法:

确认MySQL的安装路径是否在系统的PATH环境变量中。可以使用以下命令检查系统的PATH环境变量:

如果MySQL的安装路径不在系统的PATH环境变量中,则可以使用以下命令将其添加到PATH环境变量中:

   export PATH=$PATH:/path/to/mysql/bin

其中,/path/to/mysql/bin应替换为MySQL的安装路径。

3. 如果MySQL已经安装并且其安装路径已经在系统的PATH环境变量中,则可以尝试重新安装MySQL客户端。可以使用以下命令重新安装MySQL客户端:

   sudo yum reinstall mysql

问题2:

Starting MySQL.... ERROR! The server quit without updating PID file (/data/mysql/mysql.pid).

解决方法:

这个错误提示表明在启动MySQL服务时出现了问题,导致MySQL服务器无法更新PID文件。要解决这个问题,可以按照以下步骤进行操作:

  1. 检查MySQL配置文件。可以使用以下命令检查MySQL配置文件是否存在:

   ls /etc/my.cnf

如果MySQL配置文件不存在,则可以使用以下命令创建:

   sudo cp /usr/share/mysql/my-medium.cnf /etc/my.cnf

  1. 检查MySQL数据目录的权限。可以使用以下命令检查MySQL数据目录的权限:

   ls -ld /data/mysql

如果MySQL数据目录的权限不正确,则可以使用以下命令更改权限:

   chmod 755 /data/mysql

  1. 检查MySQL数据目录是否存在。可以使用以下命令检查MySQL数据目录是否存在:

   ls /data/mysql

如果MySQL数据目录不存在,则可以使用以下命令创建:

   mkdir /data/mysql

   chown mysql:mysql /data/mysql

  1. 启动MySQL服务。可以使用以下命令启动MySQL服务:

service mysql start

  1. 确认MySQL服务已经启动。可以使用以下命令检查MySQL服务是否已经启动:

ps -ef|grep mysql

systemctl status mysqld

如果MySQL服务已经启动,则应该输出active (running)。

问题3:

Failed to start MariaDB 10.3.18 database server.  #MariaDB启动失败

解决方法:

如果在启动MariaDB 10.3.18数据库服务器时出现了错误,可以按照以下步骤进行操作:

1. 检查MariaDB的日志文件。可以使用以下命令检查MariaDB的日志文件:

   sudo tail -f /var/log/mariadb/mariadb.log

这将显示MariaDB的日志文件的最后几行。如果有任何错误或警告消息,则应该在日志文件中显示。

2. 检查MariaDB的配置文件。可以使用以下命令检查MariaDB的配置文件是否存在:

   ls /etc/my.cnf.d/server.cnf

如果MariaDB的配置文件不存在,则可以使用以下命令创建:

   sudo cp /usr/share/mysql/my-medium.cnf /etc/my.cnf.d/server.cnf

3. 检查MariaDB数据目录的权限。可以使用以下命令检查MariaDB数据目录的权限:

   ls -ld /var/lib/mysql

如果MariaDB数据目录的权限不正确,则可以使用以下命令更改权限:

   sudo chmod 755 /var/lib/mysql

4. 检查MariaDB数据目录是否存在。可以使用以下命令检查MariaDB数据目录是否存在:

   ls /var/lib/mysql

如果MariaDB数据目录不存在,则可以使用以下命令创建:

   sudo mkdir /var/lib/mysql

   sudo chown mysql:mysql /var/lib/mysql

5. 启动MariaDB服务。可以使用以下命令启动MariaDB服务:

   sudo systemctl start mariadb

6. 确认MariaDB服务已经启动。可以使用以下命令检查MariaDB服务是否已经启动:

ps -ef|grep mariadb

如果MariaDB服务已经启动,则应该输出active (running)。

总之,要解决Failed to start MariaDB 10.3.18 database server错误提示,需要检查MariaDB的日志文件、配置文件、数据目录的权限和是否存在、MariaDB服务是否已经启动,并进行必要的更改。如果MariaDB的配置文件不存在,则需要创建。如果MariaDB数据目录的权限不正确,则需要更改权限。如果MariaDB数据目录不存在,则需要创建。如果MariaDB服务没有启动,则需要启动MariaDB服务。

问题4:

在执行SQL查询时出现了语法错误,具体原因是ORDER BY子句中的列不在GROUP BY子句中,且该列不是函数依赖于GROUP BY子句中的列,这与MySQL的sql_mode=only_full_group_by不兼容。

解决方法:

1.查询原有的sql_mode配置:

在Navicat上或服务器连接mysql以后:select @@global.sql_mode

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

2.修改数据库配置(永久生效)

修改配置文件my.cnf  (路径:/etc/my.cnf)

在[mysqld]模块下新增一行配置:

sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'

运行后重启,即可生效

知识点:

binlog_format=ROW是MySQL的一个配置选项,用于指定二进制日志(binlog)的格式。当binlog_format设置为ROW时,MySQL会将每个修改操作的行数据记录到二进制日志中,而不是记录SQL语句。这意味着在进行数据恢复或复制时,可以更准确地重放修改操作,因为每个修改操作的行数据都已经记录在二进制日志中。

具体来说,当binlog_format设置为ROW时,MySQL会将每个修改操作的行数据记录到二进制日志中,包括修改前和修改后的行数据。这样,在进行数据恢复或复制时,可以使用这些行数据来重建修改操作,而不是使用SQL语句。这种方式可以更准确地重放修改操作,因为它可以避免由于SQL语句的不同而导致的数据不一致问题。

二进制日志(binlog)的格式有哪些?

MySQL支持三种二进制日志(binlog)的格式,分别是STATEMENT、ROW和MIXED。这些格式可以通过binlog_format配置选项进行指定。

1. STATEMENT格式

STATEMENT格式是MySQL的默认二进制日志格式。当binlog_format设置为STATEMENT时,MySQL会将每个修改操作的SQL语句记录到二进制日志中。这意味着在进行数据恢复或复制时,可以使用这些SQL语句来重建修改操作。

但是,STATEMENT格式存在一些限制。例如,当使用非确定性函数(如NOW())或随机数函数(如RAND())时,可能会导致在主从复制中数据不一致的问题。此外,当使用存储过程或触发器时,也可能会导致数据不一致的问题。

2. ROW格式

当binlog_format设置为ROW时,MySQL会将每个修改操作的行数据记录到二进制日志中,而不是记录SQL语句。这意味着在进行数据恢复或复制时,可以更准确地重放修改操作,因为每个修改操作的行数据都已经记录在二进制日志中。

但是,ROW格式可能会导致二进制日志文件变得非常大,因为它需要记录每个修改操作的行数据。此外,当修改操作涉及到大量行数据时,也可能会导致性能问题。

3. MIXED格式

MIXED格式是STATEMENT和ROW格式的混合。当binlog_format设置为MIXED时,MySQL会根据具体情况选择使用STATEMENT格式或ROW格式。例如,对于简单的修改操作,MySQL可能会选择使用STATEMENT格式,而对于复杂的修改操作,MySQL可能会选择使用ROW格式。

MIXED格式可以兼顾STATEMENT和ROW格式的优点,但也存在一些限制。例如,当使用非确定性函数或随机数函数时,可能会导致在主从复制中数据不一致的问题。

总之,MySQL支持三种二进制日志的格式,分别是STATEMENT、ROW和MIXED。这些格式可以通过binlog_format配置选项进行指定。STATEMENT格式记录SQL语句,ROW格式记录行数据,MIXED格式是STATEMENT和ROW格式的混合。在选择二进制日志格式时,需要根据具体情况进行权衡和选择。


http://www.ppmy.cn/news/505535.html

相关文章

开关电源——DCDC变换器设计

开关电源——DCDC变换器设计 对于DCDC变换器来说&#xff0c;最重要的部分也是唯一一个磁学元件——电感需要考虑。 直流传递函数 正如之前我们所说&#xff0c;电感电流在开关导通的时候增加的电流必须等于在开关关断时候的减少的电流&#xff0c;即在一个工作周期中不积累…

佳能Canon PIXMA G1010 打印机驱动

佳能Canon PIXMA G1010 打印机驱动是官方提供的一款打印机驱动&#xff0c;本站收集提供高速下载&#xff0c;用于解决打印机与电脑连接不了&#xff0c;无法正常使用的问题&#xff0c;本动适用于&#xff1a;Windows XP / Windows 7 / Windows 8 / Windows 10 32/64位操作系统…

软件开发流程

目录 软件软件开发流程的演变 瀑布模型敏捷模型 XPSCRUMDevOps 1.软件 与计算机系统操作有关的计算机程序、可能有的文件、文档及数据。 软件可以分为两种主要类型&#xff1a; 独立软件&#xff1a;独立软件是一种完整的应用程序&#xff0c;可以直接在计算机或移动设备上…

如何从小白成为一名产品经理

要成为一名产品经理&#xff0c;你需要掌握一系列的技能和知识。以下是一个从小白到产品经理的学习路线&#xff1a; 了解产品经理的职责和角色&#xff1a;开始之前&#xff0c;你需要明确产品经理的职责和角色&#xff0c;了解他们在产品开发周期中的作用和责任。 学习产品管…

操作系统(02326)课后习题答案

目录 第一章 操作系统概论第二章 操作系统运行环境第三章 进程与线程第四章 进程的同步与互斥第五章 死锁第六章 存储管理第七章 文件系统第八章 I/O设备管理 第一章 操作系统概论 什么是操作系统&#xff1f;请说明操作系统在计算机系统中的作用和地位。 操作系统是计算机系统…

solr后台管理界面以及文档操作

前面solr跟中文分析器已经安装配置好了&#xff0c;进入后台管理页面查看如下。 1、DashBoard:solr的版本信息、jvm的相关信息还有一些内存信息。 2、Logging:日志信息&#xff0c;也有日志级别&#xff0c;刚进入查看的时候肯定是有几个警告&#xff08;warn&#xff09;信…

怎么查服务器的操作系统是什么,怎么查服务器什么操作系统

怎么查服务器什么操作系统 内容精选 换一换 只有运行中的云服务器云主机才允许用户登录。Windows操作系统用户名“Administrator”。首次登录云耀云服务器,请先通过“重置密码”功能设置登录密码。重置密码:选中待重置密码的云耀云服务器,并选择“操作”列下的“ 重置密码”…

操作系统原理——第2章 操作系统概述

2.1 操作系统的目标和功能 操作系统是控制应用程序执行的程序&#xff0c; 并充当应用程序和计算机硬件之间的接口。 它有三个主要目标&#xff1a; 方便有效扩展能力 2.1.1 作为用户/计算机接口的操作系统 计算机接口 典型计算机系统中的三种重要接口 指令系统体系结构&a…