大阪公交站.jpg
#SQL的四種語言
- DDL(Data Definition Language)數(shù)據(jù)庫定義語言statements are used to define the database structure or schema.
- DML(Data Manipulation Language)數(shù)據(jù)操縱語言statements are used for managing data within schema objects.
- DCL(Data Control Language)數(shù)據(jù)庫控制語言 授權(quán),角色控制等
- TCL(Transaction Control Language)事務(wù)控制語言
高可用方案關(guān)注點(diǎn)
- 一主多從
- 多主復(fù)制茬贵,所有數(shù)據(jù)庫都是讀寫打開的牵祟。所以性能有問題 percona
- mysql復(fù)制延遲 并行復(fù)制
- virtual ip漂移方案解決人工修改換ip
- 為了減少人工介入處理的時間開銷引入自動探活處理機(jī)制
- 云環(huán)境+高可用中間層+底層數(shù)據(jù)庫 = 一種paas = 基本的rds
- 高可用中間件 MHA MMM InnoSQL-HA-Suit(引入zookeeper管理)
- 半同步復(fù)制+高可用中間件 + vip管理方案 (半同步復(fù)制+MHA+Keepalive)(半同步復(fù)制+RDS)
同步概念
異步復(fù)制(Asynchronous replication)
MySQL默認(rèn)的復(fù)制即是異步的,主庫在執(zhí)行完客戶端提交的事務(wù)后會立即將結(jié)果返給給客戶端,并不關(guān)心從庫是否已經(jīng)接收并處理,這樣就會有一個問題,主如果crash掉了退渗,此時主上已經(jīng)提交的事務(wù)可能并沒有傳到從上,如果此時蕴纳,強(qiáng)行將從提升為主会油,可能導(dǎo)致新主上的數(shù)據(jù)不完整。全同步復(fù)制(Fully synchronous replication)
指當(dāng)主庫執(zhí)行完一個事務(wù)古毛,所有的從庫都執(zhí)行了該事務(wù)才返回給客戶端翻翩。因?yàn)樾枰却袕膸靾?zhí)行完該事務(wù)才能返回,所以全同步復(fù)制的性能必然會收到嚴(yán)重的影響。半同步復(fù)制(Semisynchronous replication)
介于異步復(fù)制和全同步復(fù)制之間嫂冻,主庫在執(zhí)行完客戶端提交的事務(wù)后不是立刻返回給客戶端胶征,而是等待至少一個從庫接收到并寫到relay log中才返回給客戶端。相對于異步復(fù)制絮吵,半同步復(fù)制提高了數(shù)據(jù)的安全性弧烤,同時它也造成了一定程度的延遲,這個延遲最少是一個TCP/IP往返的時間蹬敲。所以,半同步復(fù)制最好在低延時的網(wǎng)絡(luò)中使用莺戒。
mysql分支
- Percona
- mariadb (mysql被收購后創(chuàng)始人創(chuàng)建的)
- oracle myql5.7(性能提升明顯) sysbench測試工具
- 更好的監(jiān)控統(tǒng)計 AWR報告
- 更好的復(fù)制優(yōu)化
- 徹底解決復(fù)制延遲問題
- 更好的運(yùn)維改進(jìn) buffer pool支持在線修改 ddl支持在線修改
shard
能不 shard 就盡量不 shard伴嗡,因?yàn)?shard 會帶來復(fù)雜性,數(shù)據(jù)庫變復(fù)雜从铲,服務(wù)器變多瘪校,難以維護(hù)、監(jiān)測等名段。過分 shard 數(shù)據(jù)后阱扬,關(guān)系型數(shù)據(jù)庫帶來的好處就沒了。盡量用簡單的辦法解決負(fù)載問題伸辟,比如:better hardware, more hardware, server tweaking and tuning, vertical partitioning, sql query optimization 等麻惶,如果這些能解決問題就不要shard。
另一方面信夫,如果確定有 shard 的必要就要盡早開始設(shè)計窃蹋,并且經(jīng)常 shard,在設(shè)計數(shù)據(jù)庫的時候牢記 shard 的兩個關(guān)鍵點(diǎn) sharding/partitioning key 和 sharding/partitioning scheme静稻。
主從復(fù)制延遲問題
- 網(wǎng)絡(luò)延遲
- master負(fù)載
- slave負(fù)載