mysql數據庫雙機熱備

一、系統架構圖     

 數據庫1與數據庫2進行雙機熱備。雙機熱備即將主從備份在兩臺機器上相互配置一遍,達到兩臺機器互爲主機和從機的目的。

二、haproxy

微服務通過haproxy代理訪問數據庫1,在數據庫1異常時訪問數據庫2

配置如下:

global

  maxconn 32000

  nbproc  3

  daemon

defaults

  mode tcp

  retries 3

  option  abortonclose

  maxconn 32000

timeout connect 10s

timeout client 10m

timeout server 10m

timeout http-keep-alive 10m

  log 127.0.0.1   local0 err   #syslog日誌

listen win_ss

  bind 0.0.0.0:8080

  mode    tcp

option mysql-check user haproxy#添加mysql無密碼賬號,通過該賬號進行check

  #balance source

  server s1 127.0.0.1:3306  check rise 1 fall 1#主機,進行check檢查

  server s2 127.0.0.1:3306  check rise 1 fall 1 backup#熱備主機(從機),本次沒有使用負載均衡配置,僅配置backup,在主機掛掉後可以自動切換到從機

listen status

  bind 0.0.0.0:1188#web監控的地址

  mode http

stats enable

  stats refresh 30s

  stats uri  /  

stats auth    admin:admin #web登錄的賬號密碼

  stats hide-version #隱藏版本號

  stats admin if TRUE

三、msql

3.1mysql備份原理

Mysql內建的複製功能是構建大型,高性能應用程序的基礎。將Mysql的數據分佈到多個系統上去,這種分佈的機制,是通過將Mysql的某一臺主機的數據複製到其它主機(slaves)上,並重新執行一遍來實現的。複製過程中一個服務器充當主服務器,而一個或多個其它服務器充當從服務器。主服務器將更新寫入二進制日誌文件,並維護文件的一個索引以跟蹤日誌循環。這些日誌可以記錄發送到從服務器的更新。當一個從服務器連接主服務器時,它通知主服務器從服務器在日誌中讀取的最後一次成功更新的位置。從服務器接收從那時起發生的任何更新,然後封鎖並等待主服務器通知新的更新。

3.2mysql支持的複製類型

  • 基於語句的複製:  在主服務器上執行的SQL語句,在從服務器上執行同樣的語句。MySQL默認採用基於語句的複製,效率比較高。一旦發現沒法精確複製時,會自動選着基於行的複製。缺點:使用如sysdate、uuid等與本機相關的函數會報警
  • 基於行的複製:把改變的內容複製過去,而不是把命令在從服務器上執行一遍。缺點:binlog文件太大,尤其當在一個數據量較大的表中新增字段時,每一行一條的update語句大大增加了binlog文件。所以在在添加字段時,一般需要暫停同步。dba手動添加字段(或則使用別的方式),然後再啓動同步。mysql5.5默認使用該方式。
  • 混合類型的複製: 默認採用基於語句的複製,一旦發現基於語句的無法精確的複製時,就會採用基於行的複製。

mysql主從配置詳細內容參考https://www.cnblogs.com/jirglt/p/3549047.html

3.3mysql主從備份日常監控

  • 監控備份情況及異常處理命令如下:

stop slave;//停止從庫同步

set global sql_slave_skip_counter=1;//跳過錯誤

start slave;//開啓同步

show slave status;//顯示同步狀態

  • 同步狀態重點關注字段:

Slave_io_state//狀態

Relay_master_log_file//當前讀取的備份文件名

Slave_io_running//io運行情況

Slave_sql_running//sql運行情況

Seconds_behind_master//落後於主機的時間

  • 數據庫配置

#忽略同步的表
replicate-wild-ignore-table

#跳過指定error no類型的錯誤,不是越多越好

slave-skip-errors=1062,1053,1146,1051

四、windows下的mysql定時備份

在windows上添加任務計劃,明天定時備份。

注意:1、bat文件路徑最好不要添加空格、括號等2、起始於路徑需要配置 

bat內容

@echo off

echo ------------------------backup Database-----------------------------    

::----------------------------配置部分--------------------------
:: 備份目錄,必須以\結尾
set BACKUP_PATH=F:\1-DB-BACKUP\
:: 要備份的數據庫名稱,支持%通配符,注意:兩個%%表示一個%
set DATABASES=databasename%%
::建議賬戶只分配備份必要的權限,參考語句:GRANT SELECT, RELOAD, LOCK TABLES ON *.* TO 'dump'@'127.0.0.1' IDENTIFIED BY 'mima';
set USERNAME=root
set PASSWORD=mima
set PORT=3306
:: MYSQL目錄,必須以\結尾
set MYSQL=E:\1-DB\mysql-5.5.51-winx64(slave)\bin\

set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%
::----------------------------執行部分--------------------------
::必須加延遲開關,否則for循環裏面的set結果不正確,而且for循環內的引用變量要用!
setlocal EnableDelayedExpansion

echo show databases like '%DATABASES%'; > tmp.sql
"%MYSQL%"mysql -u%USERNAME% -p%PASSWORD% -P%PORT% < tmp.sql > out.tmp

echo flush tables; > tmp.sql
echo flush tables with read lock; >> tmp.sql
echo show slave status\G; >> tmp.sql
"%MYSQL%"mysql -u%USERNAME% -p%PASSWORD% -P%PORT% < tmp.sql > %BACKUP_PATH%%year%%month%%day%.slave

echo show master status\G; > tmp.sql
"%MYSQL%"mysql -u%USERNAME% -p%PASSWORD% -P%PORT% < tmp.sql > %BACKUP_PATH%%year%%month%%day%.master

FOR /F "tokens=1* delims=:" %%a IN ('findstr /n .* out.tmp') DO (
  if %%a gtr 1 (
    echo Dumping database %%b ...
    set filename=%BACKUP_PATH%%%b_%year%%month%%day%
    "%MYSQL%"mysqldump -u%USERNAME% -p%PASSWORD% -P%PORT% %%b --lock-all-tables=true --skip-lock-tables --default-character-set=utf8 --hex-blob --result-file=!filename!.sql
  )
)
echo unlock tables; > tmp.sql
"%MYSQL%"mysql -u%USERNAME% -p%PASSWORD% -P%PORT% < tmp.sql

del out.tmp /q 1>nul 2>nul
del tmp.sql /q 1>nul 2>nul

::刪除歷史文件(30天)
forfiles /p %BACKUP_PATH% /m *.* -d -30 /c "cmd /c del /f @path"


echo ------------------------close backup Database-----------------------------  
@echo on
  • 遺留問題
  1. 尚不能實現高可用,單點問題,需要使用集羣及vip的方式解決
  2. 同步的機制,無法實現雙機的實時性,參考與pxc的對比https://blog.csdn.net/zisefeizhu/article/details/81873466
  3. 讀寫分離問題,需要mycat等中間件解決
  4. 分區表的問題,需要跟蹤及測試
  5. 數據庫宕機報警及相關信息監控,使用如zabbix監控
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章