mysql 07 故障及解决方案

主从集群下,同步故障,Slave_IO_Running 为 No

Mysql 主从集群下,同步故障,show slave status 命令显示 Slave_IO_Running 为 No

就是连接不上主库,原因主要以下几点,依次排查:

  • IP 错了
  • 端口错了
  • 防火墙端口没开放(我上次是这个错误)
  • 账号密码错了
  • 账号不允许远程登录

远程登录失败

ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.2.2' (111)

解决方案:可能是连接端口错了

ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.2.2' (113)

解决方案:可能是防火墙没开放

程序连接不上,控制台输入完密码后没反应

mysql -uroot -p
password:

然后一直卡住没后续,通过查看 mysql 日志,发现日志也是一直停留在 root@localhost login

重启 mysql、docker 都不管用

调试了很久经同事提醒使用重启大法后问题解决

Index column size too large.

故障描述:我用nacos的官方sql建表报错,原sql

CREATE TABLE permissions (
    role varchar(50) NOT NULL,
    resource varchar(512) NOT NULL,
    action varchar(8) NOT NULL,
    constraint uk_role_permission UNIQUE (role,resource,action)
) 
ERROR: Index column size too large. The maximum column size is 767 bytes.

解决方案

INNODB 引擎,UTF-8,主键字符串 默认最大 767,需要修改

解决方案

先运行脚本


set global innodb_file_format = BARRACUDA

set global innodb_large_prefix = ON

在sql后面追加

 ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

docker 容器二次创建,密码无效

我们第二次创建时设置的新密码
此时,挂载的data目录是没有重新创建的,因此新密码无效,老密码依旧有效

容器时间不对

该问题是宿主机和容器时去不一致导致的。
把本机时区复制到宿主机即可:

docker cp /etc/localtime mysql8:/etc/localtime
docker restart mysql8

Java JDBC 报错Truncated incorrect DOUBLE value

数据库字段和你输入的内容不符,如varchar字段,你Java里输入的是long\int

如果你用的是(update cc set user = :user, Map<String, Object>)做入参的形式,请检查Map对象的value是否he 数据库类型对应!我还是建议都用字符串!!

docker容器一直刷日志

故障:mbind Operation not permitted

查看容器日志docker logs -f mysql,控制台一直报错,这是权限问题

解决方案:我们在run镜像的时候加上--privileged=true

升级到MySQL8的后遗症

故障:navcat连接不上,提示需要更新

之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password,直接去连接Navicat会报错1251。解决问题方法有两种,一种是升级navicat驱动,一种是把mysql用户登录密码加密规则还原成mysql_native_password。

解决方案

修改加密规则

ALTER USER 'hexoadmincp'@'%' IDENTIFIED BY 'hexoadmincp2022' PASSWORD EXPIRE NEVER;          

更新一下用户的密码

ALTER USER 'hexoadmincp'@'%' IDENTIFIED WITH mysql_native_password BY 'hexoadmincp2022';     

升级mysql8后,项目连接数据库异常

1、jdbcurl需追加:

&useSSL=false&serverTimezone=UTC&zeroDateTimeBehavior=convertToNull&allowPublicKeyRetrieval=true

有些老项目,更新成这个试试:

useSSL=false&serverTimezone=UTC

2、更新驱动:

compile group: ‘mysql’, name: ‘mysql-connector-java’, version: ‘8.0.17’

升级mysql8后,项目启动报错一

故障:java.math.BigInteger cannot be cast to java.lang.long

解决方案:是数据库版本与mysql-connector.jar包的版本不兼容造成的。出现问题时的jar包版本为5.1.25,更换为8.0.17(网上说5.1.47也可以,我没试过)后解决了该问题

升级mysql8后,项目启动报错二

故障:Unknown system variable ‘query_cache_size’

解决方案:同样,也是驱动版本太低。更新即可。

升级mysql8后,项目启动报错三

故障:error: jdbcUrl is required with driverClassName.

解决方案:你需要修改jdbcurl,追加

&useSSL=false&serverTimezone=UTC&zeroDateTimeBehavior=convertToNull&allowPublicKeyRetrieval=true

转载请注明来源。 欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。 可以在下面评论区评论,也可以邮件至 sharlot2050@foxmail.com。

文章标题:mysql 07 故障及解决方案

字数:947

本文作者:夏来风

发布时间:2020-11-15, 16:27:01

原始链接:http://www.demo1024.com/blog/mysql-errors/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。