最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL 搭建雙主復制服務并通過 HAProxy 負載均衡的過程詳解

 更新時間:2024年03月19日 15:39:19   作者:小畢超  
在數(shù)據(jù)庫管理中,數(shù)據(jù)的備份和同步是至關重要的環(huán)節(jié),而雙主復制(Dual Master Replication)作為一種高可用性和數(shù)據(jù)同步的解決方案,本文將介紹MySQL雙主復制的配置過程并通過 HAProxy 負載均衡,感興趣的朋友一起看看吧

一、MySQL 搭建雙主復制高可用服務

在數(shù)據(jù)庫管理中,數(shù)據(jù)的備份和同步是至關重要的環(huán)節(jié),而雙主復制(Dual Master Replication)作為一種高可用性和數(shù)據(jù)同步的解決方案,通過讓兩個數(shù)據(jù)庫實例同時充當主服務器和從服務器,MySQL雙主復制可以實現(xiàn)數(shù)據(jù)的雙向同步,為數(shù)據(jù)庫系統(tǒng)提供了更靈活和可靠的解決方案。即使其中一個主服務器發(fā)生故障,另一個主服務器仍然可以繼續(xù)提供服務,確保系統(tǒng)的穩(wěn)定性和可用性。這種數(shù)據(jù)同步方式不僅可以加強數(shù)據(jù)的備份與恢復能力,還可以提高系統(tǒng)的擴展性,適用于需要高度數(shù)據(jù)一致性和容錯性的場景。

本文將介紹MySQL雙主復制的配置過程,整體實現(xiàn)架構如下:

主機規(guī)劃:

ip規(guī)劃
172.19.222.20MySQL1
172.19.222.82MySQL2
172.19.222.84Haproxy

二、MySQL1 部署

mysql 的部署這里采用 docker + docker-compose 的方式快速實現(xiàn),主要關注點在于配置文件:

首先編寫 my.cnf 文件,寫入如下內(nèi)容:

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# 主從同步
server-id = 1
log-bin = mysql-bin
sync_binlog = 1
binlog_checksum = none
binlog_format = mixed
auto-increment-increment = 2
auto-increment-offset = 1
slave-skip-errors = all
event_scheduler = 1
max_allowed_packet = 64M
# Custom config should go here
!includedir /etc/mysql/conf.d/

其中主從復制的參數(shù)解釋如下:

server-id = 1:指定MySQL實例的唯一標識ID,用于在主從復制中區(qū)分不同的MySQL實例。

log-bin = mysql-bin:啟用binlog日志,并指定binlog文件的前綴名為mysql-bin。binlog用于記錄所有的數(shù)據(jù)更改操作,以便主從服務器之間進行數(shù)據(jù)同步。

sync_binlog = 1:表示每次事務提交時都將強制把binlog緩沖區(qū)的內(nèi)容寫入磁盤,確保binlog日志及時持久化,提高數(shù)據(jù)安全性。

binlog_checksum = none:設置binlog文件的校驗方式為none,表示不對binlog文件進行校驗和驗證。

binlog_format = mixed:指定binlog日志的格式為mixed,即混合模式,根據(jù)具體情況自動選擇使用statement或row格式記錄數(shù)據(jù)變更。

auto-increment-increment = 2:設置自增長字段的增量值為2,用于在主從復制中避免自增字段沖突。

auto-increment-offset = 1:設置自增長字段的偏移量為1,用于在主從復制中避免自增字段沖突。

slave-skip-errors = all:當從服務器在執(zhí)行SQL線程時發(fā)生錯誤時,跳過所有錯誤繼續(xù)執(zhí)行,這可能會導致數(shù)據(jù)不一致,謹慎使用。

event_scheduler = 1:啟用Event Scheduler,用于執(zhí)行預定的事件任務。

max_allowed_packet = 64M:設置最大允許的數(shù)據(jù)包大小為64MB,用于控制單個數(shù)據(jù)庫請求或查詢的數(shù)據(jù)包大小限制。

編寫 docker-compose.yml 文件:

version: '2.0'
services:         
  mysql:
    restart: always
    image: mysql:8.0.20
    container_name: mysql
    volumes:
      - ./data:/var/lib/mysql
      - ./my.cnf:/etc/mysql/my.cnf
    command:
      --lower_case_table_names=1
      --character-set-server=utf8
      --sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=root123
      - TZ=Asia/Shanghai 

啟動服務:

docker-compose up -d

下面使用客戶端工具連接該數(shù)據(jù)庫:

查看當前 master 狀態(tài):

show master status;

注意這里查詢出來的 FilePosition 下面主從復制時會用到。

創(chuàng)建用于主從復制的用戶:

CREATE USER 'replica'@'%' IDENTIFIED WITH mysql_native_password BY 'replica123';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%';
FLUSH PRIVILEGES;

三、MySQL2 部署

同樣編寫 my.cnf 文件,寫入如下內(nèi)容:

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# 主從同步
server-id = 2
log-bin = mysql-bin
sync_binlog = 1
binlog_checksum = none
binlog_format = mixed
auto-increment-increment = 2
auto-increment-offset = 2
slave-skip-errors = all
event_scheduler = 1
max_allowed_packet = 64M
# Custom config should go here
!includedir /etc/mysql/conf.d/

配置和MySQL1差不多,主要注意 server-idauto-increment-offset 的區(qū)別。

編寫 docker-compose.yml 文件:

version: '2.0'
services:         
  mysql:
    restart: always
    image: mysql:8.0.20
    container_name: mysql
    volumes:
      - ./data:/var/lib/mysql
      - ./my.cnf:/etc/mysql/my.cnf
    command:
      --lower_case_table_names=1
      --character-set-server=utf8
      --sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=root123
      - TZ=Asia/Shanghai 

啟動服務:

docker-compose up -d

下面使用客戶端工具連接該數(shù)據(jù)庫:

查看當前 master 狀態(tài):

show master status;

同樣這里查詢出來的 FilePosition 下面主從復制時會用到。

創(chuàng)建用于主從復制的用戶:

CREATE USER 'replica'@'%' IDENTIFIED WITH mysql_native_password BY 'replica123';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%';
FLUSH PRIVILEGES;

四、配置主主復制

MySQL 1 同步 MySQL 2

MySQL1 中執(zhí)行 :

change master to master_host='172.19.222.82',master_user='replica',master_password='replica123',master_log_file='mysql-bin.000003',master_log_pos=152;

注意:其中 master_log_filemaster_log_pos 是上面部署 MySQL 2show master status; 查詢的結果。

啟動同步進程:

start slave;

查看同步狀態(tài):

show slave status\G

看到 Slave_IO_RunningSlave_SQL_Running 都為 Yes 則表示啟動成功。

MySQL 2 同步 MySQL 1

MySQL 2 中執(zhí)行 :

change master to master_host='172.19.222.20',master_user='replica',master_password='replica123',master_log_file='mysql-bin.000003',master_log_pos=811;

其中 master_log_filemaster_log_pos 是上面部署 MySQL 1show master status; 查詢的結果。

啟動同步進程:

start slave;

查看同步狀態(tài):

show slave status\G

同樣觀察 Slave_IO_RunningSlave_SQL_Running 都為 Yes 則表示啟動成功。

五、測試主主復制

首先在 MySQL1 中創(chuàng)建數(shù)據(jù)庫 testdb:

create database testdb;

然后在 MySQL 2 中查看數(shù)據(jù)庫:

show databases;

可以正常查到 MySQL 1 中創(chuàng)建的數(shù)據(jù)庫。

然后在 MySQL 2 中創(chuàng)建測試表:

use testdb;
create table `test` (
  `id` int not null auto_increment,
  `name` varchar(255) default null,
  primary key (`id`)
) engine=InnoDB default charset=utf8mb4 collate=utf8mb4_0900_ai_ci;

接著在 MySQL 1 中查看表:

use testdb;
show tables;

可以正??吹?MySQL 2 創(chuàng)建的表。

然后在 MySQL 1 中寫入一條測試數(shù)據(jù):

insert into test(name) values('小明');

然后到 MySQL 2 中查看表數(shù)據(jù):

select * from test;

可以正常查到 MySQL 1 寫入的數(shù)據(jù)。

六、配置 HAProxy 負載 MySQL 服務

經(jīng)過上面測試已經(jīng)證明主主復制功能正常,數(shù)據(jù)無論寫在哪個數(shù)據(jù)庫上都能同步給另外一臺,下面通過 HAProxy 負載均衡代理 MySQL 1MySQL 2 ,對外提供統(tǒng)一的入口。

下載 HAProxy

yum install -y haproxy

覆蓋修改 /etc/haproxy/haproxy.cfg 配制文件,注意修改 backend mysql-apiserver 下的兩個 MySQLip

cat > /etc/haproxy/haproxy.cfg << EOF
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    # to have these messages end up in /var/log/haproxy.log you will
    # need to:
    # 1) configure syslog to accept network log events.  This is done
    #    by adding the '-r' option to the SYSLOGD_OPTIONS in
    #    /etc/sysconfig/syslog
    # 2) configure local2 events to go to the /var/log/haproxy.log
    #   file. A line like the following can be added to
    #   /etc/sysconfig/syslog
    #
    #    local2.*                       /var/log/haproxy.log
    #
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon 
    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------  
defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000
#---------------------------------------------------------------------
# mysql apiserver frontend which proxys to the backends
#--------------------------------------------------------------------- 
frontend mysql-apiserver
    mode                 tcp
    bind                 *:3306
    option               tcplog
    default_backend      mysql-apiserver    
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend mysql-apiserver
    mode        tcp
    balance     roundrobin
    server      master1   172.19.222.20:3306 check
    server      master2   172.19.222.82:3306 check
#---------------------------------------------------------------------
# collection haproxy statistics message
#---------------------------------------------------------------------
listen stats
    bind                 *:1080
    stats auth           admin:awesomePassword
    stats refresh        5s
    stats realm          HAProxy\ Statistics
    stats uri            /admin?stats
EOF

啟動haproxy

systemctl start haproxy

設置開機自啟:

systemctl enable haproxy

查看啟動狀態(tài):

systemctl status haproxy

測試

通過 84 服務器連接 MySQL

查看前面創(chuàng)建的數(shù)據(jù)庫、表、數(shù)據(jù):

寫入一條數(shù)據(jù):

insert into test(name) values("小紅");

分別到 MySQL 1MySQL 2查詢數(shù)據(jù):

都可以查詢到數(shù)據(jù),到此 MySQL 搭建雙主復制服務 并 通過 HAProxy 負載均衡就結束了。

到此這篇關于MySQL 搭建雙主復制服務 并 通過 HAProxy 負載均衡的文章就介紹到這了,更多相關MySQL 雙主復制服務內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • mysql基于正則實現(xiàn)模糊替換字符串的方法分析

    mysql基于正則實現(xiàn)模糊替換字符串的方法分析

    這篇文章主要介紹了mysql基于正則實現(xiàn)模糊替換字符串的方法,結合具體實例對比分析了使用正則實現(xiàn)mysql字符串替換的注意事項與相關操作技巧,需要的朋友可以參考下
    2017-03-03
  • MYSQL導入導出命令詳解

    MYSQL導入導出命令詳解

    網(wǎng)上看了一些總結出來的資料,不知道對大家有沒有用的,有用的話也就不枉費我一按按鈕的一片苦心了
    2007-09-09
  • Mysql中調(diào)試存儲過程最簡單的方法

    Mysql中調(diào)試存儲過程最簡單的方法

    以前同事告訴我用臨時表插入變量數(shù)據(jù)來查看,但是這種方法過于麻煩,而且Mysql沒有比較好的調(diào)試存儲過程的工具。今天google了下發(fā)現(xiàn)可以用select + 變量名的方法來調(diào)試
    2021-06-06
  • 服務器MYSQL啟動/停止/重啟命令方式

    服務器MYSQL啟動/停止/重啟命令方式

    文章介紹了查看MySQL版本的兩種方法及啟動/停止/重啟命令,提示5.5后服務名改為mysql,舊版本用mysqld;現(xiàn)代系統(tǒng)推薦systemctl替代service,需注意命令差異
    2025-09-09
  • Ubuntu?18.04.4安裝mysql的過程詳解?親測可用

    Ubuntu?18.04.4安裝mysql的過程詳解?親測可用

    這篇文章主要介紹了Ubuntu?18.04.4安裝mysql-親測可用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • MAC下修改mysql默認字符集為utf8的方法

    MAC下修改mysql默認字符集為utf8的方法

    本文主要介紹了如何修改MAC版mysql默認字符集為utf8,如果你的MAC版mysql字符亂碼,可以參考一下這篇文章
    2018-03-03
  • MySql存儲過程學習知識小結

    MySql存儲過程學習知識小結

    這篇文章主要介紹了MySql存儲過程學習知識小結的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • mysql優(yōu)化小技巧之去除重復項實現(xiàn)方法分析【百萬級數(shù)據(jù)】

    mysql優(yōu)化小技巧之去除重復項實現(xiàn)方法分析【百萬級數(shù)據(jù)】

    這篇文章主要介紹了mysql優(yōu)化小技巧之去除重復項實現(xiàn)方法,結合實例形式分析了mysql去除重復項的方法,并附帶了隨機查詢優(yōu)化的相關操作技巧,需要的朋友可以參考下
    2020-01-01
  • MySQL不就是多表查詢嗎

    MySQL不就是多表查詢嗎

    這篇文章主要介紹了MySQL多表查詢相關知識,今天我們學習要對多張表進行相關操作,相比較于單一的表來說,多張表操作相對復雜一些,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2023-06-06
  • SQL中JOIN操作的條件使用總結與實踐

    SQL中JOIN操作的條件使用總結與實踐

    在SQL查詢中,JOIN操作是多表關聯(lián)的核心工具,本文將從原理,場景和最佳實踐三個方面總結JOIN條件的使用規(guī)則,希望可以幫助開發(fā)者精準控制查詢邏輯
    2025-06-06

最新評論

汽车| 河曲县| 武城县| 濉溪县| 龙游县| 年辖:市辖区| 讷河市| 陆川县| 墨竹工卡县| 富顺县| 大姚县| 石泉县| 绥滨县| 永顺县| 从化市| 昌乐县| 县级市| 松桃| 凉山| 洛南县| 平南县| 高青县| 丰城市| 会昌县| 万年县| 布尔津县| 虹口区| 兰西县| 榆树市| 贡嘎县| 卫辉市| 陈巴尔虎旗| 正蓝旗| 蕉岭县| 浙江省| 和静县| 苍南县| 绵阳市| 手游| 宜昌市| 陇南市|