MySQL主從複製&讀寫分離&分庫分表

MySQL主從複製

MySQL的主從複製只能保證主機對外提供服務,從機是不提供服務的,只是在後臺爲主機進行備份數據mysql

首先咱們說說主從複製的原理,這個是必需要理解的玩意兒:linux

理解:  sql

  • MySQL之間的數據複製的基礎就是二進制日誌文件bin log ,Master的全部操做都會紀錄在二進制日誌文件中,其餘MySQL經過一個IO線程與其進行通訊,監控這個日誌文件的變化,並將變化賦值到Slave的中繼日誌relay中,而後SQL線程會執行中繼日誌中的相關操做,以此實現主從數據庫的一致性,也就是主從複製數據庫

主從搭建,配置 Master

準備材料以下:vim

  • 分別裝在兩臺Linux服務器上的數據庫後端

  • master:192.168.159.159服務器

  • slave : 192.168.159.169併發

master數據庫配置文件修改:my.cnf less

各自的安裝方式不同,我是經過rpm方式安裝的,ide

在這裏擴展一下: 經過這兩個命令,大體發現了個人MySQL的安裝目錄

  

固然個人配置文件在在 /etc/mysql/my.cnf 在[mysqld]段下添加以下內容

log-bin=mysql-bin

server-id=159

  

而後重啓Mysql: service mysqld restart

登陸到MySQL創建帳戶並受權給Slave

mysql> CREATE USER 'chen'@'192.168.159.169' IDENTIFIED BY 'chen';  #建立用戶
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.159.169'; #爲其權限
mysql>flush privileges;   #刷新權限

  

而後查看master狀態,記錄二進制文件名( mysql-bin.000002 ) 和位置(787)

  

Master 到這裏就配置完成了,下面配置 Slave

第一步修改從服務器的配置文件 : my.conf : server-id=135

  

第二步刪除UUID文件: /var/lib/mysql/auto.cnf  後從新啓動服務 :reboot

第三步登入MySQL,進行從服務器的配置 ,並開啓從服務器複製功能

  • change master to master_host='192.168.159.159',master_port=3306,master_user='chen',master_password='chen',master_log_file='mysql-bin.000002',master_log_pos=787;

  • 開啓從服務器的複製功能 : start slave;

  

檢查從服務器的複製功能狀態:show slave status\G

  

  • 相關的命令:

    • stop slave 能夠中止 從服務器

    • reset slave 清空從服務器的規則

    • start slave 啓動從服務器

    • show slave status 查看從服務器狀態

    • show master status 查看主服務器狀態

    • 注意:當咱們已經完成了主從後,在不關閉的狀況下,在創立新的主從關係會報錯

下面就能夠開始測試 ,測試就不寫具體得了,在主服務器中增長或者修改一個數據,而後咱們在從服務器中查詢看是否作到數據一致便可。

MySQL-Proxy實現讀寫分離

主從的做用主要體如今備份數據上,要想作到MySQL支持高可用和高併發還須要集羣,完成主從複製和讀寫分離

讀寫分離環境:

  • 主服務器:192.168.159.159 + MySQL-Proxy讀寫分離軟件

  • 從服務器:192.168.159.169

  • 從服務器:192.168.159.179

  • 三臺服務器都關閉防火牆 iptables -L service iptablesstop

  • 三臺服務器關閉selinux 採用臨時關閉,長久關閉修改 : /etc/selinux/config 將SELINUX設置爲disabled

    臨時關閉 :setenforce 0 | 查看狀態: getenforce

1、安裝MySQL-Proxy

https://downloads.mysql.com/archives/proxy/

我是上傳到 /usr/local/ 下的

tar -zxvf mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz  #解壓文件
mv mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit mysql-proxy   #更改目錄名

2、建立主配置文件

cd /usr/local/mysql-proxy
mkdir lua #建立腳本存放目錄
mkdir logs #建立日誌目錄
cp share/doc/mysql-proxy/rw-splitting.lua ./lua #複製讀寫分離配置文件
cp share/doc/mysql-proxy/admin-sql.lua ./lua #複製管理腳本
vi /etc/mysql-proxy.cnf      #建立配置文件,並將下面內容寫入

[mysql-proxy]
user=root            
admin-username=root   #主從mysql共有的用戶
admin-password=123456 #用戶的密碼
proxy-address=192.168.159.110:4040                #mysql-proxy運行ip和端口,不加端口,默認4040
proxy-read-only-backend-addresses=192.168.159.169 #指定後端從slave讀取數據
proxy-backend-addresses=192.168.159.159           #指定後端主master寫入數據
proxy-lua-script=/usr/local/mysql-proxy/lua/rw-splitting.lua #指定讀寫分離配置文件位置
admin-lua-script=/usr/local/mysql-proxy/lua/admin-sql.lua    #指定管理腳本
log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log         #日誌位置
log-level=debug    #定義log日誌級別,由高到低分別有(error|warning|info|message|debug)
daemon=true       #以守護進程方式運行
keepalive=true    #mysql-proxy崩潰時,嘗試重啓

#保存退出後 給權限
chmod 660 /etc/mysql-porxy.cnf

3、修改讀寫分離配置文件

vim /usr/local/mysql-proxy/lua/rw-splitting.lua

vim /usr/local/mysql-proxy/lua/rw-splitting.lua
if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
min_idle_connections = 1, #默認超過4個鏈接數時,纔開始讀寫分離,改成1
max_idle_connections = 1, #默認8,改成1
is_debug = false
}
end

4、啓動MySQL-proxy

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

5、測試讀寫分離

在主服務器上建立用戶用於MySQL-Proxy使用,從服務器也會同步這個操做

grant all on . to 'chen'@'192.168.159.159' identified by 'root';

mysql> grant all on *.* to 'chen'@'192.168.159.159' identified by 'root';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

而後就報錯了,MySQL的密碼策略阻止了咱們,不過不要緊,我已經見怪不怪了,設置過好多回了

SHOW VARIABLES LIKE 'validate_password%'; #查看mysql初始密碼策略

  • set global validate_password_policy=LOW; #設置密碼的驗證強度等級,只驗證密碼長度

  • set global validate_password_length=4; #默認密碼長度爲8,咱們給其設置爲4

  • 再次執行: grant all on . to 'chao'@'192.168.159.179' identified by 'root';

 還沒玩,這幾天有點事擱置了,到如今兩臺Slave只有一臺創建與Master鏈接,另外一臺IO出了問題。一直處於失敗狀態,到如今也沒搭建成功,後面再補上,

2019年5月27日 22:28:59   固然還有MyCat的分庫分表的運用,週末再來研究研究

2019年6月10日 23:17:24  原本是打算此次放端午補全的,結果在家裏帶了兩天的娃,小娃娃哭起來好可怕

相關文章
相關標籤/搜索