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

背景:由于项目比较老,用的数据库版本也是相当低,现在业务需求需要做数据同步,使用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的版本信息。

先处理问题7

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

要在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'

运行后重启,即可生效

问题5:

Warning: World-writable config file ‘/etc/my.cnf’ is ignored

解决方法:

‘/etc/my.cnf’ is ignored ,大概意思是权限全局可写,任何一个用户都可以写。mysql担心这种文件被其他用户恶意修改,所以忽略掉这个配置文件。导致无法进入,这也是mysql的安全机制之一。所以我们必须得改一些权限。设置其他用户不可写。

shell如下

chmod 644 /etc/my.cnf

然后执行:

service mysql restart

即可。

问题6:

安装mysql为什么卸载 mariadb

解决方法:

卸载系统预置的mariadb,才能安装mysql。

原因是:以前的Linux系统中数据库大部分是mysql,不过自从被sun收购之后,就没用集成在centos这些开源Linux系统中了,那么如果想用的话就需要自己安装了,首先centos7 已经不支持mysql,因为收费了你懂得,所以内部集成了mariadb,而安装mysql的话会和mariadb的文件冲突,所以需要先卸载掉mariadb,以下为卸载mariadb,安装mysql的步骤。

问题7:

在CentOS7中安装了MariaDB和MariaDB-server,卸载了以后重新安装,然后使用Systemctl start mariadb,出现了“Job for mysqld.service failed because the control process exited with error code. See “systemctl status mysqld.service” and “journalctl -xe” for details.”的错误提示,仔细研究了一下,发现在使用 yum remove mariadb 卸载并没有将所有依赖项全部卸载导致的问题。

解决方法:Linux完全卸载MariaDB

1、卸载

yum remove mariadb 卸载mariadb,同时也卸载了mariadb-server

yum list installed | grep mariadb 发现在安装mariadb时作为依赖项的mariadb-libs没有被删除。

yum remove mariadb-libs 将其卸载

rm -rf /etc/my.cnf

rm -rf $(find / -name mysql) 删除所有包含mysql的文件(夹)

reboot

 1.1 补充

1.查询是否安装了mariadb

        rpm -qa | grep mariadb

 

 

知识点:

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格式的混合。在选择二进制日志格式时,需要根据具体情况进行权衡和选择。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值