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
這個你能夠看配置文件 啓用了纔有這樣的記錄默認是沒有的
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,就會列出文件的路徑來
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,固然每一個人路徑可能不同,這個只能本身去找了。