日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 开发 生产_在没有表锁定的情况下在巨大的MySQL生产表...

發(fā)布時間:2023/12/10 数据库 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 开发 生产_在没有表锁定的情况下在巨大的MySQL生产表... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

[2017]更新:MySQL 5.6支持在線索引更新

In MySQL 5.6 and higher, the table remains available for read and write operations while the index is being created or dropped. The CREATE INDEX or DROP INDEX statement only finishes after all transactions that are accessing the table are completed, so that the initial state of the index reflects the most recent contents of the table. Previously, modifying the table while an index is being created or dropped typically resulted in a deadlock that cancelled the INSERT, UPDATE, or DELETE statement on the table.

?[2015]更新表指示在MySQL 5.5中阻止寫入

從上面的答案:

“If your using a version greater than 5.1 indices are created while the database is online. So not to worry you won’t interrupt production system use.”

這是**** FALSE ****(至少對于MyISAM / InnoDB表來說,這是99.999%的人使用的.集群版是不同的.)

在創(chuàng)建索引時,對表執(zhí)行UPDATE操作將為BLOCK. MySQL真的非常愚蠢(以及其他一些事情).

測試腳本:

(

for n in {1..50}; do

#(time mysql -uroot -e 'select * from website_development.users where id = 41225\G'>/dev/null) 2>&1 | grep real;

(time mysql -uroot -e 'update website_development.users set bio="" where id = 41225\G'>/dev/null) 2>&1 | grep real;

done

) | cat -n &

PID=$!

sleep 0.05

echo "Index Update - START"

mysql -uroot website_development -e 'alter table users add index ddopsonfu (last_name, email, first_name, confirmation_token, current_sign_in_ip);'

echo "Index Update - FINISH"

sleep 0.05

kill $PID

time mysql -uroot website_development -e 'drop index ddopsonfu on users;'

我的服務(wù)器(InnoDB):

Server version: 5.5.25a Source distribution

輸出(注意第6個操作如何阻止完成索引更新所需的~400ms):

1 real 0m0.009s

2 real 0m0.009s

3 real 0m0.009s

4 real 0m0.012s

5 real 0m0.009s

Index Update - START

Index Update - FINISH

6 real 0m0.388s

7 real 0m0.009s

8 real 0m0.009s

9 real 0m0.009s

10 real 0m0.009s

11 real 0m0.009s

Vs讀操作不會阻塞(交換腳本中的行注釋):

1 real 0m0.010s

2 real 0m0.009s

3 real 0m0.009s

4 real 0m0.010s

5 real 0m0.009s

Index Update - START

6 real 0m0.010s

7 real 0m0.010s

8 real 0m0.011s

9 real 0m0.010s

...

41 real 0m0.009s

42 real 0m0.010s

43 real 0m0.009s

Index Update - FINISH

44 real 0m0.012s

45 real 0m0.009s

46 real 0m0.009s

47 real 0m0.010s

48 real 0m0.009s

無需停機即可更新MySQL的架構(gòu)

因此,我知道只有一種方法可以更新MySql架構(gòu)并且不會出現(xiàn)可用性中斷.圓形大師:

> Master A上運行了您的MySQL數(shù)據(jù)庫

>讓B大師服役并讓它復(fù)制A大師的寫作(B是A的奴隸)

>在Master B上執(zhí)行架構(gòu)更新.它將在升級期間落后

>讓B大師趕上來.不變:您的模式更改必須能夠處理從反轉(zhuǎn)模式復(fù)制的命令.索引更改符合條件.簡單的列添加通常符合條件.刪除列?可能不是.

> ATOMICALLY將所有客戶端從Master A交換到Master B.如果你想要安全(相信我,你這樣做),你應(yīng)該確保最后一次寫入A被復(fù)制到B BEFORE B第一次寫入之前.如果您允許并發(fā)寫入2個主服務(wù)器,…您最好在DEEP級別了解MySQL復(fù)制,否則您將走向痛苦的世界.極度痛苦.比如,你有一個是AUTOINCREMENT的列嗎?你搞砸了(除非你在一個主人身上使用偶數(shù),而在另一個主人身上使用賠率).不要相信MySQL復(fù)制“做正確的事”.它不聰明,不會救你.它比從命令行復(fù)制二進制事務(wù)日志并手動重放它的安全性稍差.盡管如此,斷開所有客戶端與舊主服務(wù)器的連接并將其翻轉(zhuǎn)到新主服務(wù)器可以在幾秒鐘內(nèi)完成,比等待多小時架構(gòu)升級快得多.

>現(xiàn)在B大師是你的新主人.你有新的架構(gòu).生活很好.喝啤酒;最壞的結(jié)束了.

>使用Master A重復(fù)此過程,升級他的架構(gòu),以便他成為您的新輔助主人,準(zhǔn)備好在您的主要主人(現(xiàn)在的主人B)失去權(quán)力或僅僅因為你而死亡的情況下接管.

這不是一種簡單的更新架構(gòu)的方法.可在嚴(yán)峻的生產(chǎn)環(huán)境中使用;是的.拜托,請,如果有一種更容易的方法在沒有阻止寫入的情況下向MySQL表添加索引,請告訴我.

谷歌搜索引導(dǎo)我到this article描述了一種類似的技術(shù).更好的是,他們建議在進行中的同一時間飲酒(注意我在閱讀文章之前寫了我的答案)!

?Percona的pt-online-schema-change

>創(chuàng)建與原始結(jié)構(gòu)相同的新表.

>更新新表的架構(gòu).

>在原始表上添加觸發(fā)器,以使更改與副本保持同步

>從原始表批量復(fù)制行.

>將原始表移開并替換為新表.

>放下舊桌子.

我自己從未嘗試過這個工具.因人而異

?RDS

我目前正在使用MySQL到Amazon’s RDS.這是一個非常好的服務(wù),包裝和管理MySQL,讓你用一個按鈕添加新的只讀副本,并透明地在硬件SKU上升級數(shù)據(jù)庫.這真的很方便.您沒有獲得對數(shù)據(jù)庫的SUPER訪問權(quán)限,因此您無法直接使用復(fù)制(這是一種祝福還是詛咒?).但是,您可以使用Read Replica Promotion在只讀從站上更改架構(gòu),然后將該從站升級為新的主站.與我上面描述的完全相同的技巧,只是更容易執(zhí)行.他們?nèi)匀粵]有做太多幫助你完成切換.您必須重新配置并重新啟動您的應(yīng)用.

總結(jié)

以上是生活随笔為你收集整理的mysql 开发 生产_在没有表锁定的情况下在巨大的MySQL生产表...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。