數(shù)據(jù)庫系列文章
1 - 數(shù)據(jù)庫服務概述 | 構(gòu)建MySQL服務 | 數(shù)據(jù)庫基本管理 | MySQL基本類型
2 - 表結(jié)構(gòu) | MySQL鍵值
3 - 字段約束|MySQL索引|MySQL用戶管理
4 - 基礎查詢進階|連接查詢
5 - 視圖|存儲過程
6 - 數(shù)據(jù)備份與恢復|innobackupex
7 - MySQL主從同步|主從同步模式
8 - MySQL數(shù)據(jù)讀寫分離|MySQL多實例
9 - 數(shù)據(jù)分片概述|部署MyCat服務
10 - MHA集群概述|部署MHA集群
11 - PXC集群|MySQL存儲引擎
MySQL數(shù)據(jù)讀寫分離
前置條件:配置192.168.4.56 不需要安裝mysql服務 確保一主一從(51,52)
數(shù)據(jù)讀寫分離
把客戶端查詢數(shù)據(jù)的請求 和 寫數(shù)據(jù)的請求(instert,delete,update)
分別發(fā)送給不同數(shù)據(jù)庫服務處理
- 減去數(shù)據(jù)庫服務器的訪問壓力
- 提高硬件利用率
如何實現(xiàn)數(shù)據(jù)的讀寫分離
第一種方式:通過程序?qū)崿F(xiàn)(程序在編寫訪問數(shù)據(jù)庫服務的腳本 執(zhí)行select命令時,固定連接從服務器 執(zhí)行insert命令時 固定連接master數(shù)據(jù)庫服務器)
第二種方式:通過服務實現(xiàn) 搭建提供讀寫分離服務功能的服務器(程序訪問時 連接的不是數(shù)據(jù)庫服務器本機,而是連接讀寫分離服務器,有讀寫分離服務器提供數(shù)據(jù)庫連接服務)
提供數(shù)據(jù)讀寫分離服務的軟件(中間件)
mysql-proxy mycat maxscale
maxscale 軟件提供的讀寫分離服務的工作過程
- 接收到客戶連接數(shù)據(jù)庫服務的請求后
- 根據(jù)客戶端訪問數(shù)據(jù)的命令類型 把請求給不同的數(shù)據(jù)庫服務器處理
配置數(shù)據(jù)讀寫分離結(jié)構(gòu) 提供數(shù)據(jù)存儲服務
第一步 配置mysql一主一從 同步結(jié)構(gòu) (參考前面教程)
第二步 配置讀寫分離服務器(這個主機沒有mysql服務)
- 安裝軟件
yum -y install maxscale-2.1,.....
- 修改配置文件
# 備份配置文件
cp /etc/maxscale.cnf /root/
# 修改配置文件
vim /etc/maxscale.cnf
[maxscale]
threads=auto # 線程數(shù)
# 兩臺主從服務器 需要兩個server
[server1]
type=server
address=192.168.4.51
port=3306
protocol=MySQLBackend
[server2]
...
[MySQL Monitor]
...
servers=server1,server2
user=mysqla
passwd=123qqq...a
...
#[Read-Only Service] 只讀服務得注釋掉
#...
[Read-Write Service]
...
servers=server1,server2
user=mysqlb
passwd=123qqq...a
...
#[Read-Only Listener] 服務沒啟動 默認注釋掉
#...
[MaxAdmin Listener]
type=listener
service=MaxAdmin Service
protocol=maxscaled
socket=default
port=4016
- 根據(jù)配置文件設置 配置數(shù)據(jù)庫服務器‘
因為服務器主從結(jié)構(gòu),所有添加用戶只需要在主服務器主機添加。 從服務器通過添加用戶的命令在本機執(zhí)行 所以只需在主服務器 執(zhí)行添加用戶的命令
添加監(jiān)控用戶mysqla 監(jiān)視服務器狀態(tài) replication client監(jiān)視服務器運行狀態(tài)。replication slave 數(shù)據(jù)庫服務器的主從角色
grant replication client,replication slave on *.* to mysqla@"%" identified by "123qqq...A"
添加路由用戶mysqlb 檢查數(shù)據(jù)庫服務器上是添加了客戶端連接服務使用的用戶
grant slelct on mysql.* to mysqlb@"%" identified by "123qqq...a"
- 啟動讀寫分離服務
# 首先測試數(shù)據(jù)庫服務器的監(jiān)視服務
# 啟動讀寫分離服務
maxscale -f /etc/maxscale.cnf
# 看日志文件
vim /var/log/maxscale/maxscale.log ERROR error 字樣
- 查看服務狀態(tài)
- 查看監(jiān)控信息
在56本機查看監(jiān)控狀態(tài)
maxadmin -admin -pmariadb -p4016
MaxScale > list servers
第三步 測試配置
先啟動 51系統(tǒng) 再啟動52系統(tǒng) 最后是56系統(tǒng)
第一步 客戶端能夠連接讀寫分離服務器訪問數(shù)據(jù)庫服務
首先在主數(shù)據(jù)庫服務器 添加客戶端連接使用的用戶
51 ~]# mysql -uroot -pNSD2019...a
mysql> create database bbsbd;
mysql> create table bbsdb.a(id int);
grant select,insert on bbsdb.* to yaya@"%" identified by "123qqq...a";
# 在從數(shù)據(jù)庫1上查看存儲數(shù)據(jù)庫表和添加用戶
52 ~]# mysql -uroot -pNSD2019...a
mysql> desc bbsdb.a;
mysql> select user from mysql.user where user="yaya"
客戶端連接讀寫分離服務 訪問數(shù)據(jù)庫服務
mysql -h讀寫分離服務器的ip -P讀寫分離服務的端口 -u數(shù)據(jù)庫授權(quán)用戶名 -p密碼
50 ~]# mysql -h192.168.4.56 -P4006 -uyaya -p123qqq...a
第二步 連接讀寫分離服務后,可以對數(shù)據(jù)做查詢和存儲操作
mysql> select * from bbsdb.a;
mysql> insert into bbsdb.a values(8888)
第三步 測試數(shù)據(jù)讀寫分離
怎么驗證查詢select 訪問就在52服務器
從服務器本機表里添加一條記錄 (在從服務器添加的新數(shù)據(jù) 主服務器不會同步)
怎么驗證存儲數(shù)據(jù)insert訪問在51服務器
如果主從結(jié)構(gòu)中的從服務器宕機了,就實現(xiàn)不了讀寫分離了,會把讀寫請求都給主服務器
如果主從結(jié)構(gòu)都宕機了,讀寫分離服務無法訪問
讀寫分離服務器只有1臺 單點故障問題無法避免
MySQL多實例
前置條件:配置58 不需要安裝mysql服務
在一臺服務器上運行多個數(shù)據(jù)庫服務 節(jié)約運維成本 提高硬件利用率
配置多實例:文章來源:http://www.zghlxwxcb.cn/news/detail-807098.html
- 安裝軟件
文章來源地址http://www.zghlxwxcb.cn/news/detail-807098.html
- 創(chuàng)建并編輯主配置文件(重點)
確保沒有 /etc/my.cnf 如果有 要刪掉
vim /etc/my.cnf
# 第一部分 管理實例服務的運行參數(shù)
[mysqld_multi]
mysqld=/usr/local/mysql/bin/mysqld_safe
mysqladmin=/usr/local/mysql/bin/mysqladmin
user=root
# 第二部分 定義實例
[mysqld1] # 實例1
datadir=/dir1 # 第一個實例的數(shù)據(jù)庫目錄
port=3307 # 多實例 端口號不能一樣
pid-file=/dir1/mysqld1.pid
log-error=/dir1/mysqld1.err
socket=/dir1/mysqld1.sock
[mysqld2] # 實例2
datadir=/dir2 # 第一個實例的數(shù)據(jù)庫目錄
port=3308 # 多實例 端口號不能一樣
pid-file=/dir2/mysqld1.pid
log-error=/dir2/mysqld1.err
socket=/dir2/mysqld1.sock
- 啟動多實例
mysqld_multi start 1
無論啟動成功沒成功,都需要 查看有沒有實例的端口 如果查到了得干掉進程, 查看父進程pstree
- 實例停止
# 需要輸入用戶名和密碼
mysqld_multi --user=root --password=密碼 stop 實例編號
到了這里,關(guān)于8 - MySQL數(shù)據(jù)讀寫分離|MySQL多實例的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!