MySQL 5.6 新功能介紹(2)
6. 提昇資料複製和高可用度。複製(Replication)是MySQL的功能中,最廣泛被實現在資料庫的擴展性和高可用性(HA)的架構中。MySQL 5.6中包含了一些設計給開發人員構建下一代網路,雲計算,社群和手機應用程式和自我修補的複製拓撲和高效能主從架構的新功能。關鍵功能包括: • 新的全域交易的標識符(GTIDs) – GTIDs讓複製的交易進行的完整性藉由主從的架構下,可以被紀錄下來,進而提供了一個基礎的自我修復,同時使DBA和開發人員可以輕鬆地在”主”(master)伺服器出現故障時,由事件中找到最新的”從”(slave)伺服器。而GTIDs是直接放置在BINLOG裡,如果要消除GTIDs,需要複雜的第三方附加組件(add-ons)來追蹤GTIDs。 • 新的MySQL的複製工具 – 一組新的Python工具的設計,以充分利用新的複製GTIDs,以提供在”主”伺服器故障或維護時,複製(Replication)的自動故障轉移(Auto Fail-over)的管理和監控。 • 新的從伺服器多線程 – 基於資料庫綱要(schema),分割工作線程來處理資料,讓資料的更新可以同時並行處理,而不是順序處理。這對工作負載的好處是可以隔離應用程式來使用資料庫 – 例如,多用戶系統。 • 新的二進制日誌組提交(BGC) – 在MySQL5.6複製主伺服器寫入BINLOG,而不是一次性地將它們提交,的拓撲結構中,這樣的改變在主伺服器上有顯著的性能提昇。 BGC也可以有更精細的鎖定,而減少解鎖的等待,而再次地增加效能。 • 行複製的新優化 – MySQL5.6提供了一個新的選項變數binlog-row-image=minimal,這可以使應用程序只複製在DML操作下而改變的資料成分。這種方式提高了主/從伺服器兩端的複製吞吐量,並最大限度地減少二進制日誌的磁碟空間,網路資源和伺服器所需要的記憶體空間。 • 新的複製檢查 – MySQL 5.6藉由偵測資料是否損毀以及在損毀事件套用在從伺服器前回傳錯誤,來確保資料複製的完整性,以防止從伺服器故障。 • 新的時間延遲(Time-delayed)複製 – MySQL 5.6允許開發人員在複製串流上設定時間延遲,以防止在主伺服器上的操作失誤傳送到從伺服器。隨著配置的主從時間延遲,在發生故障或為了將資料庫恢復到之前的狀態,從伺服器可以提升成為新的主伺服器。它也讓資料庫可以在發生錯誤或電力中斷前就被檢測到,進而保護資料庫的安全以避免需要資料補救。 提昇效能綱要(Performance Schema)。MySQL校能綱要在MySQL5.5中引入的目的是在關鍵時間點下提供績效指標的衡量標準。 在MySQL 5.6中,預設my.cnf設定檔開啟優化過及自動調整的效能綱要,最大限度地減少系統負荷。因此,在正式環境中使用的監控常用的應用程式用不會造成問題。此外,在計費和或以計費為目的的環境中,新的MySQL計量工具能夠針對消費用戶,主機帳戶,應用程序等捕捉到細部的資源使用狀況。 8. 提昇安全性。MySQL 5.6引入了一個密碼在內部處理和加密大修改。新的選項和功能,包括: • master.info的新替代密碼 – MySQL 5.6的複製,延伸了START SLAVE命令,讓DBA可以在複製的從伺服器的選項中指定主用戶名和密碼,來進行帳戶驗證。以往要連結到主伺服器,需借用外部的驗證插件。有了這些選項,用戶名和密碼將不再需要被暴露在純文字的master.info文件中。 • 一般查詢日誌,慢速查詢日誌,二進制日誌中的新加密 – 指令在寫入這些日誌檔時,指令中的密碼,不會再以純文本的格式。 • 使用適當強度的新密碼雜湊 – MySQL伺服器內部驗證的預設密碼雜湊從PASSWORD函數改成使用SHA-256密碼雜湊算法並使用隨機salt值。 • 命令列上新的密碼選項 – MySQL的5.6引入了新的選項/設定檔(.mylogin.cnf),可用於命令列上操作來安全地存儲用戶密碼。 • 下次登錄時改變密碼 – 現在DBA和開發人員可以透過控制mysql.user資料表中的一個新password_expired標誌,讓使用者下次登入時必須更改密碼。 • 新的密碼驗證策略 – 現在密碼可以根據強度,長度,大小寫混合,特殊字符以及用戶自定的低,中,高的策略來驗證密碼是否合適。(細節說明如下) 啟用密碼插件:http://dev.mysql.com/doc/refman/5.6/en/validate-password-plugin.html i. WEAK: 只檢查密碼長度。 步驟如下: a. 在MySQL configuration file中(e.g. /etc/my.cnf)的mysqld設定中,加入plugin-load=validate_password.so。 # cat /etc/mycnf [mysqld] plugin-load=validate_password.so … b. 重新啟動mysqld。 c. 檢查環境變數。 mysql> show variables like 'validate_password%'; +--------------------------------------+--------+ | Variable_name | Value | +--------------------------------------+--------+ | validate_password_dictionary_file | | | validate_password_length | 8 | | validate_password_mixed_case_count | 1 | | validate_password_number_count | 1 | | validate_password_policy | MEDIUM | | validate_password_special_char_count | 1 | +--------------------------------------+--------+ 6 rows in set (0.00 sec) d. 測試password validation。 mysql> set password for 'stanley' @'%s' = password('test'); ERROR 1819 (HY000): Your password does not satisfy the current policy requirements mysql> set password for 'stanley'@'%' = password('Stanley!1234'); Query OK, 0 rows affected (0.00 sec) 官方文件建議,password函數只適用在MySQL資料庫內部使用,而不要在應用程式中使用MySQL password的加密方法來儲存密碼,因為這樣會有安全性的疑慮。 mysql> select user, host, password from mysql.user where user='stanley' and host='%'; +---------+------+-------------------------------------------+ | user | host | password | +---------+------+-------------------------------------------+ | stanley | % | *76274CDEF97EB4B8B3B5E156F65C09379CF28D63 | +---------+------+-------------------------------------------+ 1 row in set (0.00 sec) mysql> select concat("*", sha1(unhex(sha1("Stanley!1234")))); +------------------------------------------------+ | concat("*", sha1(unhex(sha1("Stanley!1234")))) | +------------------------------------------------+ | *76274cdef97eb4b8b3b5e156f65c09379cf28d63 | +------------------------------------------------+ 1 row in set (0.00 sec) 9. 其它的重要的提昇。• 預設配置的新優化 – MySQL的5.6引入了伺服器的預設配置更改以提供現今的系統架構更好的即裝即用校能。這些新的預設值,是針對常被變更的設定和配置選項而設計,以盡量減少前期所需花費的時間。 • 改進TIME / TIMESTAMP/ DATETIME資料類型: • TIME / TIMESTAMP/ DATETIME – 現在允許更精確微秒級的精準度的時間/日期比較和資料選擇。 • TIMESTAMP/ DATETIME – 在MySQL 5.5中已經新增此兩種資料類型。此欄位的預設值允許開發人員指定當前的時間戳,自動更新,或兩者。 • TIMESTAMP – 在MySQL 5.6的TIMESTAMP資料欄,其預設值為可以為空。在沒有將欄位設定為確切值或此欄位不允許為空值的情況下,TIMESTAMP列不會在自動設定為DEFAULT NOW()或ON UPDATE NOW()這兩個屬性值。 • 較好的狀況處理 – GET DIAGNOSTICS 藉由新的MySQL診斷區和相應的GET DIAGNOSTICS指令,MySQL 5.6使開發人員能夠輕鬆地檢查錯誤條件和異常代碼。診斷區可以通過多種選項,而提供了2種信息: • 聲明 – 它提供了受影響的行數和發生的條件數目 新的GET DIAGNOSTICS指令提供了一個標準的診斷區域的接口,能容易地透過CLI或從應用程序代碼來取得和處理的結果,例如: mysql> DROP TABLE test.my_table; ERROR 1051 (42S02): Unknown table 'test.my_table' mysql> GET DIAGNOSTICS CONDITION 1 -> @p1 = RETURNED_SQLSTATE, @p2 = MESSAGE_TEXT; mysql> SELECT @p1, @p2; +-------+-------------------------------+ | @p1 | @p2 | +-------+-------------------------------+ | 42S02 | Unknown table 'test.my_table' | +-------+-------------------------------+ • 改進IPv6的支持 • MySQL 5.6改進了INET_ATON() 函數,使IPv6地址的字串在二進制轉換和儲存資料時,消耗最小的空間。 • MySQL 5.6將bind-address選項的預設值從“0.0.0.0”改為“0::0”,所以MySQL服務器接受連接所有的IPv4和IPv6地址。 10. 結論。因為MySQL的性能,可靠性和易用性,使得MySQL成為最流行和最被廣泛使用的開源資料庫。這一個階段的MySQL 5.6資料庫,提供DBA和開發人員更高的性能,可擴展性並依據構建下一代基於網絡,基於雲計算和嵌入式應用與服務的需要而全面地改進。快速的摘要如下: • 在MySQL5.6內部堆疊(stack)已被徹底重構,並充分利用現今計算機的運算能力和跨平台的多處理器的發展框架。 • 在優化性能和擴充性方面,InnoDB除去傳統的瓶頸和爭論。 • 創新的功能,如線上的綱要變更和NoSQL方式的資料庫存取,讓MySQL 不必妥協於ACID的承諾和SQL的查詢力量,而可以滿足最苛刻的應用需求。 • 為更有效地執行查詢和診斷報告而有更好的調校和分析相關的決策路徑,優化器進行了重構。 • 最後,新的高性能綱要讓DBA和開發人員可以更容易地偵測與觀察到MySQL資料庫校能指標,進而知道應用程式花費了多少資源,以進行調整並獲得最佳校能。 |