关于MYSQL主从复制的几种模式
从 MySQL 5.1.12 开始,可以用以下三种模式来实现:
– 基于SQL语句的复制(statement-based replication, SBR),
– 基于行的复制(row-based replication, RBR),
– 混合模式复制(mixed-based replication, MBR)。
相应地,binlog的格式也有三种:STATEMENT,ROW,MIXED。 MBR 模式中,SBR 模式是默认的。
1. 原因
开启MySQL binlog日志的服务器,如果不设置自动清理日志,默认binlog日志一直保留着,时间一长,服务器磁盘空间被binlog日志占满,导致MySQL数据库出错。
2. 解决方案
2.0 查看binlog 日志
mysql> show binary logs;
-
更多
-
删除某个日志文件之前的所有日志文件
purge binary logs to 'mysql-bin.000035';
-
清理2019-09-09 13:00:00前binlog日志
PURGE MASTER LOGS BEFORE ‘2019-09-09 13:00:00’;
-
清理3天前binlog日志
PURGE MASTER LOGS BEFORE DATE_SUB(NOW( ), INTERVAL 3 ``DAY``); --BEFORE,变量的date自变量可以为'YYYY-MM-DD hh:mm:ss'格式。这里的清理是指从此刻-3243600s前的文件,是此文件最后更新的时间。 --时间和文件名一定不可以写错,尤其是时间中的年和文件名中的序号,以防不小心将正在使用的binlog删除!!! --切勿删除正在使用的binlog!!
-
重置所有的日志
- reset master;
-
手动切换binlog日志
-
flush logs --或者flush binary logs
-
当你某天把所有binlog日志全干掉,数据库没有产生新的日志的时候就可以用手动切换这个方式来产生了…
-
-
2.1. 没有主从同步的情况下清理日志
mysql -uroot -p123456 -e ‘PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ),INTERVAL 5 DAY)’;
#mysql 定时清理5天前的binlog
mysql -u root -p #进入mysql 控制台
reset master; #重置binlog
2.2 MySQL主从同步下,手动安全清理binlog日志
--切勿删除正在使用的binlog!!
1、mysql -u root -p #进入从服务器mysql控制台
show slave status\G; #检查从服务器正在读取哪个日志,有多个从服务器,选择时间最早的一个做为目标日志。
2、进入主服务器mysql控制台
show master log; #获得主服务器上的一系列日志
PURGE MASTER LOGS TO ‘binlog.000058’; #删除binlog.000005之前的,不包括binlog.000058
PURGE MASTER LOGS BEFORE ‘2016-06-22 13:00:00’; #清除2016-06-22 13:00:00前binlog日志
PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY); #清除3天前binlog日志
2.3 设置自动清理binlog 日志
!!! 这里要注意不要强制使用rm命令进行清除。否则mysq-bin.index错乱,最终导致后期expire-log-days配置项失效。
- vi /etc/my.cnf #编辑配置
expire_logs_days = 15 #自动删除15天前的日志。默认值为0,表示从不删除。
log-bin=mysql-bin #注释掉之后,会关闭binlog日志
binlog_format=mixed #注释掉之后,会关闭binlog日志
- :wq! #保存退出
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/15253.html