MySQL访问报错?

MySQL访问报错?

各位开发大佬与DBA同志,应该会经常遇到在连接MySQL时报错,本文全面介绍该如何排查解决DB的连接问题,希望开发同志读完这篇文章后,自己在使用MySQL时,碰到了MySQL连接问题,能迅速的独立解决,有开发同志可能会有话说了,不是有DBA在嘛,出问题了找DBA!上班时间可以,那下班了呢?或者是在自己电脑上的MySQL呢?求人不如求己,还是多积累点吧。DBA也应可参考参考,加深印象。
总的来说,目前访问MySQL有两种方式:
 Socket文件连接:
 TCP/IP连接
Socket文件连接
这种连接开发大佬们应该很少使用,因为只有在mysql服务的本地机器中才能使用该方法,可了解了解,这一块DBA要重点关注。在mysql所在的服务去连数据库,不加-h参数,或者-h指定为localhost时,会以socket方式来连接mysql服务。
我们先看连接的问题:
在这里插入图片描述
从错误信息来看,显然是mysql这个客户端找不到mysql.sock文件了。 这里有两个可能和一个疑问:
可能一:mysql服务确实没起来,ps -ef | grep mysql查看是否起来
可能二:确实在/var/lib/mysql/下没有mysql.sock文件,去该路径下看看就行
疑问:为啥用mysql命令去连的时候,它知道去/var/lib/mysql下去找这个socket文件呢?请往下看。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
MySQL服务启动后,会创建下列参数指定的文件,服务启动时该文件一直存在,服务关闭时文件删除,若文件存在的时候手抖删除了该文件,那就重启服务吧,这样sock文件又出来了。哈哈!
MySQL访问报错?_第1张图片
问题来了,如果配置文件中的[mysqld]下没指定socket的值,那MySQL服务启动时会在哪里创建呢?mysqld这个服务启动命令中隐藏了答案:
MySQL访问报错?_第2张图片
可以看到,自己没指定socket文件时,mysql会在红圈指定的目录下创建。有的同志结果可能不是上面那样的。那是因为mysqld默认去读你配置文件里[mysqld]模块的内容了,下面查看mysqld是如何读取配置文件的:
在这里插入图片描述
读取顺序

  1. /etc/my.cnf 没这个文件就读下一个
  2. /etc/mysql/my.cnf没这个文件就读下一个
  3. /usr/etc/my.cnf没这个文件就读下一个
  4. ~/.my.cnf没这个文件就。。。mysql按自己默认的来了

同样的道理,mysql命令也会按照上述的方法读取配置文件,获取配置文件中[mysql]模块下的参数信息,不相信的同学可以自己试试,把配置文件socket路径改了,然后用mysql –u -p 去连接,是不是会根据你修改的路径去找socket文件,找不到的话,就报错了。
总的来说,mysqld根据配置文件指定的路径创建socket文件,mysql根据配置文件指定的路径去寻找socket文件,来连接数据库。故若数据库启动了,还是报找不到sock文件,相信各位应该能解决了吧。找到后,指定–socket参数就能连接你的库了。
下面我提供几个帮你找到socket文件的方法:
A. ps -ef | grep mysql /不一定有效/
在这里插入图片描述
B. find / -name ".sock" /。。。。这个只能靠猜。*/
C. show global variables like “%sock%”; 找个能远程连接(tcp/ip连接)的用户连进去看看就知道。
D. 去看配置文件,若配置文件里没有指定socket的值,那么十有八九就在/var/lib/mysql/下面了

TCP/IP连接
tcp/ip方式在mysql中是最常用的连接方式。我们通常会碰到下面一些连接问题。
问题1:ERROR 1045 (28000): Access denied for user ‘dba_yzy1’@‘29.2.227.128’ (using password: YES)
问题2:ERROR 2003 (HY000): Can’t connect to MySQL server on ‘29.2.227.128’ (111)
如果碰到第一个,那恭喜你,DB没有挂,出现这个问题要么就是密码不对,要么就是权限不够。如果碰到第二个,那就需要检查下面的是否到位:

  1. DB服务是否启动:ps -ef | grep mysql
  2. DB的端口是否对你连接的OS开放了:telnet
    在使用mysql命令去连接时,指定-h参数并值不为localhost,则使用tcp/ip方式连接。

连接性能测试
在mysql的本地服务器上,分别以sock方式、tcp/ip方式导出单表。Sock连接耗时:49.500s;tcp/ip连接耗时:1m19.381s
可见,sock的连接方式还是性能不错的,在导数据的时候,建议本地导出,而不是远程导出,当然,要考虑本地磁盘空间够不够。

你可能感兴趣的:(技术)