千金良方:MySQL性能优化金字塔法则
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

13.6 MySQL常见连接问题

下面介绍客户端无法连接服务器的问题,以及解决方法。

● 服务器未启动,可以通过检查服务器进程是否存在来解决(ps aux |grep mysqld,如果未启动则尝试拉起,如果启动失败则检查错误日志排查原因)。通常报错信息类似于如下所示。

■ 以TCP/IP方式连接:ERROR 2003: Can't connect to MySQL server on 'host_name'(111)。

■ 以Socket方式连接:ERROR 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock'(111)。

● 客户端连错端口,可以通过检查服务器进程运行的端口(netstat -ln | grep mysqld),找到正确的端口并在客户端指定连接该端口来解决。

● 服务器启动时使用了--skip-networking或者--bind-address = 127.0.0.1选项,它将仅在本地环回接口上侦听TCP/IP连接,并且不会接受远程连接。可以通过去除这些选项并重启进程来解决。

● 服务器端防火墙未打开MySQL服务器的端口访问权限,可以通过关闭防火墙或者允许MySQL服务器的服务端口对外提供服务来解决。

● 没有使用正确的账号或者密码连接服务器,通常报错信息类似于:ERROR 1045(28000): Access denied for user 'root'@'localhost'(using password: NO)。

● 如果数据库是第一次初始化,且使用了mysqld --initialize-secure命令来初始化,则会为root用户生成一个随机密码,在MySQL服务器启动之后需要在错误日志中搜索password关键字,以找到随机密码进行登录(如果不需要该随机密码,则可以使用mysqld --initialize-insecure命令来初始化数据库),否则会报出拒绝连接的错误。

● 如果只升级了服务器到最新版本,而客户端没有做相应的升级,则可能报出认证协议不支持的错误:Client does not support authentication protocol requested by server;consider upgrading MySQL client。最好的解决办法是升级客户端版本,不建议修改密码认证插件。

● 服务器达到了最大用户连接数限制,此时可以使用具有Super权限的管理员账号登录数据库,修改最大连接数参数。

● 服务器达到了最大错误连接数限制,反复尝试连接的某些客户端被拒绝连接(例如:使用错误的账号或密码反复尝试连接多次,达到了最大错误连接数),此时可以使用管理员账号从其他主机登录数据库执行FLUSH HOSTS语句刷新主机缓存信息,或者修改最大错误连接数参数。

提示:MySQL访问权限控制系统有如下限制。

● 不能明确拒绝指定用户的访问,只能明确允许指定用户的访问。例如:使用正确的账号和密码,从被授权访问的主机上访问数据库。

● 不能单独授权用户只可以创建或删除数据库中的表,而不可以创建或删除数据库本身(指定某用户对某表拥有Create和Drop权限之后,该用户就能够创建和删除该表所在的库了)。

● 账号的密码在服务器中的作用域是全局性的。不能将密码与对特定对象的访问权限挂钩(如数据库、表或存储过程与函数等,即账号的密码与是否有权限访问数据库中的具体某个对象无关)。