mysql創(chuàng)建視圖 MySQL主從復(fù)制能完美解決數(shù)據(jù)庫的單點(diǎn)問題嗎?為什么?
MySQL主從復(fù)制能完美解決數(shù)據(jù)庫的單點(diǎn)問題嗎?為什么?使用主從時,實(shí)際上放棄了強(qiáng)一致性。由于受試者只問一個問題,我們不考慮訪問次數(shù)的問題。換句話說,假設(shè)主從復(fù)制可以完全支持當(dāng)前的系統(tǒng)訪問。)通用數(shù)據(jù)
MySQL主從復(fù)制能完美解決數(shù)據(jù)庫的單點(diǎn)問題嗎?為什么?
使用主從時,實(shí)際上放棄了強(qiáng)一致性。由于受試者只問一個問題,我們不考慮訪問次數(shù)的問題。換句話說,假設(shè)主從復(fù)制可以完全支持當(dāng)前的系統(tǒng)訪問。)
通用數(shù)據(jù)庫主從設(shè)置:
主數(shù)據(jù)庫可以讀寫
即系統(tǒng)可以同時從主數(shù)據(jù)庫和從數(shù)據(jù)庫獲取數(shù)據(jù)。數(shù)據(jù)寫入主庫后,會自動同步到從庫。
這構(gòu)成了一個簡單的分布式系統(tǒng)。根據(jù)cap定理,三個中只能選擇一個。如果一致性很強(qiáng),則不會提高系統(tǒng)的可用性,反而會降低系統(tǒng)的可用性。
讓我們看看上面的主從結(jié)構(gòu)中可能出現(xiàn)什么問題:
系統(tǒng)寫入主數(shù)據(jù)庫,然后從主數(shù)據(jù)庫進(jìn)行查詢。這是一個單點(diǎn)數(shù)據(jù)庫,沒有影響。
-如果數(shù)據(jù)已同步,則沒有影響
-如果數(shù)據(jù)未同步,則會查詢舊數(shù)據(jù)
-如果同步有問題,則會斷開主設(shè)備和從設(shè)備的連接。如果系統(tǒng)無法感知它,那么查詢可能總是舊數(shù)據(jù)。這里我們需要監(jiān)視同步。當(dāng)同步出現(xiàn)問題時,我們應(yīng)該及時處理
掛斷庫。主數(shù)據(jù)不能與從數(shù)據(jù)同步。如果主從交換機(jī)是自動的,單點(diǎn)故障的概率只會降低50%(如果主數(shù)據(jù)庫或備用數(shù)據(jù)庫發(fā)生故障,并且沒有人恢復(fù))。
為什么數(shù)據(jù)庫字段需要設(shè)置默認(rèn)值?
懷疑的原因是MySQL的嚴(yán)格模式?jīng)]有啟用,許多隨快速開發(fā)環(huán)境提供的MySQL(phpnow、Wamp、AppServ等)甚至在某些生產(chǎn)環(huán)境中也沒有啟用嚴(yán)格模式。
在非嚴(yán)格模式下,MySQL將容忍許多開發(fā)遺漏。例如,在varcaht中插入一個100長度的字符串只會截?cái)嗳哂嗖糠侄粫?bào)告錯誤。嚴(yán)格模式檢查數(shù)據(jù)的格式、長度和類型。您發(fā)布的表創(chuàng)建語句指定默認(rèn)值。如果此時未指定默認(rèn)值,則當(dāng)您認(rèn)為將啟用默認(rèn)值時,將返回#1364錯誤。
最好在開發(fā)階段使用嚴(yán)格模式,這是對我們的代碼嚴(yán)格性的測試。嚴(yán)格的in和wide-out還可以保證向產(chǎn)品環(huán)境的順利轉(zhuǎn)移以及隨后的數(shù)據(jù)庫遷移和重構(gòu)。
為什么數(shù)據(jù)庫要設(shè)置默認(rèn)值?因?yàn)槲覀兿M诓迦霐?shù)據(jù)時,MySQL可以按照您期望的方式處理有意或無意忽略的字段,比如一些默認(rèn)的正常狀態(tài)碼、用戶插入數(shù)據(jù)時沒有設(shè)置的文本字段等等。
我的習(xí)慣是任何數(shù)據(jù)表的任何列都不為空。在此基礎(chǔ)上,數(shù)字默認(rèn)設(shè)置為0,文本默認(rèn)設(shè)置為“”(在phpMyAdmin中留空)。null和“”之間有區(qū)別,我對此知之甚少。我之所以使用“”是因?yàn)楦鶕?jù)語義,null表示“此字段的值為空”,而“”表示“此字段的值尚未設(shè)置”。另一個原因是,在MyISAM引擎下,null在索引、索引統(tǒng)計(jì)和磁盤占用方面有額外的開銷。對于允許null的列,每個字段的長度比not null的長度長1位。我不確定這幾年是否有所改善。關(guān)于null的大部分信息都是在MySQL 5.0中讀取的。
請直接修改我的答案。非常感謝。