MySql 主從複製 mysql-proxy實現讀寫分離

来源:https://www.cnblogs.com/MasterSword/archive/2018/08/11/9434169.html
-Advertisement-
Play Games

1.安裝和配置Docker 伺服器版本阿裡雲CentOS7.4 docker版本18.06.0-ce docker安裝步驟https://docs.docker.com/install/linux/docker-ce/centos/#install-docker-ce-1 下載mysql鏡像 啟動兩 ...


1.安裝和配置Docker

伺服器版本
阿裡雲CentOS7.4

docker版本
18.06.0-ce

docker安裝步驟
https://docs.docker.com/install/linux/docker-ce/centos/#install-docker-ce-1

下載mysql鏡像

# docker pull mysql:5.7

啟動兩個mysql鏡像,分別映射3306和3316埠
主庫:3306埠
備庫:3316埠

# docker run -p 3306:3306 --name mysql3306 -v /opt/mysql/data/data3306:/var/lib/mysql  -v /opt/mysql/logs/logs3306:/logs -e MYSQL_ROOT_PASSWORD=xxxxxxxxxxxx -d mysql:5.7

# docker run -p 3316:3306 --name mysql3316 -v /opt/mysql/data/data3316:/var/lib/mysql  -v /opt/mysql/logs/logs3316:/logs -e MYSQL_ROOT_PASSWORD=xxxxxxxxxxxx -d mysql:5.7

2.配置主從複製

從主庫的docker容器中把預設的配置文件拷貝出來

# docker cp 37735c072370:/etc/mysql/mysql.conf.d/mysqld.cnf /opt/mysql/conf/conf3306

修改配置文件增加兩行

#vim mysqld.cnf 
[mysqld] log
-bin=mysql-bin #開啟二進位日誌 server-id=1 #設置server-id

將修改後的配置文件拷回容器里,並重啟容器

# docker cp /opt/mysql/conf/conf3306/mysqld.cnf 37735c072370:/etc/mysql/mysql.conf.d/
# docker restart 37735c072370

創建主從複製需要的mysql賬戶,並分配許可權

mysql>CREATE USER 'repl'@'xxx.xxx.xxx.xxx' IDENTIFIED BY 'repl123';
mysql>GRANT REPLICATION SLAVE ON *.* TO 'repl'@'xxx.xxx.xxx.xxx'

查看主庫狀態,記錄下File和Position

mysql>SHOW MASTER STATUS;

修改從庫配置文件

#vim mysqld.cnf 
[mysqld] server
-id=2 #設置server-id

同樣拷進從庫鏡像,並重啟容器

mysql中執行配置主庫的語句

mysql>change master to master_host='xxx.xxx.xxx.xxx', #Master 伺服器Ip
master_port=3306,
master_user='repl',
master_password='repl123', 
master_log_file='master-bin.000001',#Master伺服器產生的日誌
master_log_pos=2986;

mysql>start slave;

mysql>show slave status\G

如果slave_io_running和slave_sql_running都為yes,表示啟動同步成功

建立兩個客戶端連接並創建測試庫

主庫建立student表並插入一條記錄,可以看到,從庫自動同步了數據,配置成功

      

 

    

 

3.用mysql-proxy實現讀寫分離

下載mysql-proxy
https://downloads.mysql.com/archives/proxy/

解壓並配置mysql-proxy

# tar zxvf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
# cd mysql-proxy-0.8.5-linux-el6-x86-64bit
# vim /etc/mysql-proxy.cnf
[mysql-proxy]
user=root #運行mysql-proxy用戶
admin-username=proxy #主從mysql共有的用戶
admin-password=proxy123 #共有用戶密碼
proxy-read-only-backend-addresses=xxx.xxx.xxx.xxx:3316 #備庫地址
proxy-backend-addresses=xxx.xxx.xxx.xxx:3306 #主庫地址
proxy-lua-script=/usr/local/mysql-proxy/mysql-proxy-0.8.5-linux-el6-x86-64bit/share/doc/mysql-proxy/rw-splitting.lua #指定讀寫分離配置文件位置
admin-lua-script=/usr/local/mysql-proxy/mysql-proxy-0.8.5-linux-el6-x86-64bit/share/doc/mysql-proxy/admin-sql.lua #指定管理腳本
daemon=true #以守護進程方式運行
keepalive=true #mysql-proxy崩潰時,嘗試重啟

修改讀寫分離配置文件

# vim /usr/local/mysql-proxy/mysql-proxy-0.8.5-linux-el6-x86-64bit/share/doc/mysql-proxy/rw-splitting.lua
min_idle_connections = 1, #預設超過4個連接數時才開始讀寫分離,改為1
max_idle_connections = 1,

mysql-proxy的bin目錄下啟動mysql-proxy

# ./mysql-proxy --defaults-file=/etc/mysql-proxy.cnf

主庫和從庫分別創建用戶

mysql>GRANT ALL ON *.* TO 'proxy'@'xxx.xxx.xxx' identified by 'proxy123';

創建mysql-proxy的數據里連接(預設埠4040),可以看到之前驗證主從複製時簡歷的test庫和student表

 只修改從庫的數據,然後通過mysql-proxy查詢,可以看到讀取的數據是從庫修改過的數據,讀分離驗證成功。

主庫:

從庫:

mysql-proxy:

停止從庫的docker容器,通過mysql-proxy插入一條數據,主庫中刷新也有新增的數據,寫分離驗證成功。

mysql-proxy:

主庫:

從庫:

 

至此,mysql的主從複製已經通過mysql-proxy實現讀寫分離已實現。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.構建jenkins 鏡像 vim Dockerfile FROM jenkins USER root ARG dockerGid=999 RUN echo "docker:x:${dockerGid}:jenkins" >> /etc/group # 安裝 docker-compose RUN ...
  • 一、 Linux介紹 Linux是一套免費使用和自由傳播的類Unix操作系統,是一個基於POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操作系統。它能運行主要的UNIX工具軟體、應用程式和網路協議。它支持32位和64位硬體。Linux繼承了Unix以網路為核心的設計思想,是一個性能穩定的 ...
  • 1.先按Esc進入命令模式,然後在打出‘:’(英文輸入模式下) 2.輸入格式: 首行數,末行數s/要替換的字元串/替換的字元串/g (不加g只替換每行的一個要替換的字元串,後面的不會替換) eg:12,22s/abc/123/g 將12行到22行的字元串’abc‘替換成’123‘ (s代表字元串的意 ...
  • 用戶添加修改刪除 1 useradd添加用戶 添加一個新用戶hehe,指定uid為3000,家目錄為/home/haha 這裡 u是uid, g可以指定組id,不定值系統自動分配, G可以指定附加組,如果不想讓用戶登錄系統可以指定參數 ,例如apache,nginx等等 2 groupadd添加新組 ...
  • 1. 下載 2. 解壓縮文件 3. 創建安裝文件的路徑 4. 編譯安裝 進入到解壓的目錄中 ,然後是 ,`make install` 5. 此時若報錯 看這個地方 ,花了一下午的時間找到了這個解決方案,只有這個是對我有效的,然後,輸入python3就進入到了py3的環境中了,輸入pip3也可以了 ...
  • 1.圖例 >原圖出處 2. 結構圖 根目錄說明 3.linux相關命令 cd(change directory切換目錄): cd /. 進入根目錄 cd .. 返回上一次目錄 cd - 返回上一次的工作目錄 cd ~ 切換到當前登錄的住文件夾下 cd ~/ for_bar 切換到名字叫name的主文 ...
  • 一、安裝環境 1、操作系統版本:CentOS 7.5 2、MySQL版本:5.7.22(社區版) 3、MySQL安裝包:mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz 二、安裝步驟 1、檢查系統中是否安裝了其他版本的MySQL(root用戶) 首先檢查系統中是否 ...
  • 占座 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...