MYSQL的问题解答

 参考博客:https://blog.csdn.net/xiaomei_haimi/article/details/81087037

MySQL导入数据库错误“ERROR 2006 (HY000):MySQL server has gone away” 这是MySQL数据库中常见的一个错误,导致这个错误的原因主要有几个。一般而言,这实际上意味着“您的SQL语句失败,因为???失去与数据库的连接”,我们要做的就是检查出????

1. MySQL 服务器真的不见了

     我们可以通过检查服务器正常运行时间(uptime)和服务器的错误日志来检查是否服务器确实消失了。  

       查看MySQL的正常运行时间(uptime):show global status like 'uptime';

复制代码
mysql> show global status like 'uptime';
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| Uptime        | 178702 |
+---------------+--------+
1 row in set (0.01 sec)

mysql>
复制代码

     查询错误日志的存储位置,然后打开错误日志,根据日志记录,确认是否存在服务器宕机。

     查询错误日志的存储位置:show variables like '%error';     

复制代码
mysql> show variables like '%error';
+---------------+---------------------+
| Variable_name | Value               |
+---------------+---------------------+
| log_error     | /var/log/mysqld.log |
+---------------+---------------------+
1 row in set (0.00 sec)

mysql>
复制代码

       如果MySQL服务器确实消失了,它是关闭了还是崩溃了,MySQL的错误日志会提供答案。通常MySQL的守护程序(mysqld)将由mysqld_safe包装器进程重新启动。
  
 2. 连接超时

     查看各项连接时间:show global variables like '%timeout';

复制代码
mysql> show global variables like '%timeout';
+-----------------------------+----------+
| Variable_name               | Value    |
+-----------------------------+----------+
| connect_timeout             | 10       |
| delayed_insert_timeout      | 300      |
| have_statement_timeout      | YES      |
| innodb_flush_log_at_timeout | 1        |
| innodb_lock_wait_timeout    | 50       |
| innodb_rollback_on_timeout  | OFF      |
| interactive_timeout         | 28800    |
| lock_wait_timeout           | 31536000 |
| net_read_timeout            | 30       |
| net_write_timeout           | 60       |
| rpl_stop_slave_timeout      | 31536000 |
| slave_net_timeout           | 60       |
| wait_timeout                | 28800    |
+-----------------------------+----------+
13 rows in set (0.00 sec)
复制代码

      这些值是相对是MySQL的默认值,但是如果你的超时时间很短,则可能会出现这个错误,比如:

3. 你的SQL语句被杀死了

     有些系统会主动杀死运行时间过长的SQL语句,我们可以通过查看已经执行的kill语句数量来检查是否可能发生这种情况。

     查看mysql请求连接进程被主动杀死:show global  status like 'com_kill';

复制代码
mysql> show global  status like 'com_kill';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Com_kill      | 27    |
+---------------+-------+
1 row in set (0.01 sec)

mysql>
复制代码

4. 你的SQL语句太大了

     稍微难以测试和验证,但是MySQL使用最大数据包站站点进行服务器和客户端之间的通信。如果语句包含大字段,则可能由于SQL语句的大小,而被中止。

      我们可以通过语句查看一下允许的最大包大小:show global variables like 'max_allowed_packet';   (1024*1024*5=5242880)

复制代码
mysql> show global variables like 'max_allowed_packet';
+--------------------+----------+
| Variable_name      | Value    |
+--------------------+----------+
| max_allowed_packet | 16777216 |
+--------------------+----------+
1 row in set (0.00 sec)

mysql>
复制代码

     如果值比较小,可以设置大一点:set global max_allowed_packet=1024*1024*16; 如果修改后不够大,可以继续加大。

    注:通过命令行设置的大小仅对本次的有效,重启后就会回归原始值。通过修改配置文件(my.ini)则可以永久的设置参数。

posted @   大风歌兮  阅读(544)  评论(0编辑  收藏  举报
编辑推荐:
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
阅读排行:
· 《HelloGitHub》第 108 期
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单
· C# 13 中的新增功能实操
· Supergateway:MCP服务器的远程调试与集成工具
点击右上角即可分享
微信分享提示