MySQL 數據庫 -- 主從複製、讀寫分離

文章目錄

一、主從複製

**        1、原理**

**        2、二進制日誌的保存方式**

**        3、主從複製策略**

**        4、搭建 MySQL 主從複製**

二、讀寫分離

**        1、原理**

**        2、讀寫分離**

**        3、讀寫分離的好處**

**        4、實現方式**

**            4.1、Amoeba 簡介**

五、搭建 MySQL 讀寫分離

**        1、實驗準備**

**        2、amoeba(192.168.35.30) 安裝**

**        3、配置 amoeba 讀寫分離,兩個 slave 讀負載均衡**

**        4、修改 amoeba 主配置文件和數據庫文件**

**        5、 開啓 amoeba**

**        6、客戶端遠程登錄 amoeba**

**        7、測試**

一、主從複製

1、原理

                             已達到和 master 數據庫趨於一致

2、二進制日誌的保存方式

3、主從複製策略

因爲主從複製的默認策略是異步,導致的結果就是主從二進制日誌和中繼日誌的保存內存會越來越大

4、搭建 MySQL 主從複製

三臺服務器配置

此處就不再詳細描述,看之前文字 LNMP 即可

MySQL 安裝完成確認下是否有 mysql 用戶

以上可見產生了 master- bin.000001 日誌文件,定位爲 603

從服務器需要定位到此處進行復制

im /etc/my.cnf
    server-id = 2        ##設置server_id爲2,slave2爲3
        log-bin=master-bin      ##開啓二進制日誌文件
        relay-log=relay-log-bin    
        ##從主服務器上同步日誌文件記錄到本地
        relay-log-index=slave-relay-bin.index  
        ##定義relay_log的位置和名稱(index索引)
  --->wq保存
systemctl restart mysqld
--------------------->slave1數據庫操作<---------------------
change master to master_host='192.168.35.40',master_user='myslave',
master_password='123',master_log_file='master-bin.000001',
master_log_pos=603;
start slave;
show slave status\G    ##查看主從服務是否成功

vim /etc/my.cnf
server-id = 3        ##設置server_id爲3,slave1爲2
        log-bin=master-bin      ##開啓二進制日誌文件
        relay-log=relay-log-bin    
        ##從主服務器上同步日誌文件記錄到本地
        relay-log-index=slave-relay-bin.index  
        ##定義relay_log的位置和名稱(index索引)
--->wq保存
change master to master_host='192.168.35.40',master_user='myslave',
master_password='123',master_log_file='master-bin.000001',
master_log_pos=603;  
mysql> start slave;
mysql> show slave status\G      ##查看主從服務是否成功

若查詢主從是否同步時顯示:connecting,可以稍等一會再重新查看

主服務器上創建一個數據庫

slave1:已同步

slave2:已同步

若是在 slave1 服務器上面更改,master 主服務器與 slave2 並沒有同步更改

二、讀寫分離

1、原理

讀寫分離就是隻在主服務器上寫,只在從服務器上讀

基本的原理是讓主數據庫處理事務性查詢,

而從數據庫處理 select 查詢。數據庫複製被用來把主數據庫上事務性查詢導致的變更同步到集羣中的從數據庫

2、讀寫分離

因爲數據庫的 “寫”(寫 10000 條數據可能要 3 分鐘) 操作是比較耗時的。

但是數據庫的 “讀”(讀 10000 條數據可能只要 5 秒鐘)。

所以讀寫分離,解決的是,數據庫的寫入,影響了查詢的效率

3、讀寫分離的好處

4、實現方式

常見的 MySQL 讀寫分離分爲以下兩種:

4.1、Amoeba 簡介

五、搭建 MySQL 讀寫分離

1、實驗準備

2、amoeba(192.168.35.30) 安裝

將amoeba-mysql-binary-2.2.0.tar.gz和jdk-6u
14-linux-x64.bin上傳到opt目錄下
[root@amoeba opt]# cp jdk-6u14-linux-x64.bin /usr/local/
[root@amoeba opt]# chmod +x jdk-6u14-linux-x64.bin 
[root@amoeba opt]# ./jdk-6u14-linux-x64.bin        
##enter往下翻頁--yes--enter
mv jdk1.6.0_14/ /usr/local/jdk1.6   
 ##重命名爲了便於環境變量的設置

vim /etc/profile
  unset i
  unset -f pathmunge
  export JAVA_HOME=/usr/local/jdk1.6      
  ##指定jdk的位置
  export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib 
  ##指定執行文件的位置
  export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin 
  ##指定環境位置
  export AMOEBA_HOME=/usr/local/amoeba    
  ##amoeba文件的位置
  export PATH=$PATH:$AMOEBA_HOME/bin   
  ##調用家目錄識別amoeba的bin文件
source /etc/profile
java -version

3、配置 amoeba 讀寫分離,兩個 slave 讀負載均衡

4、修改 amoeba 主配置文件和數據庫文件

cp amoeba.xml amoeba.xml.bak    
##備份amoeba的主配置文件
vim amoeba.xml      
##修改主配置文件,即配置第三個賬戶(客戶端找amoeba的用戶身份)
30  <property >amoeba</property>    
##root改爲amoeba;修改賬戶名(這裏是client訪問amoeba服務器時使用的賬號)
32  <property >123123</property>  
##修改賬戶密碼(這裏是數據庫訪問amoeba服務器時使用賬號時用的密碼)
115  <property >master</property>    
##修改默認池
117  取消註釋/,取消下面的註釋符號-->,改到這裏
118  <property >master</property>
119    <property >slaves</property>

cp dbServers.xml dbServers.xml.bak     
##備份數據庫配置文件
vim dbServers. xml      ##修改數據庫配置文件
23  <property >mysql</property>    
##將text修改爲mysql;Mysql所有數據庫信息( show databases )
26  <property >test</property>    
##amoeba訪 問三臺mysql數據庫的賬戶和密碼(賬戶爲test)
29  <property >123456</property>  
##取消註釋,修改訪問數據庫的密碼
45  <dbServer >  
##修改數據庫主服務器名/地址
48  <property >192.168.35.40</property>  
##修改master服務器ip 
52  <dbServer >    
##修改從服務器名slave1
55  <property >192.168.35.10</property>    
##修改從服務器地址
緊接複製52-57行,粘貼,添加第二臺服務器名
59  <dbServer >    
##修改從服務器名爲slave2
62  <property >192.168.35.20</property>    
##修改第二臺服務器IP
66  <dbServer >

這時可以複製會話另開一個頁面查看一下配置文件 (因爲 amoeba 需要一直開啓才能查詢到端口)

5、 開啓 amoeba

6、客戶端遠程登錄 amoeba

yum -y install mariadb      
##下載mariadb客戶端;mairadb比MySQL更輕量級的版本
mysql -uamoeba -p123123 -h 192.168.35.30 -P8066 
##遠程登錄amoeba服務器;amoeba會做代理,
所以指向的地址是amoeba的ip的端口8066

mariadb 的作用:

提供命令庫

提供連接數據的驅動

提供 tcp 的端口 3306

7、測試

測試一

client 端遠程訪問 amoeba 的地址,並進入數據庫創建新的數據庫,驗證 master 和 slaves 是否同步

client 端進入數據庫創建表 aa,發現 master+slave1+slave2 已同步創建數據表 aa

測試二:

測試 mysql 的讀寫分離,2 臺從服務器關閉主從同步,在客戶端數據庫的數據表內插入數據驗證 amoeba 讀寫分離

master 處理寫的任務,可以查詢到數據表 aa

從服務器處理讀的任務,查詢看不到數據

3. 測試三:

在從服務器上更改表數據,使用客戶端驗證從服務器讀,和輪詢的方式讀

來源:

https://blog.csdn.net/weixin_56667320/article/details/118911525?utm_medium=distribute.pc_feed.none-task-blog-short_term_tag-6.nonecase&depth_1-utm_source=distribute.pc_feed.none-task-blog-short_term_tag-6.nonecase

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/KXkytu7FUJXT1RH28WFYBA