乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      重做日志文件

       yufengerdai 2013-07-17

      默認(rèn)情況下會有兩個(gè)文件,名稱分別為ib_logfile0和ib_logfile1。MySQL官方手冊中將其稱為InnoDB存儲引擎的日志文件,不過更準(zhǔn)確的定義應(yīng)該是重做日志文件(redo log file)。為什么強(qiáng)調(diào)是重做日志文件呢?因?yàn)橹刈鋈罩疚募τ贗nnoDB存儲引擎至關(guān)重要,它們記錄了對于InnoDB存儲引擎的事務(wù)日志。

      重做日志文件的主要目的是,萬一實(shí)例或者介質(zhì)失?。╩edia failure),重做日志文件就能派上用場。如數(shù)據(jù)庫由于所在主機(jī)掉電導(dǎo)致實(shí)例失敗,InnoDB存儲引擎會使用重做日志恢復(fù)到掉電前的時(shí)刻,以此來保證數(shù)據(jù)的完整性。

      每個(gè)InnoDB存儲引擎至少有1個(gè)重做日志文件組(group),每個(gè)文件組下至少有2個(gè)重做日志文件,如默認(rèn)的ib_logfile0、ib_logfile1。為了得到更高的可靠性,你可以設(shè)置多個(gè)鏡像日志組(mirrored log groups),將不同的文件組放在不同的磁盤上。日志組中每個(gè)重做日志文件的大小一致,并以循環(huán)方式使用。InnoDB存儲引擎先寫重做日志文件1,當(dāng)達(dá)到文件的最后時(shí),會切換至重做日志文件2,當(dāng)重做日志文件2也被寫滿時(shí),會再切換到重做日志文件1中。圖3-2顯示了一個(gè)擁有3個(gè)重做日志文件的重做日志文件組。

       
      圖3-2   日志文件組
      3.6.2 重做日志文件 - zhuzhu - 五事九思
       參數(shù)innodb_log_file_size、innodb_log_files_in_group、innodb_mirrored_log_groups、innodb_log_group_home_dir影響著重做日志文件的屬性。參數(shù)innodb_log_file_size指定了重做日志文件的大??;innodb_log_files_in_group指定了日志文件組中重做日志文件的數(shù)量,默認(rèn)為2;innodb_mirrored_log_groups指定了日志鏡像文件組的數(shù)量,默認(rèn)為1,代表只有一個(gè)日志文件組,沒有鏡像;innodb_log_group_home_dir指定了日志文件組所在路徑,默認(rèn)在數(shù)據(jù)庫路徑下。以下顯示了一個(gè)關(guān)于重做日志組的配置:
      1. mysql> show variables like 'innodb%log%'\G;  
      2. *************************** 1. row ***************************  
      3. Variable_name: innodb_flush_log_at_trx_commit  
      4.         Value: 1  
      5. *************************** 2. row ***************************  
      6. Variable_name: innodb_locks_unsafe_for_binlog  
      7.         Value: OFF  
      8. *************************** 3. row ***************************  
      9. Variable_name: innodb_log_buffer_size  
      10.         Value: 8388608  
      11. *************************** 4. row ***************************  
      12. Variable_name: innodb_log_file_size  
      13.         Value: 5242880  
      14. *************************** 5. row ***************************  
      15. Variable_name: innodb_log_files_in_group  
      16.         Value: 2  
      17. *************************** 6. row ***************************  
      18. Variable_name: innodb_log_group_home_dir  
      19.         Value: ./  
      20. *************************** 7. row ***************************  
      21. Variable_name: innodb_mirrored_log_groups  
      22.         Value: 1  
      23. 7 rows in set (0.00 sec) 

      重做日志文件的大小設(shè)置對于MySQL數(shù)據(jù)庫各方面還是有影響的。一方面不能設(shè)置得太大,如果設(shè)置得很大,在恢復(fù)時(shí)可能需要很長的時(shí)間;另一方面又不能太小了,否則可能導(dǎo)致一個(gè)事務(wù)的日志需要多次切換重做日志文件。在錯(cuò)誤日志中可能會看到如下警告:



      1. 090924 11:39:44  InnoDB: ERROR: the age of the 
        last checkpoint is 9433712,  
      2. InnoDB: which exceeds the log group capacity 9433498.  
      3. InnoDB: If you are using big BLOB or TEXT rows,
        you must set the  
      4. InnoDB: combined size of log files at least 10 
        times bigger than the  
      5. InnoDB: largest such row.  
      6. 090924 11:40:00  InnoDB: ERROR: the age of the 
        last checkpoint is 9433823,  
      7. InnoDB: which exceeds the log group capacity 9433498.  
      8. InnoDB: If you are using big BLOB or TEXT rows, 
        you must set the  
      9. InnoDB: combined size of log files at least 10 
        times bigger than the  
      10. InnoDB: largest such row.  
      11. 090924 11:40:16  InnoDB: ERROR: the age of the 
        last checkpoint is 9433645,  
      12. InnoDB: which exceeds the log group capacity 9433498.  
      13. InnoDB: If you are using big BLOB or TEXT rows, 
        you must set the  
      14. InnoDB: combined size of log files at least 10 
        times bigger than the  
      15. InnoDB: largest such row. 


      重做日志文件(2)

      上面錯(cuò)誤集中在InnoDB: ERROR: the age of the last checkpoint is 9433645,InnoDB: which exceeds the log group capacity 9433498。這是因?yàn)橹刈鋈罩居幸粋€(gè)capacity變量,該值代表了最后的檢查點(diǎn)不能超過這個(gè)閾值,如果超過則必須將緩沖池(innodb buffer pool)中刷新列表(flush list)中的部分臟數(shù)據(jù)頁寫回磁盤。

      也許有人會問,既然同樣是記錄事務(wù)日志,那和我們之前的二進(jìn)制日志有什么區(qū)別?首先,二進(jìn)制日志會記錄所有與MySQL有關(guān)的日志記錄,包括InnoDB、MyISAM、Heap等其他存儲引擎的日志。而InnoDB存儲引擎的重做日志只記錄有關(guān)其本身的事務(wù)日志。其次,記錄的內(nèi)容不同,不管你將二進(jìn)制日志文件記錄的格式設(shè)為STATEMENT還是ROW,又或者是MIXED,其記錄的都是關(guān)于一個(gè)事務(wù)的具體操作內(nèi)容。而InnoDB存儲引擎的重做日志文件記錄的關(guān)于每個(gè)頁(Page)的更改的物理情況(如表3-2所示)。此外,寫入的時(shí)間也不同,二進(jìn)制日志文件是在事務(wù)提交前進(jìn)行記錄的,而在事務(wù)進(jìn)行的過程中,不斷有重做日志條目(redo entry)被寫入重做日志文件中。

      表3-2   重做日志結(jié)構(gòu)3.6.2 重做日志文件 - zhuzhu - 五事九思

       
       
      在第2章中已經(jīng)提到,對于寫入重做日志文件的操作不是直接寫,而是先寫入一個(gè)重做日志緩沖(redo log buffer)中,然后根據(jù)按照一定的條件寫入日志文件。圖3-3很好地表示了這個(gè)過程。

      3.6.2 重做日志文件 - zhuzhu - 五事九思
       

       
      圖3-3   重做日志寫入過程

      上面提到了從日志緩沖寫入磁盤上的重做日志文件是按一定條件的,那這些條件有哪些呢?第2章分析了主線程(master thread),知道在主線程中每秒會將重做日志緩沖寫入磁盤的重做日志文件中,不論事務(wù)是否已經(jīng)提交。另一個(gè)觸發(fā)這個(gè)過程是由參數(shù)innodb_ flush_log_at_trx_commit控制,表示在提交(commit)操作時(shí),處理重做日志的方式。

      參數(shù)innodb_flush_log_at_trx_commit可設(shè)的值有0、1、2。0代表當(dāng)提交事務(wù)時(shí),并不將事務(wù)的重做日志寫入磁盤上的日志文件,而是等待主線程每秒的刷新。而1和2不同的地方在于:1是在commit時(shí)將重做日志緩沖同步寫到磁盤;2是重做日志異步寫到磁盤,即不能完全保證commit時(shí)肯定會寫入重做日志文件,只是有這個(gè)動(dòng)作。



      本章介紹了與MySQL數(shù)據(jù)庫相關(guān)的一些文件,并了解了文件可以分為MySQL數(shù)據(jù)庫文件以及和各存儲引擎有關(guān)的文件。與MySQL數(shù)據(jù)庫有關(guān)的文件中,錯(cuò)誤文件和二進(jìn)制日志文件非常重要。當(dāng)MySQL數(shù)據(jù)庫發(fā)生任何錯(cuò)誤時(shí),DBA首先就應(yīng)該去查看錯(cuò)誤文件,從文件提示的內(nèi)容中找出問題的所在。當(dāng)然,錯(cuò)誤文件不僅記錄了錯(cuò)誤的內(nèi)容,也記錄了警告的信息,通過一些警告也有助于DBA對于數(shù)據(jù)庫和存儲引擎的優(yōu)化。

      二進(jìn)制日志的作用非常關(guān)鍵,可以用來進(jìn)行point in time的恢復(fù)以及復(fù)制(replication)環(huán)境的搭建。因此,建議在任何時(shí)候時(shí)都啟用二進(jìn)制日志的記錄。從MySQL 5.1開始,二進(jìn)制日志支持STATEMENT、ROW、MIX三種格式,用來更好地同步數(shù)據(jù)庫。DBA應(yīng)該十分清楚三種不同格式之間的差異。

      本章的最后介紹了和InnoDB存儲引擎相關(guān)的文件,包括表空間文件和重做日志文件。表空間文件是用來管理InnoDB存儲引擎的存儲,分為共享表空間和獨(dú)立表空間。重做日志非常重要,用來記錄InnoDB存儲引擎的事務(wù)日志,也因?yàn)橹刈鋈罩镜拇嬖冢攀沟肐nnoDB存儲引擎可以提供可靠的事務(wù)。


        本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多