mysql 进阶 (十七)Cannot Connect to Database Server 问题分析
一、前言
由于不同的项目中使用的数据库用户名与密码出现了不一致的情况,在其中之前较早一个项目执行过程中出现“The user specified as a definer ('root'@'localhost') does not exist
”的错误提示。经过网络一番搜索,原因是 root 用户不存在,故自己将用户名改回到之前的用户名,结果出现连接不到数据库的情况,如下图所示:
二、问题分析
可能数据库服务没有启动;
可能指定的数据库连接用户名或密码不正确;
可能数据库连接语句写得不正确;
可能数据库中没有指定的数据库存在;
可能没引 sql 包或没有驱动程序;
三、解决方案
Mysqlbin 目录: C:\Program Files\MySQL\MySQL Server 5.7\bin
删除原来的数据库实例后,创建新的实例,发现还是无法连接数据库,如下所示:
关闭重启 mysql 服务,发现还是无法登录,自己也就纳了闷了。
将 mysql 服务关闭后,可以进入 workbench,但是还是无法连接 mysql。根据下图可获知 mysql 配置文件my.ini
位置:
Can't connect to MySQL server on '127.0.0.1' (10061)
检查密码是否正确。
密码错误的话会提示密码不对,查看一下你的 hosts 的文件。
Hosts 文件位置:C:\Windows\System32\drivers\etc
难道是端口的问题?于是用telnet 127.0.0.1 3308
测试端口,结果它竟然提示:
my.ini
中确实用的是 3308 端口,用netstat -an
查看,3308 处于如下TIME_WAIT
超时状态:
那到底是什么原因呢?在项目中测试发现也是提示“Host 'localhost' is not allowed to connect to this MySQL server”
!
启动mysql
服务,出现下图错误:
尝试无果后,重装!
卸载过程中由于没卸载干净,导致安装时又出现了一系列的问题。悲剧!
Mysql 卸载教程:点击查看
Mysql 安装教程: Windows下MySQL 5.6安装及配置详细图解-51CTO.COM
安装过程中出现了如下错误:
网络搜寻各种方法,还是未能解决问题。
再次转换思路,换个版本试试,其中尝试了 5.7.10.但其是 zip 格式,解压后还需配置一系列的文件,尝试无果后,使用了低版本的 5.5.47,msi 格式,这是傻瓜式安装方式还是比较方便的。第一次安装后,自己曾试图将之前的数据库恢复,无果而终,并且导致无法更改用户名,又是一顿狂卸载,安装,第二次之后,用户名可以正常更改。经测试,一切正常!
数据库要及时备份,否则后果不堪设想!
四、延伸阅读 mysql 批量删除大量数据
假设有一个表(syslogs)有 1000 万条记录,需要在业务不停止的情况下删除其中 statusid=1 的所有记录,差不多有 600 万条, 直接执行 DELETE FROM syslogs WHERE statusid=1
会发现删除失败,因为lock wait timeout exceed
的错误。
因为这条语句所涉及的记录数太多,因此我们通过 LIMIT 参数分批删除,比如每 10000 条进行一次删除,那么我们可以利用 MySQL
这样的语句来完成:
然后分多次执行就可以把这些记录成功删除。
执行大批量删除的时候注意要使用上limit
。因为如果不用limit
,删除大量数据很有可能造成死锁。如果delete
的where
语句不在索引上,可以先找主键,然后根据主键删除数据库。平时update
和delete
的时候最好也加上limit 1
来防止误操作。
版权声明: 本文为 InfoQ 作者【No Silver Bullet】的原创文章。
原文链接:【http://xie.infoq.cn/article/cd6529362e2c75e8ba2800e61】。文章转载请联系作者。
评论