MySQL-客户端登录问题

1. 问题描述

客户端工具使用账号文件连接服务失败,如下图

2. 问题分析排查

2.1  命令行方式或是使用全局配置文件验证账号密码文件是否有误

mysqladmin --defaults-file=/tmp/tmp.ddNIfIJeas pingmysqladmin --host=localhost --user=root --password=root --port=3308 --socket=/ups/app/mysql/mysql3308/logs/mysql3308.sock ping

-- 如果都正常,表明账号密码文件配置无误。否则,检查文件是否配置异常(如书写错误)

2.2 检查全局配置文件是否存储了默认配置信息

-- 全局参数配置优先级mysqladmin |grep -A1 ‘Default options‘

-- 注意: 上面的配置文件优先级都比自定义路径配置文件优先级高,相同配置被覆盖,这也会引起连接数据库失败。

2.3 检查全局参数配置文件及自定义配置文件中程序或组名称配置

  如果选项组名称与程序名称相同,则该组中的选项专门适用于该程序。例如,[mysqld]和[mysql] 组分别应用于mysqld服务器和 mysql客户端程序。前导和尾随空格会自动从选项名称和值中删除。配置文件中后面指定的选项将覆盖先前指定的选项。

[client]port=3306socket=/tmp/mysql.sock[mysqld]port=3306socket=/tmp/mysql.sockkey_buffer_size=16Mmax_allowed_packet=8M[mysqldump]quick

--  [mysqldump]可使 mysqldump特定的选项覆盖 [client]选项,因此,有可能导致客户端选项值与自己预期的不一样导致连接失败。

    此次问题的原因是~/.my.cnf文件配置选项值配置错误账号密码且它的优先级高于自定义配置文件,从而导致登录数据库失败。


3. 总结

1)先排查或是依次列出服务器上所有的参数配置文件路径并逐一检查文件选项组中选项值

for item in $(mysqladmin |awk ‘/^Default options/{getline;print}‘ |awk ‘{i=1;while(i<=NF) {print $i;i++}}‘); do echo "$item:" [[ -f "$item" ]] && grep ‘^\[[a-Z0-9]*\]‘ $itemdone

相关文章