mysql问题处理记录

Posted Mr.D

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql问题处理记录相关的知识,希望对你有一定的参考价值。

1、使用 navicate 导出 csv 文件用 excel 打开乱码

  由于excel默认编码是gbk,而navicate导出数据默认编码是utf-8,因此。。。

  解决办法:

    1. 使用WPS打开文件,然后另存为新的csv文件(或者直接复制粘贴到新的excel文件中),再用excel打开编码就正常了
    2. 使用代码修改 csv文件BOM头,改为UTF8,则excel在打开时就会自动识别编码

 

2、linux环境下安装python mysqldb模块

  需要先安装依赖环境

    yum install mysql-devel -y

  然后安装python模块

    py2  pip install mysql-python

    py3  pip install mysqlclient

 

3、表损坏 linux Table is marked as crashed and should be repaired

   检查表状态  mysql> check table table_name;

   修复表  mysql> repair tables table_name;

 

4、ImportError: libmysqlclient.so.18: cannot open shared object file: No such file or directory

  解决办法:

    到mysql安装目录里找到这个文件并且做一个软连接到/usr/lib

    示例: mysql安装目录为 /usr/local/mysql

    32位系统

        ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib/libmysqlclient.so.18
      64位系统
        ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib64/libmysqlclient.so.18

 

5、关于SQL NO CACHE

  当我们想用SQL_NO_CACHE来禁止结果缓存时发现结果和我们的预期不一样,查询执行的结果仍然是缓存后的结果。其实,SQL_NO_CACHE的真正作用是禁止缓存查询结果,但并不意味着cache不作为结果返回给query。捏可以使用 RESET QUERY CACHE 来清空所有缓存,然后接下来的查询应该就会慢下来。或者在某些情况下,如果你对表做了修改,缓存也会自动失效。

  英文原文:

  SQL_NO_CACHE means that the query result is not cached. It does not mean that the cache is not used to answer the query. You may use RESET QUERY CACHE to remove all queries from the cache and then your next query should be slow again. Same effect if you change the table, because this makes all cached queries invalid.

 

6、Too many connections

    连接数超过了 MySQL 设置的值,与 max_connections 和 wait_timeout  都有关系。wait_timeout 的值越大,连接的空闲等待就越长,
  这样就会造成当前连接数越大。
    解决方法:
      修改 MySQL 配置文件(Windows下为 my.ini, Linux下为 my.cnf )中的参数:
      • CODE: [COPY]
      • max_connections = 1000
      • wait_timeout = 5
      如果没有可以自行添加,修改后重启 MySQL ,如果经常性的报此错误,请您按照服务器环境搭建教程检查下你的服务器

 

7、ERROR 2013 (HY000): Lost connection to MySQL server at ‘reading authorization packet’, system error: 104

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

    原因:
      MySQL默认connect_timeout是5秒,超过了这个时间MySQL的server端就会返回“Bad handshake”。
    解决办法:
      1.大多数时候设置"set global connect_timeout=60"是可以解决问题的;
        我们可以通过执行"SHOW STATUS LIKE ‘aborted%‘",可以观察到
          Variable_name Value
          Aborted_clients 6
          Aborted_connects 15010
        Aborted_connects 将会随着服务端放弃客户端初始连接而增加。
        如果 Aborted_connects 很大,并且不断增加,就需要增加"connect_timeout".
      2.在MySQL的配置文件中[mysqld]添加"skip-name-resolve",减少域名解析的时间
      3.如果是在调用mysql_query的时候出现的问题,那就需要把"net_read_timeout"的时间调成30秒,或者60秒,或者更大的值
      4.如果还不能解决问题,那估计是你的SQL语句中含有BLOB这种大类型,我们就需要增加"max_allowed_packet"的值了
    参考资料:
 
  8、自动更新修改时间
    新建字段,类型选择 timestamp
 
  9、MySQL Server Error:The ‘InnoDB’ feature is disable
    应该是 mysql数据库将InnoDB存储引擎 给禁用了。
    解决的方法只要将InnoDB引擎打开即可:打开我的 my.ini 文件,查找 skip-innodb, 改为 #skip-innodb,之后重启mysql,问题解决。
 
  10、Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or
    ROW_FORMAT=COMPRESSED may help.
    原因:
      字段太多,导致单行记录过大,我是建了一个200多字段的表出现的这个问题
    解决办法:
      事实证明 网上说的一大堆都没啥卵用 直接把数据表引擎改为MyIASM就好了

 

 

以上是关于mysql问题处理记录的主要内容,如果未能解决你的问题,请参考以下文章

ELK+MySQL出现大量重复记录问题处理

Mysql 性能调优问题

MySQL主从同步报错故障处理记录

PHP - 处理大数据

处理具有数百万条记录更新和大量读数的 MySQL 表的最佳方法

Centos6.5安装Seafile,遇到的问题处理记录。