MariaDB登陆报错

MariaDB登陆后报错,有几个问题。

第一个,如下所示:

Warning: World-writable config file '/etc/my.cnf' is ignored
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 15
Server version: 10.3.28-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

说是报错,其实是一个警告,通过命令查看MariaDB的状态:

service mysql status

# 或者
service mysqld status

都发现是在running状态,但是登陆MariaDB之后,你进行任何操作,数据库都没有任何响应,如下:

MariaDB [(none)]> show databases
    -> use mysql
    -> show tables

这是有问题的,具体什么问题呢?不知道。怎么解决呢,慢慢来!

这就是第二个问题:数据库没有任何响应

我们修改了/etc/my.cnf这个文件,重新登陆MariaDB,结果报错了:

[fangdake@CentOS8-01 local]$ mysql -uroot -pxxxxxx
mysql: unknown variable 'skip-networking=1'

 注意:上面的6个x代表密码的意思。

未知的参数?那就是说我们修改/etc/my.cnf这个文件是不对的。当时修改这个文件时,查看权限命名是可写的,但是文件权限却是只读的,因为我修改之后保存,它就这么告诉我的,不允许修改。那好,我就提升权限呗:

sudo chmod 777  /etc/my.cnf

 这是当时的做法,提升玩权限就没有别的后续了,竟然忘记把权限复原。

到这里,基本上就打通了了。我们回到文章开头,貌似是一个不太重要的警告:

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

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

sudo chmod 644 /etc/my.cnf

然后重启MariaDB。

service mysql restart 

后面突然想到,是我的SQL命令未加分号的缘故,所以才会出现,输入的SQL命令没有相应的问题。我知道要输入分号,可是我就是没有输入,然后这个问题一直纠结我了3天,今天恍然大悟。

注意:SQL命令请以分号结尾。

之后就是常规操作了,具体操作命令,我们专门找一篇文章,实战测试命令及其显示效果。

现在数据库建好了,命令行也ok了,但是又出现了另外的问题,那就是我通过DBeaver连接新建的数据库失败了。

Could not connect to HostAddress{host='192.168.xx.xx', port=3306, type='master'}. Host 'NCS-5CG0325JXS' is not allowed to connect to this MariaDB server
  Host 'NCS-5CG0325JXS' is not allowed to connect to this MariaDB server
  Host 'NCS-5CG0325JXS' is not allowed to connect to this MariaDB server

意思很明显:

无法连接到主机地址{host='192.168.xx.xx',port=3306,type='master'}。不允许主机“NCS-5CG0325JXS”连接到此服务器

不允许主机“NCS-5CG0325JXS”连接到此服务器

不允许主机“NCS-5CG0325JXS”连接到此服务器

我一想,我这是root用户登录,当初我设置安全策略的时候好像是禁用了root用户远程登陆。到底是不是这个原因呢?我们有两种方案,一是授权root用户远程登陆的权限,二是我们创建一个用户并授予远程登录权限。先看第一种:

# root是我的root账户,名称可以修改为你的;
# 如果是本机,%可以改为localhost;
# ‘123456’是密码,需要改成你自己的密码;
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;

执行完命令的结果是:

 Query OK, 0 rows affected (0.000 sec) 

 然后刷新权限:

flush privileges;

 返回结果和授权一样。我们再通过客户端DBeaver连接一下MariaDB,结果成功了,如图:

 至此,第一种方案,成功。下面我们试一试第二种方案:

# 创建新用户,名称为fangdake,密码是123456
CREATE USER 'fangdake' @ '%' IDENTIFIED BY '123456';

结果报错了:

 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''%' IDENTIFIED BY '123456'' at line 1

意思是:

 您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,以获取在第1行“123456”标识的“%”附近使用的正确语法

说白了就是在%附近出现了语法错误,那我想是不是多了个空格的缘故呢?因为我们上面针对root用户授权时就是和%挨着的,我们试试:

# 创建新用户,名称为fangdake,密码是123456
CREATE USER 'fangdake' @'%' IDENTIFIED BY '123456';

成功了。我们再试试把@前面的空格也去掉:

# 创建新用户,名称为fangdake01,密码是123456
CREATE USER 'fangdake01'@'%' IDENTIFIED BY '123456';

结论,就是@和'%'之间不能有空格,最优的写法就是最后一种,即'username'@'%'或者 'username'@'localhost'。

切记,此时依然需要给信创建的用户授予权限,不然就会报错:

Could not connect to address=(host=192.168.xx.xx)(port=3306)(type=master) : (conn=20) Access denied for user 'fangdake'@'%' to database 'SAOS'
  (conn=20) Access denied for user 'fangdake'@'%' to database 'SAOS'
  (conn=20) Access denied for user 'fangdake'@'%' to database 'SAOS'

 授权命令同root。不过我们还可以:

# SAOS是库名,fangdake是用户名,%代表远程连接;
# 本地可以是localhost,123456是密码;
# 授予fangdake所有权限
GRANT ALL ON SAOS.* to 'fangdake'@'%' IDENTIFIED BY '123456';

# 或者,注释如上
# 授予fangdake01增删改查的权限
GRANT insert,delete,select,update ON SAOS.* to 'fangdake01'@'%' IDENTIFIED BY '123456';

# 或者,注释如上
# 授予fangdake01增删改查的权限
GRANT insert,delete,select,update ON SAOS.* to 'fangdake01'@'%' IDENTIFIED BY '123456';

 同时刷新权限后,fangdake01也连接成功。

2021年12月13日10:25:29

过了一个周末,回来这MariaDB连不上了,xshell连接不上,当然DBeaver也是连不上。第一反应是,难道重启了虚拟机之后,远程登录就不行了吗?

首先去配置文件/etc/my.cnf.d/mariadb-server.cnf文件中查看配置情况:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mariadb/mariadb.log
pid-file=/run/mariadb/mariadb.pid

 我们的/etc/my.cnf配置也很简单。

我们重新为root用户设置远程登陆权限,重新使用root远程连接,发现还是报错:

Could not connect to address=(host=192.168.xx.xx)(port=3306)(type=master) : Socket fail to connect to host:192.168.xx.xx, port:3306. Connection timed out: connect
  Socket fail to connect to host:192.168.xx.xx, port:3306. Connection timed out: connect
  Socket fail to connect to host:192.168.xx.xx, port:3306. Connection timed out: connect
    Connection timed out: connect
    Connection timed out: connect

 是否是Maria启动后过了超时时间呢?如果时间超过了超时时间,再连接会连接不上。ok!那我们重启Maria服务器。

# 重启Maria数据库
service mysql restart;

重试,发现还是同样的错误!

再者,是否是重启数据库之后,没有自动赋予用户远程登陆的权限呢?那我们以root用户为例,给它赋权:

# 给root用户赋予所有权限,并且是基于所有ip——%
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;

然后刷新权限:

# 刷新权限
flush privileges;

结果完全没有鸟用!

后面从Maria官网查看远程连接这一部分内容(个人猜测就是远程连接地方的问题),发现防火墙设置的问题,记得当初防火墙我打开了的,难不成每次重启服务器都会重置?或者说重启虚拟机都会重置防火墙开关?这个还真不清楚,这次先打开之后,下次再出现本次的问题我们就大致可以推断出来了。

防火墙中配置了3306端口

考虑防火墙是否配置为允许来自远程客户端的传入请求:

在 RHEL 和 CentOS 7 上,可能需要配置防火墙以允许 TCP 从远程主机访问 MySQL。为此,请执行以下两个命令:

firewall-cmd --add-port=3306/tcp 
firewall-cmd --permanent --add-port=3306/tcp

注意,如果提示:
 

\Authorization failed.
    Make sure polkit agent is running or run the application as superuser.

 说明就是该用户的权限问题,那就使用root用户,或者在命令前加sudo,比如:
 

sudo firewall-cmd --add-port=3306/tcp 
sudo firewall-cmd --permanent --add-port=3306/tcp

打开防火墙之后,通过DBeaver可以很顺利的连接上数据库了。但是通过xshell,却还是报错,不过不是之前的连接超时,而是:

Connecting to 192.168.xx.xx:3306...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

Socket error Event: 32 Error: 10053.
Connection closing...Socket close.

Connection closed by foreign host.

Disconnected from remote host(Centos8-DBS-热点-DB) at 10:24:54.

意思就是:

已建立连接。

要跳转到本地shell,请按“Ctrl+Alt+]”。

套接字错误事件:32错误:10053。

正在关闭连接。。。插座关闭。

连接被外部主机关闭。

已断开与远程主机(Centos8 DBS)的连接-热点-10:21:41。

这个问题大家遇到的比较多,网上答案也很多,我们再次就不一一说明了。有机会我们再好好聊聊这个问题。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北冥牧之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值