本文油:头条号:西西图图(美食运维) 提供

首先:show OPEN TABLES where In_use > 0; 多刷新基础查看有没有没变动的。没有变动的行,数值一直不变的就是被锁定。

 

2、SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX\G   可以查看具体的所情况

3、show processlist查看都有哪些锁。

4、确定好了的话用这条命令查杀:SELECT concat('KILL ',ID,';') FROM INFORMATION_SCHEMA.PROCESSLIST where db="qxfw";  这里的qxfw是我的库名,你可以根据3哪里显示出来自己的库名来填写。

 

##################  binlog  日志删除   ##############################

1、查看现在都有哪些binlog
MySQL> show binary logs;
 
2、删除指定binlog
purge binary logs to 'mysql-bin.000003';
 
3、查看binlog过期时间
mysql> show variables like 'expire_logs_days'; 或者
mysql> select @@global.expire_logs_days;
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| expire_logs_days | 0 |
+------------------+-------+
1 row in set (0.00 sec)

expire_logs_days=0:表示所有binlog日志永久都不会失效,不会自动删除;

目前需求,只想保留七天日志,其余日志打包、压缩后备份至其他地方:


修改方式:
永久生效(重启后即生效):
修改配置文件my.ini(window系统环境下,若为Linux环境,则修改my.cnf文件)文件:
在[mysqld]标签内增加如下内容
expire_logs_days=7
max_binlog_size=500M

设置之后不会立即清除,触发条件是:

为了使之生效,需要执行flush logs。

mysql> flush logs;
Query OK, 0 rows affected, 64 warnings (0.16 sec


如果binlog非常多,不要轻易设置该参数,有可能导致io争用,这时候可以使用purge命令予以清除:

将bin.000055之前的binlog清掉:
mysql>purge binary logs to 'bin.000055';

将指定时间之前的binlog清掉:
mysql>purge binary logs before '2019-10-13 23:59:59';

注意,不要轻易手动去删除binlog,会导致binlog.index和真实存在的binlog不匹配,而导致expire_logs_day失效

4、临时设定生效方法
set global expire_logs_days = 10; (10天前的全删)
flush privileges;