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

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

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

    于吉吉的技術(shù)博客

    建造高性能門戶網(wǎng)

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      65 隨筆 :: 6 文章 :: 149 評(píng)論 :: 0 Trackbacks
    mysql有4種不同的日志,分別是二進(jìn)制日志,查詢?nèi)罩荆樵內(nèi)罩竞湾e(cuò)誤日志,這些日記記錄著數(shù)據(jù)庫(kù)工作的方方面面,可以幫助我們了解數(shù)據(jù)庫(kù)的不同方面的蹤跡,下面先介紹二進(jìn)制日志的作用和使用方法,并利用二進(jìn)制日志對(duì)數(shù)據(jù)庫(kù)進(jìn)行各種維護(hù)和優(yōu)化,其他日志也會(huì)在后面陸續(xù)會(huì)做詳細(xì)的介紹。

    二進(jìn)制日志(bin-log日志)

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

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



    指定了bin-log日志的路徑,開啟日志后需要myssqladmin flush log才生效,重啟后我們發(fā)現(xiàn)在剛才設(shè)定的路徑新增了log文件,這就是我們需要的二進(jìn)制日志



    由于日志是以二進(jìn)制方式存儲(chǔ)的,不能直接讀取,需要使用mysql自帶的mysqlbinlog工具來(lái)進(jìn)行查看
    語(yǔ)法如下:

    #mysqlbinlog mysql-bin.000002

    現(xiàn)在我們嘗試向test1表插入數(shù)據(jù)



    然后使用mysqlbinlog工具進(jìn)行日志查看

    #mysqlbinlog mysql-bin.000002 -d test



    清理

    如果每天都會(huì)生成大量的二進(jìn)制日志,這些日志長(zhǎng)時(shí)間不清理的話,將會(huì)對(duì)磁盤空間帶來(lái)很大的浪費(fèi),所以定期清理日志是DBA維護(hù)mysql的一個(gè)重要工作

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



    查看刪除后的日志



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

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

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



    這里我們?cè)O(shè)定保存日志為3天,3天之后過(guò)期的日志將被自動(dòng)刪除

    恢復(fù)

    bin-log是記錄著mysql所有事件的操作,當(dāng)mysql發(fā)生災(zāi)難性錯(cuò)誤時(shí),可以通過(guò)bin-log做完整恢復(fù),基于時(shí)間點(diǎn)的恢復(fù),和基于位置的恢復(fù)

    完整恢復(fù),假定我們每天凌晨2點(diǎn)都會(huì)使用mysqldump備份數(shù)據(jù)庫(kù),但在第二天早上9點(diǎn)由于數(shù)據(jù)庫(kù)出現(xiàn)了故障,數(shù)據(jù)無(wú)法訪問,需要恢復(fù)數(shù)據(jù),先使用昨天凌晨備份的文件進(jìn)行恢復(fù)到凌晨2點(diǎn)的狀態(tài),在使用mysqlbinlog恢復(fù)自mysqldump備份以來(lái)的binlog
    mysql localhost mysql-bin.000001 | mysql -uroot -p
    這樣數(shù)據(jù)庫(kù)就可以完全的恢復(fù)到崩潰前的完全狀態(tài)

    基于時(shí)間點(diǎn)的恢復(fù),由于誤操作,比如說(shuō)刪除了一張表,這時(shí)使用上面講的完全恢復(fù)是沒有用的,因?yàn)槿罩纠锩孢€存在誤操作的語(yǔ)句,,我們需要的是恢復(fù)到誤操作前的狀態(tài),然后跳過(guò)誤操作的語(yǔ)句,再恢復(fù)后面操作的語(yǔ)句,假定我們刪除了一張表的誤操作發(fā)生在10:00這個(gè)時(shí)間點(diǎn),我們可以使用下面的語(yǔ)句用備份和binlog將數(shù)據(jù)恢復(fù)到故障前

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

    然后跳過(guò)誤操作的時(shí)間點(diǎn),繼續(xù)執(zhí)行后面的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' 其中的時(shí)間是你誤操作的時(shí)間點(diǎn),當(dāng)然了,這個(gè)時(shí)間點(diǎn)你需要你自己計(jì)算的,而且這個(gè)時(shí)間點(diǎn)還可以涉及到的不只是誤操作,還可以有正確的操作也被跳過(guò)去了。

    基于位置恢復(fù),由于上面提到的,使用基于時(shí)間點(diǎn)的恢復(fù)可能出現(xiàn),在一個(gè)時(shí)間點(diǎn)里面可能存在誤操作和其他正確的操作,所以我們需要一種更為精確的恢復(fù)方式
    使用mysqlbinlog查看二進(jìn)制,可看到



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

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

    第一行是恢復(fù)到停止位置位置的所以事務(wù),第二性是恢復(fù)從給定的起始位置知道二進(jìn)制日志結(jié)束所有事物。

    主從復(fù)制
    mysql的復(fù)制是指將主數(shù)據(jù)庫(kù)的DDL和DML操作通過(guò)二進(jìn)制日志傳到從服務(wù)器上,然后在從服務(wù)器上對(duì)這些日志做重新執(zhí)行的操作,從而使得從服務(wù)器和主服務(wù)器保持?jǐn)?shù)據(jù)的同步,通過(guò)二進(jìn)制日志進(jìn)行主從復(fù)制的可以看前一篇《MySQL 主從復(fù)制配置

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

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

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

    評(píng)論

    # re: 淺析MySql二進(jìn)制日志的應(yīng)用 2016-03-29 11:38 嚴(yán)謹(jǐn)?shù)某绦騿T
    單詞打錯(cuò)了,是expire_logs_days.   回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 亚洲a∨无码男人的天堂| h视频在线观看免费网站| 中文字幕亚洲情99在线| 中文字幕久久亚洲一区| 性做久久久久免费观看| 5555在线播放免费播放| 三根一起会坏掉的好痛免费三级全黄的视频在线观看 | 91av免费在线视频| 亚洲人成人伊人成综合网无码| 老司机亚洲精品影院| 亚洲日韩激情无码一区| 成人伊人亚洲人综合网站222| 国产在线国偷精品产拍免费| 鲁大师在线影院免费观看| 三年片免费观看大全国语| 特黄特色大片免费| 女bbbbxxxx另类亚洲| 亚洲男人的天堂网站| 久久狠狠爱亚洲综合影院 | 成全视频高清免费观看电视剧| 日产久久强奸免费的看| 亚洲国产精品自在自线观看| 久久精品国产亚洲AV忘忧草18| 亚洲成aⅴ人片在线观| 亚洲高清免费在线观看| 亚洲一级二级三级不卡| 亚洲AV无一区二区三区久久| 亚洲线精品一区二区三区 | 国产av无码专区亚洲av毛片搜| 亚洲日本久久久午夜精品| 亚洲一区中文字幕在线观看| 91亚洲视频在线观看| 亚洲国产av一区二区三区丶| 亚洲国产美女在线观看| 国产精品久久亚洲不卡动漫| 久久亚洲国产成人影院| 亚洲午夜精品一区二区麻豆| 亚洲AV无码国产精品永久一区| 亚洲Av永久无码精品黑人| 国产亚洲精品成人久久网站| 国产成人久久精品亚洲小说|