<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    于吉吉的技術博客

    建造高性能門戶網

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      65 隨筆 :: 6 文章 :: 149 評論 :: 0 Trackbacks
    mysql有4種不同的日志,分別是二進制日志,查詢日志,慢查詢日志和錯誤日志,這些日記記錄著數據庫工作的方方面面,可以幫助我們了解數據庫的不同方面的蹤跡,下面先介紹二進制日志的作用和使用方法,并利用二進制日志對數據庫進行各種維護和優化,其他日志也會在后面陸續會做詳細的介紹。

    二進制日志(bin-log日志)

    上一篇介紹mysql主從配置的blog中,已經提過bin-log日志的作用和使用,bin-log日志記錄了所有的DDL和DML的語句,但不包括查詢的語句,語句以事件的方式保存,描述了數據的更改過程,此日志對發生災難時數據恢復起到了極為重要的作用。

    開啟
    mysql默認是沒有開發bin-log日志,首先我們需要開啟bin-log日志,在my.cnf中修改



    指定了bin-log日志的路徑,開啟日志后需要myssqladmin flush log才生效,重啟后我們發現在剛才設定的路徑新增了log文件,這就是我們需要的二進制日志



    由于日志是以二進制方式存儲的,不能直接讀取,需要使用mysql自帶的mysqlbinlog工具來進行查看
    語法如下:

    #mysqlbinlog mysql-bin.000002

    現在我們嘗試向test1表插入數據



    然后使用mysqlbinlog工具進行日志查看

    #mysqlbinlog mysql-bin.000002 -d test



    清理

    如果每天都會生成大量的二進制日志,這些日志長時間不清理的話,將會對磁盤空間帶來很大的浪費,所以定期清理日志是DBA維護mysql的一個重要工作

    1)RESET MASTER
    在上面查看日志存放的文件夾中,二進制日志命名的格式是以mysql-bin.*,*代表日志的序號,序號是遞增的,其中還有mysql-bin.index是日志的索引文件,記錄了日志的最大序號
    我們執行RESET MASTER命名刪除全部日志



    查看刪除后的日志



    可以看到,以前的日志全部被清空,新的日志從00001開始

    2)PURGE MASTER LOGS TO & PURGE MASTER LOGS BEFORE
    執行PURGE MASTER LOGS TO 'mysql-bin.******'命令,是將'******'編號之前的所有日志進行刪除
    執行PURGE MASTER LOGS BEFORE 'yyyy-mm-dd hh:mm:ss'命令,是將在'yyyy-mm-dd hh:mm:ss'時間之前的所有日志進行刪除

    3)-EXPIRE_LOGS_DAYS
    此參數是設置日志的過期天數,過期的日志將會被自動刪除,這有利于減少我們管理日志的工作量,需要修改my.cnf



    這里我們設定保存日志為3天,3天之后過期的日志將被自動刪除

    恢復

    bin-log是記錄著mysql所有事件的操作,當mysql發生災難性錯誤時,可以通過bin-log做完整恢復,基于時間點的恢復,和基于位置的恢復

    完整恢復,假定我們每天凌晨2點都會使用mysqldump備份數據庫,但在第二天早上9點由于數據庫出現了故障,數據無法訪問,需要恢復數據,先使用昨天凌晨備份的文件進行恢復到凌晨2點的狀態,在使用mysqlbinlog恢復自mysqldump備份以來的binlog
    mysql localhost mysql-bin.000001 | mysql -uroot -p
    這樣數據庫就可以完全的恢復到崩潰前的完全狀態

    基于時間點的恢復,由于誤操作,比如說刪除了一張表,這時使用上面講的完全恢復是沒有用的,因為日志里面還存在誤操作的語句,,我們需要的是恢復到誤操作前的狀態,然后跳過誤操作的語句,再恢復后面操作的語句,假定我們刪除了一張表的誤操作發生在10:00這個時間點,我們可以使用下面的語句用備份和binlog將數據恢復到故障前

    mysqlbinlog --stop-date='2010-09-04 9:59:59' /var/log/mysql-bin.000001 | mysql -uroot -p

    然后跳過誤操作的時間點,繼續執行后面的binlog

    mysqlbinlog --start-date='2010-09-04 10:01:00' /var/log/mysql-bin.000001 | mysql -uroot -p

    其中--stop-date='2010-09-04 9:59:59' 和 --start-date='2010-09-04 10:01:00' 其中的時間是你誤操作的時間點,當然了,這個時間點你需要你自己計算的,而且這個時間點還可以涉及到的不只是誤操作,還可以有正確的操作也被跳過去了。

    基于位置恢復,由于上面提到的,使用基于時間點的恢復可能出現,在一個時間點里面可能存在誤操作和其他正確的操作,所以我們需要一種更為精確的恢復方式
    使用mysqlbinlog查看二進制,可看到



    其中drop tables test1這個誤操作的end_log_pos為8879917,幾下這個id,得出它前后操作的id分別為8879916,8879918
    我們將進行位置恢復操作
    mysqlbinlog --stop-position='8879916' /var/log/mysql-bin.000001 | mysql -uroot -p

    mysqlbinlog 
    --start-position='8879918' /var/log/mysql-bin.000001 | mysql -uroot -p

    第一行是恢復到停止位置位置的所以事務,第二性是恢復從給定的起始位置知道二進制日志結束所有事物。

    主從復制
    mysql的復制是指將主數據庫的DDL和DML操作通過二進制日志傳到從服務器上,然后在從服務器上對這些日志做重新執行的操作,從而使得從服務器和主服務器保持數據的同步,通過二進制日志進行主從復制的可以看前一篇《MySQL 主從復制配置

    ----------------------------------------

    by 陳于喆
    Mail: chenyz@corp.netease.com

    posted on 2010-09-04 18:55 陳于喆 閱讀(17079) 評論(1)  編輯  收藏 所屬分類: mysql

    評論

    # re: 淺析MySql二進制日志的應用 2016-03-29 11:38 嚴謹的程序員
    單詞打錯了,是expire_logs_days.   回復  更多評論
      

    主站蜘蛛池模板: 亚洲人成免费网站| 免费看www视频| 亚洲国产精品成人精品软件| 中文字幕成人免费视频| 亚洲国产美女精品久久久久| 美女网站免费福利视频| 亚洲第一男人天堂| 国产精品无码一二区免费 | 亚洲最大中文字幕| 免费无码又黄又爽又刺激| 亚洲AV无码成人精品区日韩 | 国产一区二区三区无码免费| 免费国产黄网站在线看| 亚洲精品无码专区在线在线播放| 国产午夜亚洲精品| 亚洲成人高清在线| 免费视频一区二区| 亚洲欧美日韩国产成人| 免费在线观看亚洲| 99re6在线精品免费观看| 亚洲精品福利网泷泽萝拉| 麻豆国产精品入口免费观看| 一级片在线免费看| 亚洲精品电影天堂网| 国产一级一片免费播放i| 国产日韩一区二区三免费高清| 曰韩亚洲av人人夜夜澡人人爽| 一级看片免费视频| 亚洲黄色在线观看| 国产免费无遮挡精品视频 | 国产真实伦在线视频免费观看| 亚洲人成www在线播放| 亚洲av无码成人精品区在线播放| 国产亚洲精品仙踪林在线播放| 日韩免费视频播播| 免费成人在线电影| 色偷偷噜噜噜亚洲男人| 亚洲处破女AV日韩精品| 日韩人妻无码免费视频一区二区三区| 亚洲精品久久无码av片俺去也| 国产成人精品男人免费|