業(yè)務場景
由于性能要求窟社,現(xiàn)需要將后端數(shù)據(jù)庫服務器搭建集群痊末,實現(xiàn)的效果為主服務器僅進行寫操作(增、刪内狸、改)检眯;從服務器進行讀操作(查詢)。
實現(xiàn)原理
Mysql服務器之間的主從同步是基于二進制日志(binary log)機制昆淡,主服務器使用二進制日志來記錄數(shù)據(jù)庫的變動情況锰瘸,從服務器通過讀取和執(zhí)行該日志文件來保持和主服務器的數(shù)據(jù)一致。
主從復制具體配置
1 主服務器(Master)配置
1.1 修改Master的配置文件
Linux環(huán)境下昂灵,Mysql的配置文件是在 /etc/my.conf
避凝,修改該配置文件:
[mysqld]
log-bin=mysql-bin
server-id=1
其中,server-id
用于表示唯一的數(shù)據(jù)庫眨补,如果省去則主服務器拒絕來自從服務器的任何連接恕曲。
可選配置:
binlog-ignore-db=information_schema
,表示同步的時候ignore的數(shù)據(jù)庫;
binlog-do-db=xxx
渤涌,表示制定需要同步的數(shù)據(jù)庫佩谣。
1.2 賦予從庫賬號權限
- Mater服務器上進入Mysql:
mysql -u root -p
- 服務從服務器賬號權限
mysql>grant file on *.* to 'xxx'@'slave_ip' identified by 'xxx_password';
mysql>grant replication slave on *.* to 'xxx'@'slave_ip' identified by 'xxx_password';
mysql>flush privileges;
其中xxx
和slave_password
為用戶自定義用戶名,用于從服務器連接主服務器实蓬。
- 重啟mysql服務
$systemctl restart mysqld
- 登錄mysql茸俭,查看狀態(tài)
mysql>show master status;
其中吊履,File,Position在配置從服務器的時候需要用到调鬓,Binglog_Do_DB是需要同步的數(shù)據(jù)庫艇炎。
2 從服務器(Slave)配置
從服務器配置用戶名和密碼,連接到主服務器腾窝,請求讀取二進制文件缀踪,然后把讀取的二進制文件寫入到本地的Realy log(中繼日志)。
2.1 修改/etc/my.conf
配置如
[mysqld]
log-bin=mysql-bin
server-id=2
relay_log=mysql-relay-bin
log_slave_updates=1
read_only=1
2.2 從服務器連接主服務器
上述配置完成之后虹脯,重啟mysql服務驴娃,然后進入mysql控制臺
mysql>change master to master_host='master_ip',master_user='root',master_password='123456',master_log_file='mysql-bin.00002',mster_log_pos=123;
其中,master_log_file配置的是Master的FIle選項循集,master_log_pos配置的是Mater的Positon選項唇敞,這里需要與自己的Master進行對應。
可以通過mysql>show slave status;
查看配置信息咒彤。
至此疆柔,mysql的主從復制配置已完成,可以通過Navicat等客戶端镶柱,連接主從服務器旷档,在主服務器中添加相關信息,查看是否同步到從服務器歇拆。
讀寫分離
讀寫分離有兩種實現(xiàn)方式彬犯,一種是業(yè)務代碼實現(xiàn),通過注解結合AOP實現(xiàn)查吊,另一種通過中間件實現(xiàn)谐区,常見的有mysql-proxy,cobar逻卖,mycat等宋列,本文選取的是mysql-proxy未檩。
接下來講解如何通過mysql-proxy實現(xiàn)讀寫分離冀宴。
1 mysql-proxy安裝
- yum安裝
yum install mysql-proxy
- 本地下載安裝
mysql-proxy下載地址
2 配置環(huán)境變量
- 打開配置文件
vim ~/.bash_profile
- 添加mysql-proxy的環(huán)境變量
- 重啟使配置生效:
source ~/.bash_profile
3 修改mysql-proxy配置信息
- 修改 lua 腳本:
vim /mysql-proxy_path/share/doc/mysql-proxy/rw-splitting.lua
其中纫事,mysql-proxy_path
為 mysql-proxy 安裝路徑埋凯,
Lua腳本默認最小連接數(shù)為4個,最大連接數(shù)為8個以上的客戶端連接才會實現(xiàn)讀寫分離延旧,這里將最小連接數(shù)和最大連接數(shù)改為1和2灸撰。
- 增加 mysql-proxy 配置伞插,在 mysql-proxy 安裝路徑下罚缕,新建 conf 文件夾艇纺,增加
mysql-proxy.conf
,新增如下內(nèi)容:
[mysql-proxy]
user=root
proxy-address=0.0.0.0
proxy-backend-addresses=207.207.88.88:3306
proxy-read-only-backend-addresses=208.208.30.99:3306
proxy-lua-script=/opt/mysql-proxy/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit/share/doc/mysql-proxy/rw-splitting.lua
log-file=/var/log/mysqllog/mysql-proxy.log
log-level=debug
daemon=true
keepalive=true
其中:
user
:運行mysql-proxy用戶;
proxy-address
:mysql-proxy運行的ip和端口黔衡,如果ip配置為0.0.0.0表示不限制IP蚓聘,mysql-proxy默認端口為4040;
proxy-backend-addresses
:master服務器地址盟劫,可設置多項夜牡,用逗號分隔,@后面的數(shù)字代表權重侣签,用來作負載均衡塘装,若省略則默認為1(待測試)。影所;
proxy-read-only-backend-addresses
:slave服務器地址蹦肴,可設置多項,用逗號分隔型檀;
proxy-lua-script
:lua 腳本位置。
注意: mysql-proxy.conf 文件權限必須設置為660听盖,不然會報錯胀溺。
chmod 660 /xx/mysql-proxy.conf
- 啟動mysql-proxy:
mysql-proxy --defaults-file=/xx/conf/mysql-proxy.conf
xx
為 mysql-proxy 安裝路徑。
- 在Master上授權用戶:
mysql>grant all privileges on *.* to 'root'@'%' identified by 'password';
%
表示所有連接的ip皆看,這里可以換為mysql-proxy服務器IP仓坞。
- 使用 mysql-proxy 代理登錄:
mysql>mysql -h mysql-proxy-ip -u root -p
參考
MySQL5.6 數(shù)據(jù)庫主從(Master/Slave)同步安裝與配置詳解
mysql讀寫分離原理及配置
搭建MySQL主從服務器并并通過mysql-proxy實現(xiàn)讀寫分離
Linux:使用mysql-proxy實現(xiàn)mysql的讀寫分離