MySQL数据库连接问题整理

1)连接MySQL时出现2003 - Can't connect to MySQL server on 'localhost' (10061 Unknown error)问题

MySQL数据库连接问题整理

出现该问题,首先检查MySQL 服务是否启动,如果没有启动,则要启动这个服务。可以通过快捷键“Ctrl + Alt + .”的方式打开任务管理器,找到“服务”选项 ,看到MySQL已停止,说明该问题的根源正是MySQL服务没有启动,点击“打开服务”找到

MySQL数据库连接问题整理

接着,选择启动类型为“自动” -> 启动 -> 应用 -> 确定,这样每次开机MySQL即会自动启动,但是比较耗内存。建议,设置启动类型为“手动” ,这样每次用的时候手动 -> 启动 -> 应用 -> 确定,即可。

MySQL数据库连接问题整理

也可以,进入MySQL的安装目录,双击mysql.exe可执行文件进行启动。


2)Can't connect to MySQL server on localhost (10061)解决方法可以参考https://www.jb51.net/article/26505.htm


3)问题描述:mysql无法连接远程数据库(ERROR 2013:Lost connection to MySQL server)

公司的一台电脑,长期开机,没有重启过,突然有一天出现以下错误,再也无法重新连接到远程数据库。具体错误如下:

Lost connection to MySQL serverat ‘reading initial communication packet', system error: 0

问题分析:

查了很多资料,网上都说要修改配置文件。

最近服务器很不稳定,于是重装了mysql 和php 服务,但是接着却遇到了很头疼的麻烦。
远程连接mysql是总是提示:

Lost connection to MySQL server at ‘reading initial communication packet', system error: 0

很明显这是连接初始化阶段就丢失了连接的错误。
google半天大多是说的注释掉配置文件中 bind-address = 127.0.0.1 这一句。
但是我的配置文件并没有配置这一句,各种搜索均未果。今天偶然在网上看到一个遇到同样问题的人贴出的配置,发现他多了一句配置 skip-name-resolve,抱着试试看的态度改了一下并重启了mysql服务,果然远程一下子就连接上了,真是无语。
其实问题很简单,都是MySQL的配置文件默认没有为远程连接配置好,只需要更改下MySQL的配置文件即可。
具体的解决步骤如下,希望能帮助遇到同样问题的同学们:
找到并修改my.cnf文件。在不同的Linux系统下,my.cnf放在不同的位置。这里以Ubuntu Server做示例,其他系统请根据情况自行找到my.cnf的路径。一般只会存放在/etc/my.cnf或者/etc/mysql/my.cnf下。
首先用vim打开my.cnf:


vim /etc/mysql/my.cnf

看看是否有绑定本地回环地址的配置,如果有,注释掉下面这段文字:(在文字之前加上#号即可)


bind-address = 127.0.0.1

然后找到[mysqld]部分的参数,在配置后面建立一个新行,添加下面这个参数:
skip-name-resolve
保存文件并重启MySQL:

/etc/init.d/mysql restart

这样就会发现,问题已经解决了!远程连接不会丢失了。


问题解决:

电脑里面找不到my.cnf文件(linux),因为是win7系统,是my-default.ini文件。在安装目录下。

在配置文件里找不到网上说的bind-address = 127.0.0.1,修改了skip-name-resolve也不行。

 最后解决:

重启电脑,也就是重启mysql后就可以了。

为什么重启之后就可以了呢?很有可能是设置的timeout时间太少了!或者是太长时间没有操作过数据库造成的!其实更合理的解决方案应该是把timeout时间更改一下。

另外,还有一篇文章提到

----------------------------------------------------------------------首先是如何更改MySQL设置----------------------------------------------------------------

1.进入Mysqld

如果已经设置mysql/Bin环境变量,直接在CMD里输入命令,如果没有设置Mysql环境变量,去Mysql安装目录的Bin文件夹里运行 

F:\AppServ\MySQL\bin\mysql.exe  -u root -p

其中root是用户名,然后就可以进入Mysql命令行环境了

2.以后的每一句Mysql命令,每次都要以分号;为结束标识,而不是以回车。

3.注意,,每次都需要重启Mysql才可以使设置生效!!

当然了,如果你直接在Mysql安装目录的 my.ini加上设置值,则可以在Mysql启动时加载设置。比如connect_timeout = 120

----------------------------------------------------------------------然后是需要更改什么参数解决这个问题-------------------------------------------------

当WEB服务器负载高的时候,经常会出现这种错误,

原因:

MySQL默认connect_timeout是5秒,超过了这个时间MySQL的server端就会返回“Bad handshake”。

解决办法:

1.大多数时候设置"set global connect_timeout=60;"是可以解决问题的;

我们可以通过执行“SHOWSTATUS LIKE 'aborted%'”,可以观察到
Variable_name Value
Aborted_clients 6
Aborted_connects 15010

觉得是否要增加connect_timeout的时间,"Aborted_connects"将会随着服务端放弃客户端初始连接而增加。如果"Aborted_connects"很大,并且不断增加,就需要增加"connect_timeout".

2.在MySQL的配置文件中[mysqld]添加"skip-name-resolve",减少域名解析的时间

3.部署服务器端的网络要好,至少大于100Mbps/s

4.如果是在调用mysql_query的时候出现的问题,那就需要把"net_read_timeout"的时间调成30秒,或者60秒,或者更大的值

5.如果还不能解决问题,那估计是你的SQL语句中含有BLOB这种大类型,我们就需要增加"max_allowed_packet"的值了


如果,尝试了以上的办法都没有连接到数据库,请检查一下数据库的IP地址、端口号、用户名、密码、数据库字符集格式等设置是否正确,有时正是这些不起眼“小的问题”,反而造成容易忽略的不容小视的大麻烦。一遍遍地查找问题不得解决,不仅造成时间的浪费、精力的损耗,更有一种挫败感,所以,请不要忽略每一个小细节。

参考:

        1. https://www.jb51.net/article/26505.htm

        2. http://blog.****.net/aaa123524457/article/details/48826725

        3. http://blog.****.net/donglynn/article/details/37668873

        4. http://www.jb51.net/article/51480.htm