记ubuntu20重装Mysql8过程中踩的坑。包含误删mysql的root用户,mysql忘记密码,Navicat远程连接问题

最近在学Redis过程中Redis给入侵服务器给装了病毒,于是决定重装机子。但在安装Mysql中遇到了各种坑,在这篇文章里汇总一下我收集到的解决方案。

1.误删mysql的root用户,mysql忘记密码:

网上给出的解决方案一般如下:
1.先关闭mysql sudo systemctl stop mysql
2.用sudo mysqld_safe --skip-grant-tables命令在跳过密码的情况下启动mysql
3.进入mysql后,先输入use mysql命令,再执行ALERT user 'root'@'localhost' IDENTIFIED BY '你的新密码命令设置新密码,之后重启服务器即可。


我贴一下我在上述步骤中出现的问题。
1.在执行第二步的过程中,出现了mysqld_safe Directory ‘/var/run/mysqld’ for UNIX socket file don’t exists.该问题。进一步排查发现,这个文件夹在mysql正常运行的时候是存在的,但是当我们执行关闭mysql命令的时候,这个文件夹也被自动删除了。
解决问题的方法是在mysql运行时备份一个,然后再运行。

sudo systemctl start mysql
cd /var/run
sudo cp -rp ./mysqld ./mysqld.bak
sudo systemctl stop mysql
sudo mv ./mysqld.back ./mysqld
sudo mysqld_safe --skip-grant-tables

之后我们就可以无密码的直接用mysql命令登入服务器。同时,登入mysql后要先执行 FLUSH PRIVILEGES;命令,否则无法进行update操作或插入操作。

2.如果是误删root用户,那么我们在这里需要新插入一个root用户,这里直接摘抄https://developer.aliyun.com/article/527540的方法

mysql> insert into user set user=‘root’,ssl_cipher=‘’,x509_issuer=‘’,x509_subject=‘’;
(增加root用户的表)
Query OK, 1 row affected, 3 warnings (0.00 sec)
(这时可能会提示某字段如ssl_cipher无默认值, 只要加上,ssl_cipher=‘’; 其字段如有提示依次添加就OK了)
update user set Host=‘localhost’,select_priv=‘y’, insert_priv=‘y’,update_priv=‘y’, Alter_priv=‘y’,delete_priv=‘y’,create_priv=‘y’,drop_priv=‘y’,reload_priv=‘y’,shutdown_priv=‘y’,Process_priv=‘y’,file_priv=‘y’,grant_priv=‘y’,References_priv=‘y’,index_priv=‘y’,create_user_priv=‘y’,show_db_priv=‘y’,super_priv=‘y’,create_tmp_table_priv=‘y’,Lock_tables_priv=‘y’,execute_priv=‘y’,repl_slave_priv=‘y’,repl_client_priv=‘y’,create_view_priv=‘y’,show_view_priv=‘y’,create_routine_priv=‘y’,alter_routine_priv=‘y’,create_user_priv=‘y’ where user=‘root’;
(这里面是修改root用户的权限)

之后修改密码参考忘记密码部分即可。

3.在执行ALERT user ‘root’@‘localhost’ IDENTIFIED BY '你的新密码`时出错。
原因不明,但是在update或者select user表之后再执行似乎没有问题。

2、Navicat远程连接的问题

1.我首先遇到的问题是2003 - Can’t connect to MySQL server on ‘x.x.x.x’ (10038) mysql数据库连接不上问题。网上对此的回答一般是检查服务端和客户端两端的防火墙是否开启。我先随便换了个IP地址连接,报密码错误,说明客户端防火墙没有问题,之后再检查服务端防火墙,也没有问题。
网上对这种情况几乎没有第二种解释,我在排查问题的过程中发现原来是Mysql并没有在3306端口监听。对于该问题我们去找/etc/mysql/mysql.conf.d/mysqld.cnf该文件。
这里要注意,网上很多文章在这里针对的是老版mysql,在新版mysql里skip-networking已经被取代了。相关部分如下:

#Instead of skip-networking the default is now to listen only on
#localhost which is more compatible and is not less secure.
bind-address = 127.0.0.1 #这里默认监听本地localhost

把bind-address这行前加个#号注释掉即可。之后重启,发现3306端口已经被监听。

2.Navicat在连接上以后的报错问题相对简单。无论是1130问题还是1251问题网上都有成熟的解决方案。这里切记1251问题不能简单地把root的plugin直接用update命令换掉,一定要按照教程走。

1251:
https://blog.csdn.net/2301_76857349/article/details/129583492

1130:
https://blog.csdn.net/dabao87/article/details/80571877

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值