mysql讀寫分離配置(整理)

来源:https://www.cnblogs.com/xhnxhnu/archive/2018/09/29/9726764.html
-Advertisement-
Play Games

mysql讀寫分離配置 環境:centos7.2 mysql5.7 場景描述: 資料庫Master主伺服器:192.168.206.100 資料庫Slave從伺服器:192.168.206.200 MySQL Proxy調度伺服器:192.168.206.210 以下操作,均是在192.168.20 ...


mysql讀寫分離配置

環境:centos7.2 mysql5.7

場景描述:
資料庫Master主伺服器:192.168.206.100
資料庫Slave從伺服器:192.168.206.200
MySQL-Proxy調度伺服器:192.168.206.210

以下操作,均是在192.168.206.210即MySQL-Proxy調度伺服器 上進行的。

1.檢查系統所需軟體包

安裝之前需要配置EPEL YUM源

wget https://mirrors.ustc.edu.cn/epel//7/x86_64/Packages/e/epel-release-7-11.noarch.rpm
rpm -ivh epel-release-7-11.noarch.rpm
yum clean all
yum update

yum install -y gcc* gcc-c++* autoconf* automake* zlib* libxml* ncurses-devel* libmcrypt* libtool* flex* pkgconfig* libevent* glib*

2.編譯安裝lua

MySQL-Proxy的讀寫分離主要是通過rw-splitting.lua腳本實現的,因此需要安裝lua

lua可通過以下方式獲得
從http://www.lua.org/download.html下載源碼包

從rpm.pbone.net搜索相關的rpm包
download.fedora.redhat.com/pub/fedora/epel/5/i386/lua-5.1.4-4.el5.i386.rpm
download.fedora.redhat.com/pub/fedora/epel/5/x86_64/lua-5.1.4-4.el5.x86_64.rpm

這裡我們建議採用源碼包進行安裝

cd /opt/install
wget http://www.lua.org/ftp/lua-5.1.4.tar.gz
tar zvfx lua-5.1.4.tar.gz
cd lua-5.1.4
make linux
make install
mkdir /usr/lib/pkgconfig/
cp /opt/install/lua-5.1.4/etc/lua.pc /usr/lib/pkgconfig/
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib/pkgconfig

註意的問題

編譯的時候,遇到的問題是,缺少依賴包** readline**, 然後readline又依賴ncurses,所以要先安裝著兩個軟體

yum install -y readline-devel ncurses-devel

3.安裝配置MySQL-Proxy

下載mysql-proxy

下載:http://dev.mysql.com/downloads/mysql-proxy/

wget https://downloads.mysql.com/archives/get/file/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz
tar zxvf mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz
mv zxvf mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit /usr/local/mysql-proxy

配置mysql-proxy,創建主配置文件

cd /usr/local/mysql-proxy
mkdir lua #創建腳本存放目錄
mkdir logs #創建日誌目錄
cp share/doc/mysql-proxy/rw-splitting.lua  ./lua #複製讀寫分離配置文件
vi /etc/mysql-proxy.cnf   #創建配置文件
[mysql-proxy]
user=root #運行mysql-proxy用戶
admin-username=proxyuser #主從mysql共有的用戶
admin-password=123456 #用戶的密碼
proxy-address=192.168.206.210:4040 #mysql-proxy運行ip和埠,不加埠,預設4040
proxy-read-only-backend-addresses=192.168.206.200 #指定後端從slave讀取數據
proxy-backend-addresses=192.168.206.100 #指定後端主master寫入數據
proxy-lua-script=/usr/local/mysql-proxy/lua/rw-splitting.lua #指定讀寫分離配置文件位置
admin-lua-script=/usr/local/mysql-proxy/lua/admin.lua #指定管理腳本
log-file=/var/log/mysql-proxy.log #日誌位置
log-level=info #定義log日誌級別
daemon=true#以守護進程方式運行
keepalive=true #mysql-proxy崩潰時,嘗試重啟

這裡就有一個

配置文件裡面的註釋要全部刪掉,不然可能會引起一些字元不能識別的錯誤。
這還不是最坑的,最坑的是:即使刪掉註釋,去除多餘的空白字元,仍然可能會報如下錯誤:

2018-09-21 06:39:40: (critical) Key file contains key “daemon” which has a value that cannot be interpreted.

或者:

2018-09-21 06:52:22: (critical) Key file contains key “keepalive” which has a value that cannot be interpreted.

出現以上問題的原因是daemon=true,keepalive=true現在不這樣寫了,要改為:

daemon=1
keepalive=1

參考鏈接 : http://anothermysqldba.blogspot.com/2013/05/setup-mysql-proxy.html

給配置文件執行許可權
chmod 660 /etc/mysql-porxy.cnf

配置admin.lua 文件

在/etc/mysql-proxy.cnf 配置文件中,還差/usr/local/mysql-proxy/lua/admin.lua 的管理文件,實際現在還沒有創建的。所以,現在需要編輯創建admin.lua文件。mysql-proxy-0.8.5的這個版本,我找到了下麵的admin.lua腳本,對這個版本才是有效的:

vim  /usr/local/mysql-proxy/lua/admin.lua



function set_error(errmsg)
proxy.response = {
type = proxy.MYSQLD_PACKET_ERR,
errmsg = errmsg or "error"
}
end
function read_query(packet)
if packet:byte() ~= proxy.COM_QUERY then
set_error("[admin] we only handle text-based queries (COM_QUERY)")
return proxy.PROXY_SEND_RESULT
end
local query = packet:sub(2)
local rows = { }
local fields = { }
if query:lower() == "select * from backends" then
fields = {
{ name = "backend_ndx",
  type = proxy.MYSQL_TYPE_LONG },
{ name = "address",
  type = proxy.MYSQL_TYPE_STRING },
{ name = "state",
  type = proxy.MYSQL_TYPE_STRING },
{ name = "type",
  type = proxy.MYSQL_TYPE_STRING },
{ name = "uuid",
  type = proxy.MYSQL_TYPE_STRING },
{ name = "connected_clients",
  type = proxy.MYSQL_TYPE_LONG },
}
for i = 1, #proxy.global.backends do
local states = {
"unknown",
"up",
"down"
}
local types = {
"unknown",
"rw",
"ro"
}
local b = proxy.global.backends[i]
rows[#rows + 1] = {
i,
b.dst.name,  -- configured backend address
states[b.state + 1], -- the C-id is pushed down starting at 0
types[b.type + 1],   -- the C-id is pushed down starting at 0
b.uuid,  -- the MySQL Server's UUID if it is managed
b.connected_clients  -- currently connected clients
}
end
elseif query:lower() == "select * from help" then
fields = {
{ name = "command",
  type = proxy.MYSQL_TYPE_STRING },
{ name = "description",
  type = proxy.MYSQL_TYPE_STRING },
}
rows[#rows + 1] = { "SELECT * FROM help", "shows this help" }
rows[#rows + 1] = { "SELECT * FROM backends", "lists the backends and their state" }
else
set_error("use 'SELECT * FROM help' to see the supported commands")
return proxy.PROXY_SEND_RESULT
end
proxy.response = {
type = proxy.MYSQLD_PACKET_OK,
resultset = {
fields = fields,
rows = rows
}
}
return proxy.PROXY_SEND_RESULT
end

修改讀寫分離配置文件

vim /usr/local/mysql-proxy/lua/rw-splitting.luaif not proxy.global.config.rwsplit 
 proxy.global.config.rwsplit = {
  min_idle_connections = 1, #預設超過4個連接數時,才開始讀寫分離,改為1
  max_idle_connections = 1, #預設8,改為1
  is_debug = false
 }
end

啟動mysql-proxy

/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/etc/mysql-proxy.cnf

netstat -tupln | grep 4000 #已經啟動killall -9 mysql-proxy #關閉mysql-proxy

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

-Advertisement-
Play Games
更多相關文章
  • 轉載:http://www.safecdn.cn/2018/09/hping-install/ Hping的主要功能有: 測試防火牆實用的埠掃描網路檢測,可以用不同的協議,服務類型(TOS),IP片分手工探測MTU(最大傳輸單元)路徑的先進性的路由跟蹤,所有請立即獲取iTunes的協議遠程操作系統 ...
  • 問題描述 我有2個Tomcat 一個埠開啟(8021),一個埠未開啟(8022),在nginx里用upstream模塊進行代理 ,代理的負載演算法採用的是預設的輪詢演算法,配置成功後,訪問頁面時並沒有出現輪詢的效果 ,頁面一直顯示是正常訪問的頁面,原則上會有一次出現502界面或者報錯的頁面的,但是通 ...
  • L2TP連接嘗試失敗,因為安全層在初始化與遠程電腦的協商時遇到了一個處理錯誤 錯誤描述:“ L2TP連接嘗試失敗,因為安全層在初始化與遠程電腦的協商時遇到了一個處理錯誤” 只有這個沒有錯誤碼。 從網上參考 Bob Hou: http://blog.csdn.net/minxihou 博客 首先連 ...
  • 本文介紹一下 shell 的語法。 一、變數 在 shell 里,使用變數之前通常並不需要事先為他們做出聲明,需要使用的時候直接創建就行了。預設情況下,所有變數都被看做字元串並以字元串來存儲,即使它們被賦值為數值時也是如此。shell 和一些工具會在需要時把數值型字元串轉換成對應的數值以對它們進行操 ...
  • 一、環境搭建 1. 安裝Java 配java_home, /etc/profile 2.安裝Jenkins 下載war包,用 Java -jar Jenkins.war或者 把war包放tomcat的webapps下 http://ip:8080或者 http://ip:8080/jenkins 3 ...
  • 推薦一篇關於LVS的好文: https://www.cnblogs.com/gaoxu387/p/7941381.html 一、原博主要內容: 1、概述 IP負載均衡:四層負載,是基於IP+埠的負載均衡,主要代表是LVS(Linux Virtual Server) LVS工作原理:LVS的IP負載 ...
  • 首先去官網根據系統版本下載對應的jdk(註意是Linux版),我們在Linux創建一個文件夾專門存放上傳的安裝包。 然後利用上傳工具把我們下載好的壓縮包上傳到Linux 上,選擇 /opt/software 目錄(這裡選擇自己創建的目錄即可)。 然後再創建一個目錄用於我們的jdk安裝目錄 這裡我把目 ...
  • 1 Linux系統命令操作語法的格式 命令_[參數選項]_[文件或路徑] 其中 _ 至少一個空格 如:rm -f /etc/hosts 其中/etc/hosts完整路徑不帶空格 中括弧表示可選的,即命令的參數和路徑文件都是可選的,參數選項表示使用一個命令的不同功能,比如,可以刪除一個文件和創建一個文 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...