暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Mysql踩过的坑

运维先生 2021-04-15
429

各位扥扥早!


好了废话不多说了,如果有用请转发出去。

Mysql问题 1.

ENFORCE_GTID_CONSISTENCY = 1会造成报错如下:
When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, updates to non-transactional tables can only be done in either autocommitted statements or single-statement transactions, and never in the same statement as updates to transactional tables.

原因是事务中包含MyISAM引擎的表,改变引擎为InnoDB即可
当然也可关闭这个参数,配置文件里配置:
enforce-gtid-consistency=off
#开启
enforce-gtid-consistency=ON


mysql_error.log有提示:
[Warning] IP address '172.18.8.31' could not be resolved: Name or service not known
解决方法:
[mysqld]
skip-name-resolve
然后重启mysql

3.在更新数据时出现:

ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction错误  

#
解决方法:
#查看数据库的进程信息
SHOW PROCESSLIST;
#查看事物表
SELECT * FROM information_schema.INNODB_TRX;
看到里面有一条数据:
trx_mysql_thread_id为1917542
#杀掉阻塞进程
kill 1917542

4.mysql升级之后,执行grant命令提示:

ERROR 1558 (HY000): Column count of mysql.user is wrong. Expected 43, found 39. Created with MySQL 50173, now running 50640. Please use mysql_upgrade to fix this error.

#解决方法:
升级数据结构:mysql_upgrade -uroot -p

5.在执行mysqlbinlog命令解析日志时,提示:

#mysql:5.1 mysqlbinlog:3.3
ERROR: Error in Log_event::read_log_event(): 'Sanity check failed', data_len: 147, event_type: 30

#解决方法:
是mysqlbinlog版本造成的,就是binlog日志文件是高版本mysql生成,使用低版本的mysql会提示此问题。
使用高版本的对应的mysql(5.6)版本和mysqlbinlog(3.4)即可

6.启动mysql问题:

#因为mysql服务器磁盘满,导致mysql自动退出,但是此时mysql.pid还存在,查看mysql状态提示:
MySQL is not running, but lock file (/var/lock/subsys/mysql) exists

#启动mysql时会提示:
Starting MySQL...... ERROR! The server quit without updating PID file (/main/mys ql/mysql.pid)

#解决方法:
查看是否有残留进程并杀死
ps -ef |grep mysql|kill -9

还要用端口命令查看端口,有的话也杀死访问的进程:
netstat -an|grep 3306 (当有进程还在访问mysql时,那么3306端口还是存在的,启动会提示端口已存在)

最后删除/var/lock/subsys/mysql即可。

#另外查不出问题的时候查看mysql的错误日志
2018-12-17 08:42:42 28121 [ERROR] Can't start server: Bind on TCP/IP port: Address already in use
2018-12-17 08:42:42 28121 [ERROR] Do you already have another mysqld server running on port: 3306 ?
2018-12-17 08:42:42 28121 [ERROR] Aborting
此处提示就是在mysql未异常退出之前,有进程还在访问,mysql异常退出之后,此进程还在,那么就会有端口存在了。

文章转载自运维先生,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论