這樣:
創(chuàng)新互聯(lián)致力于網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計,成都網(wǎng)站設(shè)計,集團網(wǎng)站建設(shè)等服務(wù)標準化,推過標準化降低中小企業(yè)的建站的成本,并持續(xù)提升建站的定制化服務(wù)水平進行質(zhì)量交付,讓企業(yè)網(wǎng)站從市場競爭中脫穎而出。 選擇創(chuàng)新互聯(lián),就選擇了安全、穩(wěn)定、美觀的網(wǎng)站建設(shè)服務(wù)!
SELECT
a.dt AS '時間',
ISNULL(b.yield, '0') AS '數(shù)據(jù)'
FROM
(
SELECT
dateadd(d, number, '2018-11-01') dt
FROM
master..spt_values
WHERE
type = 'p'
AND dateadd(d, number, '2018-11-01') = '2018-11-30'
) a
LEFT JOIN CE_BD_E_ELECTRIC_WORKSHIFT_T b ON a.dt = b.opdate
擴展資料:
注意事項
COALESCE是一個函數(shù), (expression_1, expression_2, …,expression_n)依次參考各參數(shù)表達式,遇到非null值即停止并返回該值。如果所有的表達式都是空值,最終將返回一個空值。使用COALESCE在于大部分包含空值的表達式最終將返回空值。
場景一:你想要獲取最大值,然后+1返回(即返回的值已經(jīng)默認為空了),程序接收了本來不該為空的值去運算,就會出錯。
SELECT MAX(my_money)+1 FROM tb_test;
改進方法:使用 coalesce函數(shù)? ?COALESCE(值1, 值2,......, 值n) ,只要遇到非null值就返回。
這樣子就可以設(shè)置一個值,讓你第一個不成功后,返回指定的值,如下面,返回的是1.
SELECT COALESCE(MAX(my_money)+1, 1) FROM tb_test;
MYSQL存進去的和讀出的肯定一樣,但是你顯示到屏幕上就不一樣了:回車和空格沒有了,這是因為瀏覽器的緣故,你可以使用pre代碼控制,例如:
$row=mysql_fetch_row($res);
echo “pre$row[0]/pre“;
隨著 MySQL 8.0.16 的發(fā)布,我們?yōu)?MGR 添加了一些功能,以增強其高可用性。其中一個功能是能夠在某些情況下啟用已離開組的成員自動重新加入,而無需用戶干預。
為了理解這個功能的好處以及如何使用它,我們將快速查看它背后的概念以及它首先存在的動機。
介紹
MGR 允許 MySQL 用戶輕松管理高可用組,并完成保證系統(tǒng)高可用所需的所有特征,例如容錯或故障檢測。
MGR 中提供的基本保證之一是該組呈現(xiàn)給用戶的是一個不可分割的整體,這意味著一旦成員加入或離開該組,該更改將立即被其他成員得知。默認情況下,組內(nèi)的數(shù)據(jù)本身最終是一致的,盡管可以被修改。為了實現(xiàn)這種保證,MGR 使用組成員服務(wù),以及通過一致性算法檢測有沖突的事務(wù)并中止它們。MGR 的這一方面超出了本文的范圍,與成員自動重新加入功能并不完全相關(guān),本文不作贅述。
組內(nèi)新成員必須符合一些條件。其中新成員需要在事務(wù)方面趕上組進度(是通過選擇組內(nèi)一個成員來將已處理的事務(wù)流式傳輸給他,在 MGR 中稱為“捐贈”)。最后,只要在此“分布式恢復”過程中沒有遇到任何錯誤,組內(nèi)新成員將被聲明為 ONLINE 狀態(tài)。
MGR 依靠組通信層 (GCS) 來管理組。該層實現(xiàn)了用于解決沖突事務(wù)的一致性算法,并強制執(zhí)行一些通信特性。對于實現(xiàn)前面提到的組的不可分割視圖,這些特性至關(guān)重要,如消息的總順序、安全傳遞或視圖同步等。
GCS 需要能夠檢測組中哪些成員失效或看起來失效。一旦這些成員被檢測為失效,就將其從該組中移除,以便保持該組正常使用。為此 GCS 在每個成員中引入了一個故障檢測器,用于分析組內(nèi)交換的消息。如果它在一段時間內(nèi)沒有收到來自指定成員的消息,則故障檢測器將對該成員產(chǎn)生“懷疑”,并認為該成員可能已經(jīng)失效。成員從“懷疑”到真正失效的等待時間是可以配置的。
重新加入成員存在的問題
我們已經(jīng)了解 MGR 必須為了高可用提供的策略,以及它如何實現(xiàn),接下來請看示例:
一個小組由三個成員組成,其中一個成員偶爾會遇到丟失數(shù)據(jù)包、斷連或者其它導致無法解決的錯誤情況的影響組內(nèi)通信。還要考慮這些錯誤持續(xù)時間超過?group_replication_member_expel_timeout的值。
其中一個組員發(fā)生故障,小組的其他成員將決定踢出該成員。問題是,一旦該成員重新入組,他將被組驅(qū)逐加入失敗,需要通過手動干預。
如果該成員的驅(qū)逐超時屬性設(shè)置不為 0,則它將在被驅(qū)逐前等待滿足該時間量(將超時設(shè)置為 0 意味著他將永遠等待)。超時后成員將被驅(qū)逐并重新建立連接,并且無法重新加入舊組,需要再次手動干預。
于此,當存在網(wǎng)絡(luò)故障時,顯然需要手動干預。
在 MySQL 8.0.16 中,我們引入了自動重新加入組的功能,一旦成員被驅(qū)逐出組,它就會自動嘗試重新加入該組,直到達到預設(shè)的次數(shù)為止。有時每次重試之間至少等待5分鐘。
如何啟動自動重新加入?
可以通過將group_replication_autorejoin_tries設(shè)置為所需的重試次數(shù)來開啟并使用自動重新加入功能。
SET GLOBAL group_replication_autorejoin_tries = 3
默認值為 0,表示服務(wù)器禁用自動重新加入。
如何驗證自動重新加入?
與 MySQL 中的許多功能一樣,自動重新加入過程是可以監(jiān)測的。自動重新加入的可檢測性依賴于性能模式基礎(chǔ)架構(gòu),階段式收集有關(guān)數(shù)據(jù)。
他們獲取以下信息:
事件發(fā)生的線程ID(THREAD_ID)
活動名稱(EVENT_NAME)
起止時間戳以及事件的總持續(xù)時間(TIMER_START,TIMER_END 和 TIMER_WAIT)
在事件停止之前完成的工作單位和預估工作單位(WORK_COMPLETED,WORK_ESTIMATED)
因此,當自動重新加入過程開始時,它將在performance schema中注冊一個名為“stage / grouprpl / Undergoing auto-rejoinprocedure”的事件。使用表performance_schema.events_stage_current,??performance_schema.events_stages_summary_global_by_event_name和performance_schema.events_stages_history_long我們可以觀察到以下內(nèi)容:
是否正在進行自動重新加入程序
到目前為止,已經(jīng)減少重試的次數(shù)
直到下一次重試的估計剩余時間
自動重新加入過程狀態(tài)
可以通過過濾包含“auto-rejoin”字符串的活動事件來查找自動重新加入過程狀態(tài)(即,是否正在進行):
SELECT COUNT(*) FROM performance_schema.events_stages_current
WHERE EVENT_NAME LIKE '%auto-rejoin%';
COUNT(*)
1
查詢結(jié)果存在,證明服務(wù)器上運行了自動重新加入過程。
到目前為止的重試次數(shù)
如果正在進行自動重新加入程序,我們可以通過選擇階段事件上的工作單元數(shù)來檢查到目前為止嘗試的重試次數(shù):
SELECT WORK_COMPLETED FROM performance_schema.events_stages_current WHERE
EVENT_NAME LIKE '%auto-rejoin%';
WORK_COMPLETED
1
在這個例子中,到目前為止只有一次嘗試。
預計到下次重試的剩余時間
在每次重新加入嘗試之間,服務(wù)器將處于 5 分鐘的可中斷睡眠中。 重新加入嘗試直到成功或失敗之間的時間是無法估計的。 因此,為了粗略估計剩余時間,我們可以將到目前為止嘗試的重試次數(shù)乘以 5 分鐘,并減去到目前為止的階段事件所花費的時間,以估計我們還需要多長時間:
SELECT (300.0 - ((TIMER_WAIT*10e-12) - 300.0 * num_retries)) AS time_remaining FROM
(SELECT COUNT(*) - 1 AS num_retries FROM
performance_schema.events_stages_current WHERE EVENT_NAME LIKE '%auto-rejoin%') AS T,
performance_schema.events_stages_current WHERE EVENT_NAME LIKE '%auto-rejoin%';
time_remaining
30.0
所以在這個例子中,在下一次重新加入之前還有 30 秒。注意性能模式表中的所有時間記帳都以微秒精度保持,因此我們將 TIMER_WAIT 縮放為秒。
使用自動重新加入與驅(qū)逐超時的權(quán)衡
到目前為止,在這篇文章中我們只關(guān)注自動重新加入。實際上,有兩種不同的方法可以實現(xiàn)離開組的成員的重新加入:
設(shè)置自動重新加入嘗試次數(shù)來實現(xiàn)自動重新加入
設(shè)置該成員的驅(qū)逐超時時間然后配合手動干預
能有延緩刪除組內(nèi)可疑成員,并且如果配置為足夠長的驅(qū)逐超時時間,則增加了重新建立連接的機會,再次與組進行交互。
雖然這兩個功能實現(xiàn)了相同的目標,但它們的工作方式是不同的,并且需要權(quán)衡。通過使用驅(qū)逐超時,您可以維護組中可疑的成員,其缺點是您無法添加或刪除成員或選擇新的主機。如果通過使用自動重新加入,該成員將不再是該組的正常組員,將保持在 superreadonly 模式,直到重新加入該組。但在此期間,重新加入成員的同步舊數(shù)據(jù)的可能性將增加。自動重新加入過程可監(jiān)控,而驅(qū)逐超時不是真正可監(jiān)控的。
所以,總結(jié)一下:
驅(qū)逐超時的優(yōu)點
- 該成員一直在該組內(nèi)
- 可能更適合足夠小的網(wǎng)絡(luò)故障
驅(qū)逐超時的缺點
- 在懷疑某個成員時,無法在該組上添加/刪除成員
- 在懷疑某個成員時,無法選擇新的主機
- 您無法監(jiān)控此過程
自動重新加入的優(yōu)點
- 該組將在沒有重新加入成員的情況下運行,您可以添加/刪除成員并選擇新的主機
- 您可以監(jiān)控該過程
自動重新加入的缺點
- 您增加了重新加入成員上過時讀取的可能性
- 可能不適合足夠小的網(wǎng)絡(luò)故障
總而言之,我從啟用自動重新加入中獲得了什么?
通過啟用自動重新加入,您可以減少對MySQL實例的手動干預的需要。您的系統(tǒng)
更加適應瞬間網(wǎng)絡(luò)故障,同時滿足對容錯性和高可用的保證。
摘要
我們引入了一個名為group_replication_autorejoin_tries的新系統(tǒng)變量,允許用戶設(shè)置 MGR 成員在被驅(qū)逐或與組的大多數(shù)人失去聯(lián)系后嘗試重新加入組的次數(shù)。
默認情況下,此自動重新加入過程處于關(guān)閉狀態(tài)。它能幫助用戶在面對瞬間網(wǎng)絡(luò)故障時避免對 MGR 成員進行手動干預。