› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
fivestrong
V2EX  ›  MySQL

各位大佬,请教一个 mysql 的问题

  •  
  •   fivestrong · May 18, 2020 · 4138 views
    This topic created in 2335 days ago, the information mentioned may be changed or developed.

    一台存数据的 mysql 服务器,版本是 5.7.30 ,然后看日志每分钟有十多条连续的登录失败记录,

    类似这样: 2020-05-18T13:22:49.608114+08:00 2278 [Note] Access denied for user 'xxxx'@'localhost' (using password: NO)

    问题是 mysql 中没有这个 xxx 账户,而且它是从本机 localhost 尝试登录,没有使用密码。

    请问各位大佬有什么思路能够定位这个登录请求是哪个程序发起的。

    我已经把没用的服务都停止了,crontab 定时任务也都清除了,看其他进程也没有啥可疑的,找了好久了,请问有没有什么解决方法?

    Supplement 1  ·  May 18, 2020
    谢谢各位给的思路,好像查到了是谁引起的了。

    先使用 watch -n 1 netstat -ant 动态观察所有连接,然后一个一个停,观察 mysql 日志的报错信息。

    最后停到就剩一些基本的 zabbix_agent 监控有很多进程,关掉之后果然日志不报错了。

    查看了 zabbix 的配置,发现有人配了监控 mysql 状态的指令,这样使得服务端 zabbix 每几分钟都要尝试登录 mysql 。

    把配置还原之后就没问题了。确实跟 navigate 那种原理差不多,有程序被远程调用了。因为和正常的 zabbix_agent 进程混在一起,不好找出来。果然最后还得排除大法。

    最后感谢各位的解答。
    17 replies  •  2020-05-19 16:46:35 +08:00
    yemoluo
        1
    yemoluo  
       May 18, 2020
    还有一种 navicat 等工具用 ssh 方式登录主机然后再连接 mysql 的
    msg7086
        2
    msg7086  
       May 18, 2020 via Android
    有尝试行为的时候用 netstat 看看有没有可疑连接。
    fensou
        3
    fensou  
       May 18, 2020 via iPhone
    webshell,和 ssh 跳转两种可能
    star7th
        4
    star7th  
       May 18, 2020
    可以尝试这么一个思路。停止 mysqk,用一个代理软件代理 mysql 的端口。看看访问日志能不做找出线索。
    julyclyde
        5
    julyclyde  
       May 18, 2020
    @msg7086 这种用 netstat 看不了吧

    @star7th mysql 按你建议的这种代理会导致权限错误的,登录不进来
    star7th
        6
    star7th  
       May 18, 2020
    @julyclyde 那就这样。mysql 的端口改为 3309,原来的 3306 被代理程序监听并转发到 3307
    star7th
        7
    star7th  
       May 18, 2020
    写错,是,原来的 3306 被代理程序监听并转发到 3309
    julyclyde
        8
    julyclyde  
       May 18, 2020
    @star7th
    首先,原 po 提问的问题是遇到了 localhost 过来的错误登录。mysql 里 localhost 和 127.0.0.1 可不是同一个概念
    其次,用代理监听再转发会导致“源 IP”变化,mysql 语境下这种变化会导致登录的其实是另一个用户
    jimrok
        9
    jimrok  
       May 18, 2020
    了解一下 lsof 命令,可以找到跟 3306 端口连接的进程名字和 pid
    yc8332
        10
    yc8332  
       May 18, 2020
    netstat 查一下连接 3306 的 ip 地址和进程
    msg7086
        11
    msg7086  
       May 18, 2020 via Android
    @julyclyde MySQL 只有在连接的时候 localhost 才不是一个概念。服务器端走 TCP 127.0.0.1 连接的时候还是会解析到 localhost 主机用户条目的。

    另外我说用 netstat 主要是要看有没有人远程连上本地服务以后跳板尝试密码,不是为了看程序间的连接。
    julyclyde
        12
    julyclyde  
       May 19, 2020
    @msg7086 你把 unix domain socket 关闭试试,看 localhost 的用户名还能不能连上
    msg7086
        13
    msg7086  
       May 19, 2020
    @julyclyde 当然连不上了。
    我说的是「只有在连接的时候,localhost 才不是一个概念」。
    然后你跟我说能不能连上。
    我寻思着这不是重复一遍我的观点嘛。

    localhost 的特殊处理是来自 libmysqlclient,又不是来自 MySQL Server 。
    你客户端连不连得上,管服务器上的账号验证何事。

    你自己开个测试机,自己运行一下 mysql -h 127.0.0.1,看看 Access denied 后面写的到底是 [email protected] 还是 root@localhost 。
    julyclyde
        14
    julyclyde  
       May 19, 2020
    @msg7086 access denied 是服务器返回的信息,你说的这个场景下当然是 127 了
    msg7086
        15
    msg7086  
       May 19, 2020
    @julyclyde
    # mysql -h 127.0.0.1
    ERROR 1698 (28000): Access denied for user 'root'@'localhost'
    julyclyde
        16
    julyclyde  
       May 19, 2020
    我的实验场景虽然得到和你一样的结果,但是有证据说明身份是由服务器端认定的,而不是客户端自称的:

    mysqld 开启 skip_ssl 参数,避免加密
    strace mysql -h 127.0.0.1 在前面加 strace 观察通信,可以看到下列内容:
    connect 建立连接
    recfrom 收到服务器的 banner 信息
    sendto 只发送了用户名,并没有带有 @127.0.0.1 或者 @localhost 的后缀
    然后 recvfrom 收到服务器返回的错误信息 Access denied for user 'root'@'localhost'
    julyclyde
        17
    julyclyde  
       May 19, 2020
    不过我之前说的“你说的这个场景下当然是 127 了”确实是错了。我再研究一下原因
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1009 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 18:45 · PVG 02:45 · LAX 11:45 · JFK 14:45
    ♥ Do have faith in what you're doing.