linux mysql表天天坏_在linux下安装mysql的几个常见的大坑

概述

在Linux下通过安装MySQL后,也不知道是Oracle故意埋的坑还是什么原因,经常会碰到各种问题,造成MySQL无法正常使用。本文根据我个人安装MySQL中遇到的问题进行总结,希望对大家有帮助。

启动报RSA错误

症状

安装MySQL后,无法正常启动MySQL服务,通过查看MySQL系统日志发现如下的问题:

2020-05-07T23:30:15.911056Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.

2020-05-07T23:30:15.914313Z 0 [ERROR] Could not generate RSA private key required for X509 certificate.

2020-05-07T23:30:15.914355Z 0 [ERROR] Aborting

原因

是在mysql 5.7.6以后增强了安全加密连接 ,但在安装时没有进行初始化。

解决

mysql在/bin下提供了一个mysql_ssl_rsa_setup脚本,需要在安装mysql后执行该脚本才可以。

root@mysql bin]# ./mysql_ssl_rsa_setup

解决无密码登录的问题

症状

安装后,在my.cnf中没有设置skip-grant-tables,但是root不用密码就可以登录,是因为root密码初始是空的缘故。

原因

我们知道mysq的数据库用户记录在mysql模式下的user表中。但是默认安装时,mysql模式下的user表的root用户的密码字段是空的,造成可以直接不用密码就进入。这算是一个mysql的BUG吧。

解决

在mysql 5.7.6 版本以前执行如下脚本,设置root的密码;

use mysql;

update user set password=password('你的密码') where user='root';

update user set plugin='mysql_native_password';

flush privileges;

在mysql 5.7.6版本以后,Oracle又使坏了,将user表的password字段改名为authentication_string,因此在>=5.7.6后,需要执行如下的语句:

use mysql;

update user set authentication_string=password(‘你的密码’) where user='root';

update user set plugin='mysql_native_password';

flush privileges;

解决误报密码错误无法登录的问题

症状

使用mysql -uroot -pxxx 输入正确的用户名密码,但是还是报错:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor=YES)

原因

网上找了很多都说是密码错误的问题,改了N遍了,还是报一样的错误,但其实是因为用户表存在空用户名的用户造成的。因为使用用户登录时,mysql会查询 mysql.user表检查密码,如果存在用户名为空的用户记录,就会错误地使用到空用户的密码进行判断,造成了错误。

【解决】

更改my.cnf开启skip-grant-tables,重新启动mysql服务,登录mysql,查看一下user表中有没有名字为空的用户记录:

select user,host from mysql.user;

2b43ce43202c

用户记录列表

可以发现有两条空名字的用户记录,接下来就是要删除这些空名用户记录:

delete from mysql.user where user='';

commit;

删除后,将my.cnf中开启skip-grant-tables去除,重新启动mysql的服务并登录应该就可以正常了。

解决mysql版本升级造成服务无法启动的问题

【症状】

我在MySQL5.1到5.7版本升级时,启动数据库失败,并在日志中发现以下错误:

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

[ERROR] Aborting

【原因】

mysql 5.7和mysql 5.1的mysql.user表结构发现的变化,但myql版本升级时没有执行user表的变更 。

【解决】

请先将数据库备份一下,再重新启动一下服务:

> rm -fr /var/lib/mysql

> mysqld --initialize --user=mysql

> service mysqld restart

Stopping mysqld: [ OK ]

Starting mysqld: [ OK ]

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值