久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MySQL 主從的一些基礎知識

169次閱讀
沒有評論

共計 3798 個字符,預計需要花費 10 分鐘才能閱讀完成。

本篇文章給大家分享的是有關 MySQL 主從的一些基礎知識,丸趣 TV 小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著丸趣 TV 小編一起來看看吧。

MySQL 復制原理

1. 主庫修改時會把數據變更作為 event 記錄在 binlog 中, 主庫上的 sync_binlog 參數控制 binlog 日志刷新到磁盤.

2. 主庫推送 binlog 中的事件到從庫的中繼日志 relay log,之后從庫根據中繼日志 relay log 重做數據變更操作。通過邏輯復制達到主從同步。

MySQL 通過 3 個現成來完成主從數據庫之間的復制:

1.binlog dump 跑在主庫上,負責讀取數據庫事件并發送給 I / O 線程

2.I/ O 線程 跑在從庫上,當從庫 start slave 時 創建 I / O 線程 鏈接到 master 將主庫的事件寫入到 relaylog

3.SQL 線程跑在從庫上,負責讀取 relay
log 并更新從庫。

4.Master.inf and relay-log.info 用來保存復制的進度。

三種復制方法, MIX,STATEMENT,ROW

1.  statement

基于語句的復制, 可能會因為存儲過程或觸發器, 時間函數導致主備不一致,數據量小。

2. row

行級數據復制, 缺點是數據量較大,但是不會因為觸發器等外在條件影響數據

3.   Mix

默認采用 statement 模式 如果語句中包含更新時間,用戶相關的函數等

Mysqlbinlog –vv logfilename –base64-output=DECODE-ROWS
–start-pos=number 才能解析 row 模式的內容。

雙主復制架構:

由 master1 作為讀寫庫,master2 作為只讀庫。

同時雙向作為對方的 slave。

當維護時

1.  先停掉 master1 上的 slave。免得當 master2 做維護時影響到 master1.

2.  停掉 master2 上的 slave。
開始維護操作,比如創建索引。

3.  打開 master2 上的 slave 讓 master2 與 master1 同步。

4.  將讀寫操作轉移到 master2,確保 master1 上無寫入操作

5.  將 master1 的 slave 打開,
讓其與 salve2 同步完成。

搭建 mysql 復制:

1.  建立一個用于 replication 的賬號:

Create replac
slave on *.* TO‘repl’@’192.168.7.200’identified by‘1234test’;

2.  修改 my.cnf 開啟 binlog 并且設置 server-id 的值
log-bin = xxxxx.log
server-id=1

3.  鎖住所有的表,lock tables with read lock

4.  檢查當前日志偏移量 show master status

5.  備份或者通過直接 shutdown 數據庫
拷貝數據文件的方式到 slave 庫。

6.  Unlock tables;

7.  修改 slave 的 my.cnf  server-id=2

8.  使用延遲復制開啟 salve ./bin/mysql_safe –skip-slave-start

9.  對數據庫服務做響應設置
mysql change master to master_host=’’,master_user=’’,master_password=’’,master_logfile=’’,master_log_pos=’’;

10.  從庫上輸入:start slave;

11.  show process\G 檢查 slave 進程

12.  show variables like‘%sync_binlog%’
0 的表示 mysql 不控制 binlog 的刷新,由文件系統控制。

13.  最后注意的幾點就是 MHA 架構可以通過自動抽取缺失的 log 進行 catchup。也可以通過 mysqlbinlog 工具來抽取之前主庫為宕機時未抽取的 log 傳送到備庫上去。

半同步復制:

在 mysql 5.5 之前,由于主備庫之間都處于異步復制的狀態,如果主庫在 commit 了之后而崩壞,此時 binlog 尚未傳到 slave 的庫上。則會丟失數

而 5.5 之后 mysql 推出了半同步復制狀態。在默認狀態下 mysql 需要保證有任意一臺備庫的 relaylog 接收到的更改之后才會確認 commit 已經成功。如果中途斷網的話
則會再自動切換回半同步復制模式。

安裝:
1. 首先需要確認 mysql 是否可以使用該功能,select @@have_dynamic_loading = YES

2 到 $MYSQL_HOME/lib/plugin/ 下找到主庫 / 從庫插件 semisync_master/slave.so

3. 主備庫上安裝該插件 install
plugin rpl_semi_sync_master/salve soname‘semisync_master/slave.so’

4.select * from mysql.plugin

5. 在主備庫上設置全局參數打開半同步 set
global rpl_semi_sync_master_enabled=1;

  Set
global rpl_semi_sync_master_timeout=3000;

  從庫上
  set global rpl_semi_sync_slave=1;

6 如果已經啟動了異步復制 需要停止一下 io_thread. Stop
slave io_thread; start slave io_thread;

Show status like‘%semi_sync%’

需要注意的幾個結果有:

rpl_semi_syc_master_status  ON 代表打開;

rpl_semi_syc_master_yes/no_tx 表示 同步或非同步的 transaction 次數

rpl_semi_syc_master_timeout 標示等待多久會判斷 slave 超時。

如果從庫斷開后重新連接上了,會自動轉回半同步狀態。

Mysql replication 一些有用的參數:

1.  Log-slave-updates 從庫是否需要記 binlog  這個對于從庫傳從庫是比較有幫助的

2.  Master-connect-retry 在從庫和主庫失去連接時的重試間隔
默認 60 秒

3.  ./bin/Mysqld_safe –read-only 讓以避免超級用戶以外的人修改從庫的數據

日常維護命令:

1.  查看從庫狀態 show slave status. 比較關心的 2 狀態一個是 SLAVE_IO_Running 和 Slave_SQL_Running.

2.  有時候主備庫差距越來越大,可以在空閑的時候使用 flush tables with read lock.
show master status 查看 binlog 的 position。接下來使用 select master_pos_wait(‘logiflename’,’log_pos’); 這個語句會阻塞直到從庫同步到該點。然后再解鎖表。

3.  從庫出錯:

a)  如果需要跳過某些導致 replication 失敗的語句可以使用 set global SQL_SLAVE_SKIP_COUNTER=N. N=1|2. 當主庫沒有自增長時使用 1 自增長用 2.

b)  Log event entry exceeded
max_allowed_packet 一般是因為有長字符串或 blob 無法傳輸。
此時需要增加主庫上該參數的大小。

c)  多主復制時自增長變量沖突的話
在雙主上需要設置 auto_increment_increment=2,auto_increment_offset=1;(1,3,5,7….)
auto_increment_increment=2,auto_increment_offset=0;(2,4,6,8….)

一些簡單的提高從庫性能的架構

1. 通過 master1 傳給 master2  master2 使用 blackhole 引擎開始 slave-log-update。
  另外的 slave 通過 replace-do-db 的方式只復制部分數據庫。這種方法的缺點是一旦 master1 宕機之后會比較麻煩需要提前商量好異常處理方案。

2.mysql 5.6 之后有多線程復制,允許從庫并行更新。Slave_parallel_works=2.
Percona 分支的 mysql 還可以用淘寶丁奇的 mysql transfer 來實現從主庫多線程應用中繼日志來解決。

Http://dinglin.iteye.com/blog/188640.

切換主從:

1. 先確保所有從庫都執行了 relay log 中的全部更新。
在每個從庫上執行 stop slave io_thread。
然后用 show process \G 直到看到 state: has read all relay log 之后標志更新全都執行完畢。

2. S1 上 Stop slave. 打開 log-bin 模式。同時關閉 log-slave-updates.

3. Reset master.

4. S2 上執行 stop slave 然后 change master to master_host=S1. Start slave.

5. 刪除 S1 上的 master.info 和 relay-log.info 否則下次還是按照從庫啟動

6. 主庫修復后
可以按照 s2 的配置方法
重置到 S1。

以上就是 MySQL 主從的一些基礎知識,丸趣 TV 小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注丸趣 TV 行業資訊頻道。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-27發表,共計3798字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 苏尼特右旗| 科技| 江源县| 阿拉善盟| 屏南县| 垦利县| 湘阴县| 柳江县| 南召县| 建瓯市| 稷山县| 永兴县| 石景山区| 石门县| 南郑县| 建瓯市| 彰化市| 铜陵市| 霍州市| 崇明县| 南漳县| 合川市| 思茅市| 峨眉山市| 涿鹿县| 乐亭县| 琼中| 泾源县| 景泰县| 阳春市| 中江县| 桃园市| 荔浦县| 交口县| 留坝县| 崇阳县| 育儿| 荣昌县| 乐山市| 宁都县| 屏东市|