MySQL8优化

清空慢查询日志

#mysql配置的慢查询日志路径
echo "" > /var/log/mysql/mysql-slow.log 

binlog

binlog有关参数
log_bin:设置此参数表示启用binlog功能,并指定路径名称
log_bin_index:设置此参数是指定二进制索引文件的路径与名称
binlog_do_db:此参数表示只记录指定数据库的二进制日志
binlog_ignore_db:此参数表示不记录指定的数据库的二进制日
max_binlog_cache_size:此参数表示binlog使用的内存最大的尺寸
binlog_cache_size:此参数表示binlog使用的内存大小,可以通过状态binlog_cache_use和binlog_cache_disk_use来帮助测试。
binlog_cache_use:使用二进制日志缓存的事务数量
binlog_cache_disk_use:使用二进制日志缓存但超
binlog_cache_size值并使用临时文件来保存事务中的语句的事务数量
max_binlog_sizeBinlog最大值,最大和默认值是1GB,该设置并不能严格控制Binlog的大小,尤其是Binlog比较靠近最大值而又遇到一个比较大事务时,为了保证事务的完整性,不可能做切换日志的动作,只能将该事务的所有SQL都记录进当前日志,直到事务结束
sync_binlog:这个参数直接影响mysql的性能和完整性
sync_binlog=0:当事务提交后,Mysql仅仅是将binlog_cache中的数据写入Binlog文件,但不执行fsync之类的磁盘 同步指令通知文件系统将缓存刷新到磁盘,而让Filesystem自行决定什么时候来做同步,这个是性能最好的。
sync_binlog=n:在进行n次事务提交以后,Mysql将执行一次fsync之类的磁盘同步指令,同志文件系统将Binlog文件缓存刷新到磁盘。
Mysql中默认设置sync_binlog=0,即不作任何强制性的磁盘刷新指令,这时性能是最好的,但风险也是最大的。一旦系统绷Crash,在文件系统缓存中的所有Binlog信息都会丢失

手动清理binlog

PURGE MASTER LOGS TO 'binlog.000004'; // 清除 binlog.000004 之前的日志
PURGE MASTER LOGS BEFORE '2021-08-13 10:00:00'; // 清除 2021-08-13 10:00:00 前的 binlog日志

MySQL8锁表

在mysql中锁表是很头疼的问题。如果锁表了,紧急情况下先解决问题,不影响生产环境,然后再排查问题根源

简单处理

查询锁表:SHOW OPEN TABLES WHERE In_use > 0;
查询进程:SHOW PROCESSLIST;
定位进程,赋值进程Id
杀死进程:kill id;

详细处理方法

查询死锁表:select * from performance_schema.data_locks;
查看正在锁表的sql:SELECT * FROM information_schema.innodb_trx;
杀掉查询结果中锁表的trx_mysql_thread_id,其中trx_mysql_thread_id对应 show processlist 的Id
kill trx_mysql_thread_id

too many connections问题

如果是开发人员比较多的时候,每个人都链接同一个数据库可能造成超过连接数问题。笔者开发的时候测试环境发生过这个问题。
解决方法:

最大连接数

  • 查看当前最大连接数:show variables like ‘%max_connections%’;
  • 查看现有连接数:show status like ‘Max_used_connections’;
    如果设置的连接数太少,考虑设置增大

等待超时时间

  • show variables like ‘%timeout%’; // 查看session级别的interactive_timeout和wait_timeout
  • show GLOBAL VARIABLES like ‘%timeout%’; // 查看global级别的interactive_timeout和wait_timeout
    如果这里的超时时间过长,可以考虑设置短些,例如:
    wait_timeout = 300
    interactive_timeout = 28800
    修改完配置文件需重启mysql

程序链接数设置

如果以上都没问题,也就是说连接数足够多,并且也容易释放,可以看看程序服务中的配置是否有问题。
在application-xxx.properties文件中是否存在最大连接数设置:spring.datasource.hikari.maximum-pool-size=100
如果这里设置过大的话,连接池会占用大量的连接数。这里只需要把这个值改成10或者20都行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值