MySQL-Q&A-异常问题及解决方案(持续更新)

这篇具有很好参考价值的文章主要介绍了MySQL-Q&A-异常问题及解决方案(持续更新)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MySQL-Q&A(持续更新)

MySQL-Q&A-异常问题及解决方案(持续更新),数据库,mysql,数据库,问题解决方案

1.1 PID文件找不到

  • 问题描述

    错误详情:

    ERROR!The server quit without updating PID file (/usr/local/mysql/data/localhost.localdomain.pid)

  • 解决方案

    首先排查配置文件,一般路径为:/etc/my.cnf

    检查是否有多余空格、无效属性、无效字符等

    如未检查出错误,将配置文件还原最初尝试启动,或者拷贝一份其他系统的配置文件。

1.2 数据库模式问题

  • 问题描述

    导入SQL文件时报错(在执行创建表或者增加字段时,发现row size长度过长,会导致出现以下错误)

    [ERR] 1118 - Row size too large (> 8126). Changing some columns to TEXT or BLOB

  • 解决方案

    查看严格模式是否开启

    此异常是因为数据库开启了严格模式

    # 该sql语句查询数据库严格模式属性
    show variables like '%innodb_strict_mode%';
    

    执行后,innodb_strict_mode属性为ON,则代表严格模式开启,需要关闭

    Variable_name Value
    innodb_strict_mode ON

    修改严格模式配置

    # 修改MySQL配合文件,一般在/etc/my.cnf
    [root@localhost ~]# vi /etc/my.cnf
    # 在[mysqld]配置项下面新增一行
    [mysqld]
    innodb_strict_mode=0
    # 保存后,重启MySQL服务
    [root@localhost ~]# service mysqld restart
    

    查看严格模式是否修改

    # 登录MySQL,查询innodb_strict_mode为OFF,说明已关闭
    show variables like '%innodb_strict_mode%';
    

    问题解决

1.3 时区问题

  • 问题描述

    连接报错信息如下:

    java.sql.SQLException: The server time zone value ‘�й���׼ʱ��’ is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.

  • 解决方案

    连接url添加时区配置

    url: jdbc:mysql://localhost:3306/testuseUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC

1.4 MySQL主从错误

  • 问题描述

    MySQL主从库不同步1236错误:could not find first log file name in binary log index file错误是主从的一个日志问题,只要简单的配置一下即可解决。

    最近造成MySQL主从库不同步问题,主要是因为电脑断了一下电,
    从库日志中的错误:

    Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 
    ‘Could not find first log file name in binary log index file’
    
  • 解决方案

    1. 停止从库同步

      mysql >slave stop;
      
    2. 主库中关闭当前的二进制日志文件并创建一个新文件,新的二进制日志文件的名字在当前的二进制文件的编号上加

      mysql >flush logs;
      
    3. 查看主库状态,主要查看日志文件和位置:

      mysql >show master status;
      
    4. 回到从库中,执行命令,使日志文件和位置对应主库:

      mysql >CHANGE MASTER TO MASTER_LOG_FILE='log-bin.000005',MASTER_LOG_POS=107;
      
    5. 启动从库:

      mysql >slave start;
      mysql >show slave status; 
      
    6. 状态如下,基本上是正常了,可以主库修改,测试一下从库是否同步。

      Slave_IO_State: Waiting for master to send event
      Slave_IO_Running: Yes
      Slave_SQL_Running: Yes
      

1.5 MySQL连接错误

  • 异常描述

    No appropriate protocol (protocol is disabled or cipher suites are inappropriate)

  • 异常原因

    javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)

    The following required algorithms might be disabled: SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, include jdk.disabled.namedCurves. Edit the list of disabled algorithms to include required algorithms. You can try to enable TLSv1 or TLSv1.1 first.

    JDBC driver may have disabled TLS > 1.1.

  • 解决方案

    在URL中添加在数据库后面添加

    ?createDatabaseIfNotExist=true&useSSL=false
    

    如:

    jdbc:mysql://192.168.2.2:3306/test?createDatabaseIfNotExist=true&useSSL=false
    

1.6 MySQL/MariaDB drop database error

  • 异常描述

    ERROR 1010 (HY000): Error dropping database (can’t rmdir ‘./db_test’, errno: 39)

  • 解决方案

    直接去MySQL/MariaDB数据库目录下删掉

    # rm -rf /usr/local/mysql/data/db_test
    

    有时候目录不一样,可以直接查找目录

    # 查询到数据库目录删掉就可以
    find / -name db_test
    

1.7 group_concat 长度限制

  • 默认值

    group_concat 默认值 1024

  • 属性详情

    • 用了group_concat后,select里如果使用了limit是不起作用的.
    • 用group_concat连接字段的时候是有长度限制的,并不是有多少连多少。但你可以设置一下。
    • 使用group_concat_max_len系统变量,你可以设置允许的最大长度。
    • 程序中进行这项操作的语法如下,其中 val 是一个无符号整数:
      SET [SESSION | GLOBAL] group_concat_max_len = val;
    • 若已经设置了最大长度,则结果被截至这个最大长度。
      在SQLyog中执行 SET GLOBAL group_concat_max_len = 10 后,重新打开SQLyog,设置就会生效。
    • GROUP_CONCAT将某一字段的值按指定的字符进行累加,系统默认的分隔符是逗号,可以累加的字符长度为1024字节。可以对这些参数进行修改。
  • 示例

    • 累加

      select group_concat(f_a) from t_one group by f_b;

      按f_b进行分组查询,将每组中的f_a进行累加。

    • 修改默认的分隔符

      select group_concat(f_a separator ‘_’) from t_one group by f_b;

      separator 是一个关键字,后面跟着要进行分隔的字符

    • 排序

      select group_concat(f_a order by f_a separator ‘_’) from t_one group by f_b;

  • 修改默认字符大小

    1).在MySQL配置文件中加上
    group_concat_max_len = 102400 #你要的最大长度
    2).可以简单一点,执行语句,可以设置作用范围
    SET GLOBAL group_concat_max_len=102400;
    SET SESSION group_concat_max_len=102400;

  • 和concat使用

    group_concat默认返回的是BLOB大对象,可以使用concat,返回字符串,还可以在返回的内容,在加入其它的数 据。

1.8 Mysql的大字段问题

1.8.1 问题描述
  • 报错一

    Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. You have to change some columns to TEXT or BLOBs

  • 报错二

    Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.

1.8.2 问题原因

因为mysql-innodb是按照page存储数据的,每个page max size是16k,然后每个page两行数据,所以每行最大8k数据。如果你的字段是blob之类的话,会存储在page之外的溢出区里。

但是innodb默认的approach(羚羊)存储格式会把每个blob字段的前864个字节存储在page里,所以你的blob超过一定数量的话,单行大小就会超过8k,所以就报错了

1.8.3 解决方案

解决方式是使用innodb的Barracuda(梭鱼) 存储格式

这种格式对blob字段的处理方式是在page里头只存储一个20byte大小的指针,其它全存在溢出区,所以你轻易超不了8k

  • 步骤一

    打开mysql的配置my.ini。添加:max_allowed_packet=16M

  • 步骤二

    打开mysql的配置my.ini。在innodb配置出添加:innodb_file_per_table=1

  • 步骤三

    然后命令检查下上述开关是否打开。

    show variables like ‘%per_table%’;

  • 步骤四

    设置mysql全局变量:innodb_file_format = Barracuda(梭鱼)

    命令:set GLOBAL innodb_file_format = ‘Barracuda’;

    然后检查下是否设置好了:

    命令:show GLOBAL VARIABLES LIKE ‘%file_format%’;

  • 步骤五

    设置对应表的属性:ROW_FORMAT=COMPRESSED

    然后检查下标的属性是否是你设置的:COMPRESSED文章来源地址https://www.toymoban.com/news/detail-838734.html

到了这里,关于MySQL-Q&A-异常问题及解决方案(持续更新)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深入探讨MySQL并发事务的问题及解决方案

    人不走空                                                                          目录         🌈个人主页:人不走空       💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 1. 脏读(Dirty Read) 2. 不可重复读(Non-repeatable Read) 3. 幻读(Phantom Rea

    2024年03月09日
    浏览(91)
  • [前车之鉴] SpringBoot原生使用Hikari数据连接池升级到动态多数据源的深坑解决方案 & RocketMQ吞掉异常问题排查

    当前业务场景我们使用原生SpringBoot整合Hikari数据源连接池提供服务,但是近期业务迭代需要使用动态多数据源,很自然想到dynamic-source,结果一系列惨案离奇发生。。。 原生SpringBoot整合HikariCp数据源连接池配置【这个是没问题的配置】 而升级后的动态多数据源配置如下:【

    2024年02月01日
    浏览(54)
  • 北邮22级信通院数电:Verilog-FPGA(1)实验一“跑通第一个例程” 过程中遇到的常见问题与解决方案汇总(持续更新中)

    北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章,请访问专栏: 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 问题一:Verilog代码没有跑通  报错信息: 错因分析: 问题二:已连

    2024年02月07日
    浏览(64)
  • JDBC连接MySQL后出现中文字符乱码的问题及其解决方案

    最近在做JavaWeb课程的实验课,今天在尝试jsp通过jdbc连接数据库向MySQL中的user表插入数据后, 表内数据出现了中文乱码的问题 。下面将详细给出本次问题出现场景以及详细的解决方案。 在我的MySQL中的数据库db1里,有一个名为“user”的表,其属性值如下: 通过navicat向表格中

    2024年02月01日
    浏览(44)
  • IDEA链接MySQL数据库遇到的部分问题及解决方案

    合理怀疑MySQL是不是克我,上次配环境配到崩溃就是因为MySQL安装失败,这次是因为链接不上IDEA 闲话少叙,直接看代码、报错信息以及解决方式: 代码: 报错信息:Tue Dec 12 01:47:57 CST 2023 WARN: Establishing SSL connection without server\\\'s identity verification is not recommended. According to MySQL 5

    2024年02月05日
    浏览(57)
  • MacBook Pro(M1芯片)安装mysql以及一些的问题解决方案

    设备芯片及系统版本 1 安装包下载  官方下载网址: MySQL https://www.mysql.com 第一步 进入官网后点击DOWNLOADS。 第二步 在页面向下找到如图,点击进入。 第三步 选择此项。   第四步  选择版本与下载(M1芯片选择arm64版本)。 2 安装过程   第一步 下载好安装包后双击打开   第

    2024年02月14日
    浏览(51)
  • 外部navicat无法连接mysql数据库的问题原因及解决方案

    问题起因是这样:在linux操作中的docker中部署了一个数据库,数据库启动之后,端口也映射了(创建容器时用 -p 30036:3306进行的映射),但是在外不想使用navicat连接时,怎么都连不上,本人遇到的问题如下 一、端口虽然映射了,但是服务器上的30036端口并未对外开放,因此要先开

    2024年02月07日
    浏览(56)
  • MySql数据库5.7升级到8.1遇到的问题与解决方案

    Oracle MySql安全漏洞CVE-2023-22056等漏洞爆出来后,准备对系统的MYSQL数据库进行升级,由5.7升级到8.1,本文主要介绍下升级过程中的几个问题。 通过navicat导出数据库的结构和数据,以便升级后恢复到新版本。 下载地址:MySQL :: Download MySQL Community Server 因为系统服务是通过wamp提供

    2024年02月15日
    浏览(37)
  • Unity连接数据库mysql全过程+可能遇到的问题与解决方案

    目录 一、具备条件 二、unity连接mysql 三、问题总结 1. Mysql安装完成         安装完成后需要查看mysql的版本,打开终端(管理者身份运行),输入以下语句登录mysql,查看MySQL版本; 可以看到我下载的版本是 5.7.38; 2. MySQL Connector/NET下载 目的:为了搭建unity连接mysql的环境

    2024年02月03日
    浏览(66)
  • Debian系统写Mysql时中文出现乱码无法定入的问题解决方案

    原因是操作系统可能精简安装,没有GBK字符集,只有UTF8在转换或使用的时候有问题。 使用locale -a查看系统支持的字符集。正常的比较全的字符集的操作系统如下: 有问题的操作系统字符集如下: 解决方案: 在Debian上安装GBK或GB2312字符集,可以按照以下步骤进行操作: 更新

    2024年01月19日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包