Mysql binlog

binlog日志太大,flush的时候致使binlog写入时间变慢,由于要写入新的binlog,须要时间。解决方案就是调整binlog最大值,将1G下降到128M。mysql


mysql> show variables like 'max_binlog_size';
+-----------------+------------+
| Variable_name | Value |
+-----------------+------------+
| max_binlog_size | 1073741824 |
+-----------------+------------+
1 row in set (0.01 sec)

mysql> select 128*1024*1024;
+---------------+
| 128*1024*1024 |
+---------------+
| 134217728 |
+---------------+
1 row in set (0.01 sec)

mysql> set global max_binlog_size=134217728;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'max_binlog_size';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| max_binlog_size | 134217728 |
+-----------------+-----------+
1 row in set (0.00 sec)linux

反思,互联网场景中,max_binlog_size值确实不宜过大,这点须要谨记。sql


问题扩展:数据库

查看当前正在使用的binlog缓存状况:缓存

MySQL:(none) 13:07:41> show global status like 'bin%';
+----------------------------+-----------+
| Variable_name | Value |
+----------------------------+-----------+
| Binlog_cache_disk_use | 1335001 |
| Binlog_cache_use | 264238120 |
| Binlog_stmt_cache_disk_use | 0 |
| Binlog_stmt_cache_use | 33 |
+----------------------------+-----------+
4 rows in set (0.00 sec)
MySQL:(none) 13:07:46> show global status like 'bin%';
+----------------------------+-----------+
| Variable_name | Value |
+----------------------------+-----------+
| Binlog_cache_disk_use | 1335006 |
| Binlog_cache_use | 264240359 |
| Binlog_stmt_cache_disk_use | 0 |
| Binlog_stmt_cache_use | 33 |
+----------------------------+-----------+
4 rows in set (0.00 sec)

MySQL:(none) 13:07:47>
MySQL:(none) 13:07:48> show global status like 'bin%';
+----------------------------+-----------+
| Variable_name | Value |
+----------------------------+-----------+
| Binlog_cache_disk_use | 1335428 |
| Binlog_cache_use | 264437761 |
| Binlog_stmt_cache_disk_use | 0 |
| Binlog_stmt_cache_use | 33 |
+----------------------------+-----------+
4 rows in set (0.00 sec)session


查看binlog的cache设置:ui

MySQL:(none) 13:10:58> show variables like '%binlog_cache%';
+-----------------------+----------------------+
| Variable_name | Value |
+-----------------------+----------------------+
| binlog_cache_size | 32768 |
| max_binlog_cache_size | 18446744073709547520 |
+-----------------------+----------------------+
2 rows in set (0.00 sec)spa


binlog_cache_size:设计

为每一个session 分配的内存,在事务过程当中用来存储二进制日志的缓存。binlog_cache_disk_use表示由于咱们binlog_cache_size设计的内存不足致使缓存二进制日志用到了临时文件的次数;binlog_cache_use表示 用binlog_cache_size缓存的次数;当对应的Binlog_cache_disk_use 值比较大的时候并且Binlog_cache_use也比较大的时候,咱们能够考虑适当的调高 binlog_cache_size 对应的值rest


进一步分析:
咱们这里能够看到Binlog_cache_disk_use已是1.27M,并且Binlog_cache_use值为264437761表示已经执行了2亿屡次了,并且这2个值一直在变大,就表名,binlog_cache_size远远不够用,因此这里就能够提升binlog_cache_size的值了。

MySQL:(none) 13:40:08> set global binlog_cache_size=8388608;
Query OK, 0 rows affected (0.00 sec)

 

max_binlog_cache_size:

max_binlog_cache_size 表示的是binlog 可以使用的最大cache 内存大小,当咱们执行多语句事务的时候 全部session的使用的内存超过max_binlog_cache_size的值时,就会报错:“Multi-statement transaction required more than ‘max_binlog_cache_size’ bytes ofstorage”,设置太大的话,会比较消耗内存资源;设置过小又会使用到临时文件即disk

 

查看mysql 的binlog日志存放的位置

这个你能够看配置文件 启用了才有这样的记录默认是没有的
linux系统中的/etc/my.cnf

my.cnf内容:
log-bin = mysqlbin # 默认配置

通常放在/var/lib/mysql
好比上面的设置重启数据库会生成mysqlbin.000001文件

自定义文件存放位置

修改配置文件,vi /etc/my.cnf,找到log-bin的部分
配置按期自动清理在my.cnf文件中,这个文件路径不知道的话执行mysql --help | grep 'Default options' -A 1,就会列出文件的路径来

 
而后重启service mysql restart,去新建的目录下看看,已经有最新的日志了


0、查看日志开启状态 show variables like 'log_%';

一、查看全部binlog日志列表 show master logs;

二、查看最新一个binlog日志的编号名称,及其最后一个操做事件结束点 show master status;

三、刷新log日志,马上产生一个新编号的binlog日志文件,跟重启一个效果 flush logs;

四、清空全部binlog日志 reset master;

五、日志查看,由于是二进制文件无法用vi等打开,能够用mysql的mysqlbinlog打开,/usr/bin/mysqlbinlog /home/logs/mysql-bin.000001,固然每一个人路径可能不同,这个只能本身去找了。

相关文章
相关标签/搜索