kevin_xiang的專欄,mail: [email protec
mysql中如果我們開啟bin-log日誌全在mysql目錄發現大量的mysql-bin.000001,mysql-bin.000002等這些文章,如果多了會發現佔很大的空間,下面我來介紹mysql-bin日誌關閉與刪除方法。
關閉bin-log日誌
當開啟bin-log日誌時,會生成很多mysql-bin.0000*類似的檔案,而且可能會佔用很大的硬碟空間。對於自己的測試機器或硬碟比較緊張的vps,而又不需要做master,slave的配置,完全可以關閉日誌功能。
關閉操作很簡單,找到配置檔案my.cnf,對於linux,一般預設在/etc目錄下,開啟此檔案,使用井號(#)註釋掉如下兩個配置專案即可。
程式碼如下 | 複製程式碼 |
log-bin=mysql-bin |
例
vi /etc/my.cnf 或my.cnf的路徑
把其中的log-bin=mysql-bin修改為#log-bin=mysql-bin
重啟mysql即可生效。
配置修改好後需要重啟mysqld服務才能生效。
可能在重啟時候會收到一個錯誤,“ERROR 1186 (HY000): Binlog closed, cannot RESET MASTER”,解決辦法是先登入到mysql命令列中執行 reset master 即可。reset master的用途就是刪除先前所以的bin-log日誌檔案。所以在master、slave配置環境中慎用此命令。
刪除bin-log日誌
1.查詢當前有哪些二進位制日誌檔案:
程式碼如下 | 複製程式碼 |
mysql> show binary logs; +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000001 | 1357315 | | mysql-bin.000002 | 117 | | mysql-bin.000003 | 404002 | | mysql-bin.000004 | 2050722 | | mysql-bin.000005 | 139103 | | | mysql-bin.000007 | 117 | | mysql-bin.000008 | 98 | | mysql-bin.000009 | 117 | | mysql-bin.000010 | 1254 | | mysql-bin.000011 | 117 | | mysql-bin.000012 | 29394942 | | mysql-bin.000013 | 422100 | | mysql-bin.000014 | 117 | | mysql-bin.000015 | 117 | | mysql-bin.000016 | 98 | | mysql-bin.000017 | 117 | | mysql-bin.000018 | 117 | | mysql-bin.000019 | 285300 | | mysql-bin.000020 | 181229 | | mysql-bin.000021 | 98 | +------------------+-----------+ 21 rows in set (0.03 sec) |
2.刪除bin-log(刪除mysql-bin.000018之前的所有二進位制日誌檔案)
程式碼如下 | 複製程式碼 |
mysql> purge binary logs to 'mysql-bin.000018';
mysql> show binary logs;
mysql> show binlog events; |
http://blog.csdn.net/chen19870707/article/details/39546409
Explain
前段時間,遊戲伺服器停服的時候總是很慢,幸運的是遊戲資料庫都開了bin-log,於是可以通過bin-log來分析停服時執行SQL語句的數量和執行時間,下面整理了一些關鍵步驟。- 找到對應時間的bin-log檔案
如果沒有在/etc/my.cnf中配置bin-log位置,MySQL的bin-log預設檔案位置在/var/lib/mysql下:
[plain] view plain copy print?- cd /var/lib/mysql
- ll -t
找到想要查詢的時間段的SQL檔案,如果時間在兩個個檔案內,兩個檔案都需要。例如:這裡要查詢的是8月21 15:30 ~16:00,需要的檔案就是mysql-bin.000006
- 把二進位制的檔案轉換成文字檔案
- mysqlbinlog mysql-bin.000006 > mysql-bin.000006.txt
這個需要等待一點時間,需要等待一會兒.
- 將文字檔案壓縮拷貝到本地
- tar jcvf binlog.tar.bz2 mysql-bin.000006.txt
- sz binlog.tar.bz2
- 用文字工具開啟檔案,擷取需要的時間段
先看一下文字格式 bin-log 的記錄格式:
[plain] view plain copy print?- # at 7473
- #110630 11:56:05 server id 1 end_log_pos 7612 Query thread_id=6 exec_time=0 error_code=0
- SET TIMESTAMP=1309406165/*!*/;
- UPDATE ssmatch.young_league_match_7 SET status='playing' WHERE mid=699617
- /*!*/;
這裡有每一條SQL的執行時間,根據自己的需要,將不需要的時間段內的SQL刪掉,這裡最好用UltraEdit,因為檔案比較大。
- 分析bin-log檔案-----執行次數分析
- table_list=(
- Account_tbl
- Activity_tbl
- AwardMsg_tbl
- BBRankFightPos_tbl
- BloodBattleRank_tbl
- BloodBattle_tbl
- Card_tbl
- Checkin_tbl
- ClickMsg_tbl
- DuelRank_tbl
- DynamicRune_tbl
- EquipFragment_tbl
- Equipment_tbl
- FightingPos_tbl
- Friends_tbl
- Gemstone_tbl
- Ghost_tbl
- HeroAttribute_tbl
- HeroJuedi_table
- ItemMarket_tbl
- Item_tbl
- LadderData_tbl
- LadderPlayer_tbl
- LadderRankList_tbl
- Mission_tbl
- MysteryShop_tbl
- PlayerStatistics_tbl
- Player_tbl
- RuneScapeRecovery_tbl
- Skill_tbl
- SkyLadderFightingPosition_tbl
- TipsMsg_tbl
- Treasure_tbl
- UserRuneScape_tbl
- VipCard_tbl
- )
- for i in ${table_list[@]}; do
- echo ${i}
- grep -w ${i} . -r | grep -w UPDATE | wc -l
- done
table_list為所有表的表名,執行以上指令碼將列印所有表的UPDATE次數。
[plain] view plain copy print?- Account_tbl
- 0
- Activity_tbl
- 4281
- AwardMsg_tbl
- 0
- BBRankFightPos_tbl
- 1527
- BloodBattleRank_tbl
- 190
- BloodBattle_tbl
- 4281
- Card_tbl
- 376
- Checkin_tbl
- 4273
- ClickMsg_tbl
- 0
- DuelRank_tbl
- 83
- DynamicRune_tbl
- 4276
- EquipFragment_tbl
- 0
- Equipment_tbl
- 95
- FightingPos_tbl
- 103
- Friends_tbl
- 34
- Gemstone_tbl
- 43
- Ghost_tbl
- 3
- HeroAttribute_tbl
- 4271
- HeroJuedi_table
- 0
- ItemMarket_tbl
- 0
- Item_tbl
- 486
- LadderData_tbl
- 0
- LadderPlayer_tbl
- 3616
- LadderRankList_tbl
- 0
- Mission_tbl
- 4281
- MysteryShop_tbl
- 4279
- PlayerStatistics_tbl
- 0
- Player_tbl
- 4282
- RuneScapeRecovery_tbl
- 10
- Skill_tbl
- 15
- SkyLadderFightingPosition_tbl
- 3744
- TipsMsg_tbl
- 0
- Treasure_tbl
- 4274
- <span style="color:#ff0000;">UserRuneScape_tbl
- 15519</span>
- VipCard_tbl
- 6
在這裡看到UserRuneScape這個表執行的次數很多。
- 分析bin-log檔案-----執行時間分析
再看一下文字格式 bin-log 的記錄格式:
[plain] view plain copy print?- # at 7473
- #110630 11:56:05 server id 1 end_log_pos 7612 Query thread_id=6 exec_time=0 error_code=0
- SET TIMESTAMP=1309406165/*!*/;
- UPDATE ssmatch.young_league_match_7 SET status='playing' WHERE mid=699617
- /*!*/;
exec_time即為執行時間,執行
[plain] view plain copy print?- grep -w exec_time=1 -r . |wc