• MySQL error 是哪里来的


    在使用MySQL的过程,有时会遇到MySQL 报错信息,例如,

    权限报错:

    Error 1045: Access denied for user 'root'@'10.3.18.88' (using password: YES)
    

    连接报错:

    Error 2013: Lost connection to MySQL server during query
    

    无法识别的MySQL server报错:

    Error 2005: Unknown MySQL server host .....
    

    这些错误信息哪里来的呢,都是MySQL server 服务端返回的错误吗?

    1.MySQL error分类

    实例上,MySQL error, 按照产生错误的来源,主要包括两类,一类是MySQL server error,另一类是MySQL client error。

    MySQL server error,是 server 端产生的,返回给client。例如,权限报错:
    Error 1045: Access denied for user 'xxx'@'xxx' (using password: YES),可以通过网络抓包,确定是server端返回给client的。

    MySQL client error,是 client端产生的,错误码对应关系在client端MySQL代码库中。

    因此,server error 与 client 端使用的MySQL 代码库没有关系,而 client error 与 client端使用的MySQL代码库有关。

    这个好像听起来是废话。

    举个例子,就会更容易理解一些。

    例如,在连接数据库的使用场景中,使用golang语言中 go-sql-driver/mysql的时候,从来没有遇到过类似Error 2013: Lost connection to MySQL server during query这种报错。

    但是在使用Python的MySQLdb,却是不是遇到这种报错。

    通过查看代码实现,我们发现,

    go-sql-driver/mysql中,没有搜索到MySQL 错误的任何定义。

    MySQLdb中,却是有搜到的。

    我们再来做下测试。

    2.测试

    下面分别 使用go-sql-driver/mysql和MySQL 命令行工具mysql 连接一个不存在的实例no-such-host,对比下报错信息。

    首先看下go-sql-driver/mysql的测试。

    package main
    
    import (
            "database/sql"
            "log"
    
            _ "github.com/go-sql-driver/mysql"
    
    )
    
    var DB *sql.DB
    
    var dataBase = "root:Aa123456@tcp(no-such-host:3306)/app_test?loc=Local&parseTime=true"
    
    func Init() {
            var err error
            DB, err = sql.Open("mysql", dataBase)
            if err != nil {
                    log.Fatalln("open db fail:", err)
            }
    
            err = DB.Ping()
            if err != nil {
                    log.Fatalln("ping db fail:", err)
            }
    }
    
    func main() {
            Init()
    }
    
    

    output:

    2021/11/17 15:22:13 ping db fail: dial tcp: lookup no-such-host: no such host
    

    接着,再使用mysql命令行测试:

    mysql -h no-such-host
    ERROR 2005 (HY000): Unknown MySQL server host 'no-such-host' (0)
    

    可以看到,这两个测试的报错信息完全不同。

    基于以上,

    go-sql-driver/mysql 代码中没有MySQL client error定义。

    MySQL client error是 与client 端的MySQL代码库高度相关的。

    3.参考

    go-sql-driver/mysql

    MySQL Error Reference

    Just try, don't shy.
  • 相关阅读:
    OpenCV学习笔记(一)
    scrapy学习笔记一
    Mac上使用selenium自动运行chrome
    【js Utils】web前端工具帮助类kikyoUtils
    【jq 分享】伪微信分享
    【Winform 动图】winform窗体显示动图
    【 Base<T> 】IBaseDao 和 IBaseService 通用 基类 实现
    【js 是否手机】JavaScript判读当前是否是手机端
    【Spring helper】在controller和service间添加业务处理helper类
    【 spring resources 】maven项目resources文件夹,配置文件的spring加载方式
  • 原文地址:https://www.cnblogs.com/lanyangsh/p/15615354.html
Copyright © 2020-2023  润新知