數據庫讀寫分離優缺點:數據庫讀寫分離的原理

一.背景

1.什麼是讀寫分離

讀寫分離從字面上就很好理解,讀數據庫和寫數據庫的操作分別執行,讀或寫操作分別用不同的計算機或計算機組來承擔任務。可以參考下基礎的架構圖。

凡事留一手,MySQL配置讀寫分離

2.為什麼要讀寫分離

還不是為了安全,讀寫分離為主從同步的一種備份方案,當主數據庫出現問題的時候,從數據庫可以代替主數據庫,避免數據丟失,從而更加的安全。

進一步而言,當配置好主從複製後,我們就可以把兩台機器做不同的用途,由於從機寫入數據時不會同步到主機,因此把主機做寫服務器,從機做讀服務器,得以分散壓力,使得數據庫更穩定高效。(一般情況都是讀操作更多)

3.下一步?

如果有多個讀寫服務器組,可以使用多主多從的方式建立,然後使用Nginx代理讀和寫組服務器,或使用HaProxy或LVS等來組建統一的訪問入口,交給開發訪問。

二、搭建

主從複製在前一期在復現過,這裡來詳細闡述my.cnf幾個參數。

# 開啟二進制日誌
log-bin=mysql-bin
# 設置服務器id
server-id=1
# 使用binlog在每N次寫入後與硬盤同步
sync-binlog=1
# 5天後自動清理二進制日誌
expire_log_days=1

我在這裡簡單搭建:

# 主服務器
docker run 
-p 12345:3306 
--name mysql_master 
-v /opt/docker/mysql_master/conf:/etc/mysql/conf.d 
-v /opt/docker/mysql_master/logs:/logs 
-v /opt/docker/mysql_master/data:/var/lib/mysql 
-e MYSQL_ROOT_PASSWORD=123456 
-d mysql:5.7 
docker run 
-p 12346:3306 
--name mysql_node 
-v /opt/docker/mysql_node/conf:/etc/mysql/conf.d 
-v /opt/docker/mysql_node/logs:/logs 
-v /opt/docker/mysql_node/data:/var/lib/mysql 
-e MYSQL_ROOT_PASSWORD=123456 
-d mysql:5.7 
凡事留一手,MySQL配置讀寫分離

配置文件,分別執行下面兩條命令。

cat > /opt/docker/mysql_master/conf/my.cnf << EOF
[mysqld]
# 開啟二進制日誌
log-bin=mysql-bin
# 設置服務器id
server-id=1
# 使用binlog在每N次寫入後與硬盤同步
sync-binlog=1
# 5天後自動清理二進制日誌
expire_logs_days=5
EOF
cat > /opt/docker/mysql_node/conf/my.cnf << EOF
[mysqld]
server-id=2
EOF

重啟生效

主節點上操作: 執行以下命令,主節點新建立用戶,用於同步。

docker exec -it mysql_master /bin/bash

mysql -uroot -p123456
mysql> CREATE USER 'repl'@'%' identified by '123456';
mysql> GRANT REPLICATION SLAVE ON *.*  TO  'repl'@'%';  
docker restart mysql_master
docker restart mysql_node

# 回到shell 操作界面
quit
exit

從節點上操作:執行以下命令

docker exec -it mysql_node /bin/bash
# 把下面的ip換成你主節點的ip和端口

mysql -uroot -p123456
mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.187', MASTER_PORT=12345,MASTER_USER='repl',MASTER_PASSWORD='123456';

# 啟動同步
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
2-2-4:查看同步狀態
mysql>  show slave status G;

如果沒有報錯,則部署成功。

凡事留一手,MySQL配置讀寫分離

驗證

在主master上去創建數據庫或新建表,加入數據,從節點很快接受到同步,同樣的,如果在從node節點上去插入數據的話,主節點的數據無變化。這樣就做好了讀寫分離的實驗,後面我們把主master作為讀/寫節點,nodes作為讀節點就好了。

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/221753.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-09 13:24
下一篇 2024-12-09 13:24

相關推薦

發表回復

登錄後才能評論