今天要对自己本地机器上的数据库进行批量清洗和迁移操作,本来项目执行的好好的,就去忙其他的了,忙完回来后,发现报错了。一脸懵~~~~
下面就来说说我这次遇到的问题和解决方法
遇到问题不要慌,先搜一下
大佬们都说遇到这种问题通常有两种原因:
1、磁盘满了;
2、表数据太多了
先按照第一种情况排查一下:
第一步,找到mysql的安装位置,我的是自己电脑(windows)上安装的数据库,我记得是安装在C盘上,就打开了‘文件管理器’,本来我的c盘就所剩不多了,果然满了。后悔把mysql装C盘了。
第二步,清理binary logs
查询binary logs是否开启
show VARIABLES like 'log_%';
log_bin的状态未ON,表明binlog日志开启,结果如下:
第二步:查询日志列表
show binary logs;
结果如下
第三步:删除binlog日志文件,
注意:切勿删除正在使用的binlog!!不要手动去删除,会导致binlog.index和真实存在的binlog不匹配,要使用PURGE:
// 删除一天前的日志
PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY);
// 删除 2023-05-25 18:09:51 前的日志
PURGE BINARY LOGS BEFORE '2023-05-25 18:09:51';
// 删除 DESKTOP-EN54GC6-bin.000065 前的日志
PURGE BINARY LOGS TO 'DESKTOP-EN54GC6-bin.000065';
最后,我们还可以根据自己的情况选择自动清理时效,
// 显示过期时效 binlog_expire_logs_seconds,默认2592000(30天)过期,可以设置 604800(7天)
show variables like '%expire%';
// 设置过期时效
set global binlog_expire_logs_seconds=60*60*24;
// 刷新
flush logs;
设置过期时间也可以直接修改my.ini配置文件,关闭修改再重启
expire_logs_days = 7 #自动删除15天前的日志。默认值为0,表示从不删除。
mysql8.0 关闭binlog :关闭mysql服务,找到my.ini, 在[mysqld] 下添加 skip-log-bin,然后重启MySQL,
注意 :不可以不关闭的情况下,修改重启。 在关闭后,可以下使用reset master把现有的binlog都删除掉,因为binlog关闭了,不会有正在使用的binlog,所以没问题。