国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Mysql-主從復(fù)制與讀寫分離

這篇具有很好參考價(jià)值的文章主要介紹了Mysql-主從復(fù)制與讀寫分離。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、前言:

1.在企業(yè)應(yīng)用中,成熟的業(yè)務(wù)通常數(shù)據(jù)量都比較大
2.單臺(tái)MySQL在安全性、 高可用性和高并發(fā)方面都無法滿足實(shí)際的需求
3.配置多臺(tái)主從數(shù)據(jù)庫服務(wù)器以實(shí)現(xiàn)讀寫分離

二、主從復(fù)制原理

1.MySQL的復(fù)制類型

  • 基于語句的復(fù)制(STATEMENT, MySQL默認(rèn)類型)
  • 基于行的復(fù)制(ROW)
  • 混合類型的復(fù)制(MIXED)

2. MySQL主從復(fù)制的工作過程;

兩日志、三線程
(1)在每個(gè)事務(wù)更新數(shù)據(jù)完成之前,Master 在二進(jìn)制日志(Binary log)記錄這些改變。寫入二進(jìn)制日志完成后,Master 通知存儲(chǔ)引擎提交事務(wù)。
(2)Slave 將 Master 的復(fù)制到其中繼日志(Relay log)。首先slave 開始一個(gè)工作線程(I/O),I/O線程在 Master 上打開一個(gè)普通的連接,然后開始 Binlog dump process。Binlog dump process 從 Master 的二進(jìn)制日志中讀取事件,如果已經(jīng)跟上 Master,它會(huì)睡眠并等待 Master 產(chǎn)生新的事件,I/O線程將這些事件寫入中繼日志。
(3)SQL slave thread(SQL從線程)處理該過程的最后一步,SQL線程從中繼日志讀取事件,并重放其中的事件而更新 Slave 數(shù)據(jù),使其與 Master 中的數(shù)據(jù)一致,只要該線程與 I/O 線程保持一致,中繼日志通常會(huì)位于 OS 緩存中,所以中繼日志的開銷很小。
復(fù)制過程有一個(gè)很重要的限制,即復(fù)制在 Slave 上是串行化的,也就是說 Master 上的并行更新操作不能在 Slave 上并行操作。

3.MySQL主從復(fù)制延遲

1、master服務(wù)器高并發(fā),形成大量事務(wù)
2、網(wǎng)絡(luò)延遲
3、主從硬件設(shè)備導(dǎo)致
cpu主頻、內(nèi)存io、硬盤io
4、本來就不是同步復(fù)制、而是異步復(fù)制 。。。。。。。。。。。。。。。。。。。。。。。
從庫優(yōu)化Mysql參數(shù)。比如增大innodb_buffer_pool_size,讓更多操作在Mysql內(nèi)存中完成,減少磁盤操作。
從庫使用高性能主機(jī)。包括cpu強(qiáng)悍、內(nèi)存加大。避免使用虛擬云主機(jī),使用物理主機(jī),這樣提升了i/o方面性。
從庫使用SSD磁盤
網(wǎng)絡(luò)優(yōu)化,避免跨機(jī)房實(shí)現(xiàn)同步

  • 問題解決方法:

  • 半同步復(fù)制- 解決數(shù)據(jù)丟失的問題

  • 并行復(fù)制—解決從庫復(fù)制延遲的問題

4. MySQL 有幾種同步方式:

1、異步復(fù)制(Async Replication)
2、同步復(fù)制(sync Replication)
3、半同步復(fù)制(Async Replication)
4、增強(qiáng)半同步復(fù)制(lossless Semi-Sync Replication)、無損復(fù)制

(1)異步復(fù)制(Async Replication)

主庫將更新寫入Binlog日志文件后,不需要等待數(shù)據(jù)更新是否已經(jīng)復(fù)制到從庫中,就可以繼續(xù)處理更多的請(qǐng)求。Master將事件寫入binlog,但并不知道Slave是否或何時(shí)已經(jīng)接收且已處理。在異步復(fù)制的機(jī)制的情況下,如果Master宕機(jī),事務(wù)在Master上已提交,但很可能這些事務(wù)沒有傳到任何的Slave上。假設(shè)有Master->Salve故障轉(zhuǎn)移的機(jī)制,此時(shí)Slave也可能會(huì)丟失事務(wù)。MySQL復(fù)制默認(rèn)是異步復(fù)制,異步復(fù)制提供了最佳性能。

Mysql-主從復(fù)制與讀寫分離,mysql,adb,數(shù)據(jù)庫,運(yùn)維,云計(jì)算

(2)同步復(fù)制(Sync Replication)

主庫將更新寫入Binlog日志文件后,需要等待數(shù)據(jù)更新已經(jīng)復(fù)制到從庫中,并且已經(jīng)在從庫執(zhí)行成功,然后才能返回繼續(xù)處理其它的請(qǐng)求。同步復(fù)制提供了最佳安全性,保證數(shù)據(jù)安全,數(shù)據(jù)不會(huì)丟失,但對(duì)性能有一定的影響。

Mysql-主從復(fù)制與讀寫分離,mysql,adb,數(shù)據(jù)庫,運(yùn)維,云計(jì)算

(3)半同步復(fù)制(Semi-Sync Replication)

主庫提交更新寫入二進(jìn)制日志文件后,等待數(shù)據(jù)更新寫入了從服務(wù)器中繼日志中,然后才能再繼續(xù)處理其它請(qǐng)求。該功能確保至少有1個(gè)從庫接收完主庫傳遞過來的binlog內(nèi)容已經(jīng)寫入到自己的relay log里面了,才會(huì)通知主庫上面的等待線程,該操作完畢。
半同步復(fù)制,是最佳安全性與最佳性能之間的一個(gè)折中。
MySQL 5.5版本之后引入了半同步復(fù)制功能,主從服務(wù)器必須安裝半同步復(fù)制插件,才能開啟該復(fù)制功能。如果等待超時(shí),超過rpl_semi_sync_master_timeout參數(shù)設(shè)置時(shí)間(默認(rèn)值為10000,表示10秒),則關(guān)閉半同步復(fù)制,并自動(dòng)轉(zhuǎn)換為異步復(fù)制模式。當(dāng)master dump線程發(fā)送完一個(gè)事務(wù)的所有事件之后,如果在rpl_semi_sync_master_timeout內(nèi),收到了從庫的響應(yīng),則主從又重新恢復(fù)為增強(qiáng)半同步復(fù)制。
ACK (Acknowledge character)即是確認(rèn)字符。

Mysql-主從復(fù)制與讀寫分離,mysql,adb,數(shù)據(jù)庫,運(yùn)維,云計(jì)算

(4)增強(qiáng)半同步復(fù)制(lossless Semi-Sync Replication、無損復(fù)制)

增強(qiáng)半同步是在MySQL 5.7引入,其實(shí)半同步可以看成是一個(gè)過渡功能,因?yàn)槟J(rèn)的配置就是增強(qiáng)半同步,所以,大家一般說的半同步復(fù)制其實(shí)就是增強(qiáng)的半同步復(fù)制,也就是無損復(fù)制。
增強(qiáng)半同步和半同步不同的是,等待ACK時(shí)間不同rpl_semi_sync_master_wait_point = AFTER_SYNC(默認(rèn))
半同步的問題是因?yàn)榈却鼳CK的點(diǎn)是Commit之后,此時(shí)Master已經(jīng)完成數(shù)據(jù)變更,用戶已經(jīng)可以看到最新數(shù)據(jù),當(dāng)Binlog還未同步到Slave時(shí),發(fā)生主從切換,那么此時(shí)從庫是沒有這個(gè)最新數(shù)據(jù)的,用戶看到的是老數(shù)據(jù)。
增強(qiáng)半同步將等待ACK的點(diǎn)放在提交Commit之前,此時(shí)數(shù)據(jù)還未被提交,外界看不到數(shù)據(jù)變更,此時(shí)如果發(fā)送主從切換,新庫依然還是老數(shù)據(jù),不存在數(shù)據(jù)不一致的問題。

5.Mysql應(yīng)用場景

mysql 數(shù)據(jù)庫
主要的性能是讀和寫,一般場景來說讀請(qǐng)求更多。
根據(jù)主從復(fù)制可以演變成讀寫分離,因?yàn)樽x寫分離基于主從復(fù)制,使用讀寫分離從而解決高并發(fā)的問題。

mysql架構(gòu)演變的方向:
1、單臺(tái)mysql有單點(diǎn)故障
2、集群—》 主從復(fù)制
3、主從復(fù)制渡河寫的壓力不均衡
4、讀寫分離
5、讀寫分離的基礎(chǔ)是主從復(fù)制
6、mysql的高可用架構(gòu)MHA(master HA高可用) MGR MMM

三、主從復(fù)制實(shí)驗(yàn)

整個(gè)實(shí)驗(yàn)的環(huán)境 以及服務(wù)器信息

  • 環(huán)境部署 cetos7.6
  • 虛擬機(jī)服務(wù)環(huán)境
    Master服務(wù)器:192.168.174.15 mysql5.7
    slave1服務(wù)器:192.168.174.18 mysql5.7
    Slave2服務(wù)器:192.168.174.19 mysql5.7
    Amoeba服務(wù)器:192.168.174.80 (預(yù)備機(jī)器) jdk1.6
    客戶端服務(wù)器:192.168.174.12 測試

1.主從服務(wù)器時(shí)間同步

1.1 master服務(wù)器配置

① 安裝ntp、修改配置文件

[root@master ~]# yum install ntp -y
[root@master ~]# yum -y install ntpdate ntp    #安裝ntp軟件
[root@master ~]# ntpdate ntp.aliyun.com        #時(shí)間同步
[root@master ~]# vim /etc/ntp.conf                   #編輯配置文件
fudge 127.127.1.0 stratum 10
#設(shè)置本機(jī)的時(shí)間層級(jí)為10級(jí),0級(jí)表示時(shí)間層級(jí)為0級(jí),是向其他服務(wù)器提供時(shí)間同步源的意思,不要設(shè)置為0級(jí)

server 127.127.1.0    #設(shè)置本機(jī)為時(shí)間同步源
 systemctl restart mysqld.service 

② 開啟NTP服務(wù)、關(guān)閉防火墻和增強(qiáng)性安全功能

[root@master ~]# systemctl start ntpd
[root@master ~]# systemctl stop firewalld.service 
[root@master ~]# setenforce 0
1.2 兩臺(tái)SLAVE服務(wù)器配置

① 安裝ntp、ntpdate服務(wù)

[root@localhost ~]# yum install ntp ntpdate -y

② 開啟ntp服務(wù),關(guān)閉防火墻、增強(qiáng)性安全功能

systemctl stop firewalld.service 
setenforce 0
systemctl start ntpd

③ 時(shí)間同步master服務(wù)器

ntpdate 192.168.174.15

④ 兩臺(tái)slave服務(wù)器配置相同

#master服務(wù)器同步阿里云時(shí)鐘服務(wù)器
ntpdate ntp.aliyun.com
ntpdate 192.168.174.15
crontab -e
*/10 * * * * /usr/sbin/ntpdate 192.168.174.15

2.配置主從同步

① master服務(wù)器修改配置文件
[root@master ~]# vim /etc/my.cnf
#在mysqld模塊下修改一下內(nèi)容
#開啟二進(jìn)制日志文件(之后生成的日志名為master-bin)
log_bin=master-bin
#開啟從服務(wù)器日志同步
log_slave-updates=true
#主服務(wù)器id為1(不可重復(fù))
server_id = 1
--------》wq

重啟服務(wù)
[root@master ~]# systemctl restart mysqld

配置規(guī)則
[root@master ~]# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.

mysql> GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.174.%' IDENTIFIED BY 'abc123';
Query OK, 0 rows affected (0.00 sec)

#刷新權(quán)限表
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)


規(guī)則解析:GRANT REPLICATION SLAVE ON *.* TO ‘myslave’@‘192.168.10.%’ IDENTIFIED BY ‘123456’;

給從服務(wù)器提權(quán),允許使用slave的身份復(fù)制master的所有數(shù)據(jù)庫的所有表,并指定密碼為123456

查看master數(shù)據(jù)庫狀態(tài)
mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 |      604 |              |                  |                   |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

mysql> 
#以上可見產(chǎn)生了master-bin.000001日志文件,定位為604
#從服務(wù)器需要定位到此處進(jìn)行復(fù)制
② 從服務(wù)器配置
[root@slave1 ~]# vim /etc/my.cnf
#開啟二進(jìn)制日志文件
log-bin=master-bin
#設(shè)置server id為2,slave2 為3
server_id = 22
#從主服務(wù)器上同步日志文件記錄到本地
relay-log=relay-log-bin
#定義relay-log的位置和名稱(index索引) 
relay-log-index=slave-relay-bin.index
--------》wq
systemctl restart mysqld.service 
log_bin=master-bin
server_id = 2
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index




開啟從服務(wù)器功能
[root@slave1 ~]# mysql -uroot -pabc123
...............
mysql> change master to master_host='192.168.174.15',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=604;
Query OK, 0 rows affected, 2 warnings (0.02 sec)

change master to master_host='192.168.174.15',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=604;

mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

查看從服務(wù)器狀態(tài)
mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: 
                  Master_Host: 192.168.174.15
                  Master_User: myslave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-bin.000001
          Read_Master_Log_Pos: 603
               Relay_Log_File: wang3-relay-bin.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: master-bin.000001
             Slave_IO_Running: No
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 603
              Relay_Log_Space: 154
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 1593
                Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
                  Master_UUID: 
             Master_Info_File: /usr/local/mysql/data/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 230723 12:33:38
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)


同理、開啟另一臺(tái)從服務(wù)器同步

3.測試數(shù)據(jù)同步

在主服務(wù)器上創(chuàng)建一個(gè)數(shù)據(jù)庫

mysql> create database work;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| work               |
+--------------------+
5 rows in set (0.00 sec)

在兩臺(tái)從服務(wù)器上直接查看數(shù)據(jù)庫列表

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| work               |
+--------------------+
5 rows in set (0.00 sec)

以上,主從同步復(fù)制配置完成

四、MySQL 讀寫分離

1.什么是讀寫分離?

讀寫分離,基本的原理是讓主數(shù)據(jù)庫處理事務(wù)性增、改、刪操作(INSERT、UPDATE、DELETE),而從數(shù)據(jù)庫處理SELECT查詢操作。數(shù)據(jù)庫復(fù)制被用來把事務(wù)性操作導(dǎo)致的變更同步到集群中的從數(shù)據(jù)庫。

2.為什么要讀寫分離呢?

因?yàn)閿?shù)據(jù)庫的“寫”(寫10000條數(shù)據(jù)可能要3分鐘)操作是比較耗時(shí)的。
但是數(shù)據(jù)庫的“讀”(讀10000條數(shù)據(jù)可能只要5秒鐘)。
所以讀寫分離,解決的是,數(shù)據(jù)庫的寫入,影響了查詢的效率。

3.什么時(shí)候要讀寫分離?

數(shù)據(jù)庫不一定要讀寫分離,如果程序使用數(shù)據(jù)庫較多時(shí),而更新少,查詢多的情況下會(huì)考慮使用。利用數(shù)據(jù)庫主從同步,再通過讀寫分離可以分擔(dān)數(shù)據(jù)庫壓力,提高性能。

4.主從復(fù)制與讀寫分離

在實(shí)際的生產(chǎn)環(huán)境中,對(duì)數(shù)據(jù)庫的讀和寫都在同一個(gè)數(shù)據(jù)庫服務(wù)器中,是不能滿足實(shí)際需求的。無論是在安全性、高可用性還是高并發(fā)等各個(gè)方面都是完全不能滿足實(shí)際需求的。因此,通過主從復(fù)制的方式來同步數(shù)據(jù),再通過讀寫分離來提升數(shù)據(jù)庫的并發(fā)負(fù)載能力。有點(diǎn)類似于rsync,但是不同的是rsync是對(duì)磁盤文件做備份,而mysql主從復(fù)制是對(duì)數(shù)據(jù)庫中的數(shù)據(jù)、語句做備份。

5.MySQL 讀寫分離原理

讀寫分離就是只在主服務(wù)器上寫,只在從服務(wù)器上讀。基本的原理是讓主數(shù)據(jù)庫處理事務(wù)性操作,而從數(shù)據(jù)庫處理 select 查詢。數(shù)據(jù)庫復(fù)制被用來把主數(shù)據(jù)庫上事務(wù)性操作導(dǎo)致的變更同步到集群中的從數(shù)據(jù)庫。

6.企業(yè) 使用MySQL 讀寫分離場景

目前較為常見的 MySQL 讀寫分離分為以下兩種:

(1)基于程序代碼內(nèi)部實(shí)現(xiàn)

在代碼中根據(jù) select、insert 進(jìn)行路由分類,這類方法也是目前生產(chǎn)環(huán)境應(yīng)用最廣泛的。
優(yōu)點(diǎn)是性能較好,因?yàn)樵诔绦虼a中實(shí)現(xiàn),不需要增加額外的設(shè)備為硬件開支;缺點(diǎn)是需要開發(fā)人員來實(shí)現(xiàn),運(yùn)維人員無從下手。
但是并不是所有的應(yīng)用都適合在程序代碼中實(shí)現(xiàn)讀寫分離,像一些大型復(fù)雜的Java應(yīng)用,如果在程序代碼中實(shí)現(xiàn)讀寫分離對(duì)代碼改動(dòng)就較大。

(2)基于中間代理層實(shí)現(xiàn)

代理一般位于客戶端和服務(wù)器之間,代理服務(wù)器接到客戶端請(qǐng)求后通過判斷后轉(zhuǎn)發(fā)到后端數(shù)據(jù)庫,有以下代表性程序。
(1)MySQL-Proxy。MySQL-Proxy 為 MySQL 開源項(xiàng)目,通過其自帶的 lua 腳本進(jìn)行SQL 判斷。
(2)Atlas。是由奇虎360的Web平臺(tái)部基礎(chǔ)架構(gòu)團(tuán)隊(duì)開發(fā)維護(hù)的一個(gè)基于MySQL協(xié)議的數(shù)據(jù)中間層項(xiàng)目。它是在mysql-proxy 0.8.2版本的基礎(chǔ)上,對(duì)其進(jìn)行了優(yōu)化,增加了一些新的功能特性。360內(nèi)部使用Atlas運(yùn)行的mysql業(yè)務(wù),每天承載的讀寫請(qǐng)求數(shù)達(dá)幾十億條。支持事物以及存儲(chǔ)過程。
(3)Amoeba。由陳思儒開發(fā),作者曾就職于阿里巴巴。該程序由Java語言進(jìn)行開發(fā),阿里巴巴將其用于生產(chǎn)環(huán)境。但是它不支持事務(wù)和存儲(chǔ)過程。

由于使用MySQL Proxy 需要寫大量的Lua腳本,這些Lua并不是現(xiàn)成的,而是需要自己去寫。這對(duì)于并不熟悉MySQL Proxy 內(nèi)置變量和MySQL Protocol 的人來說是非常困難的。
Amoeba是一個(gè)非常容易使用、可移植性非常強(qiáng)的軟件。因此它在生產(chǎn)環(huán)境中被廣泛應(yīng)用于數(shù)據(jù)庫的代理層。

五、讀寫分離實(shí)驗(yàn)

整個(gè)實(shí)驗(yàn)的環(huán)境 以及服務(wù)器信息

  • 環(huán)境部署 cetos7.6
  • 虛擬機(jī)服務(wù)環(huán)境
    Master服務(wù)器:192.168.174.15
    slave1服務(wù)器:192.168.174.18
    Slave2服務(wù)器:192.168.174.19
    Amoeba服務(wù)器:192.168.174.12 jdk1.6、Amoeba
    客戶端服務(wù)器:192.168.174.13 mysql 測試

注:做讀寫分離實(shí)驗(yàn)之前必須有一 主 兩從 環(huán)境

1.搭建 MySQL讀寫分離

1.1 Amoeba服務(wù)器配置----
##安裝 Java 環(huán)境##
因?yàn)?Amoeba 基于是 jdk1.5 開發(fā)的,所以官方推薦使用 jdk1.5 或 1.6 版本,高版本不建議使用。
cd /opt/
cp jdk-6u14-linux-x64.bin /usr/local/
cd /usr/local/
chmod +x jdk-6u14-linux-x64
./jdk-6u14-linux-x64.bin
//按yes,按enter

mv jdk1.6.0_14/ /usr/local/jdk1.6

vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.6
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
export PATH=$PATH:$AMOEBA_HOME/bin

source /etc/profile
java -version

##安裝 Amoeba軟件##
mkdir /usr/local/amoeba
tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
chmod -R 755 /usr/local/amoeba/
/usr/local/amoeba/bin/amoeba
//如顯示amoeba start|stop說明安裝成功

##配置 Amoeba讀寫分離,兩個(gè) Slave 讀負(fù)載均衡##
#先在Master、Slave1、Slave2 的mysql上開放權(quán)限給 Amoeba 訪問
grant all on *.* to @'192.168.174.%' identified by 'abc123';
flush privileges;

#再回到amoeba服務(wù)器配置amoeba服務(wù):
cd /usr/local/amoeba/conf/

cp amoeba.xml amoeba.xml.bak
vim amoeba.xml									#修改amoeba配置文件
--30行--
<property name="user">root</property>
--32行-- 
<property name="password">abc123</property>
--115行--
<property name="defaultPool">master</property>
--117-去掉注釋-
<property name="writePool">master</property>
<property name="readPool">slaves</property>

cp dbServers.xml dbServers.xml.bak
vim dbServers.xml								#修改數(shù)據(jù)庫配置文件
--23行--注釋掉  作用:默認(rèn)進(jìn)入test庫 以防m(xù)ysql中沒有test庫時(shí),會(huì)報(bào)錯(cuò)
<!-- <property name="schema">test</property> -->
--26--修改
<property name="user">test</property>
--28-30--去掉注釋
<property name="password">123456</property>
--45--修改,設(shè)置主服務(wù)器的名Master
<dbServer name="master"  parent="abstractServer">
--48--修改,設(shè)置主服務(wù)器的地址
<property name="ipAddress">192.168.174.15</property>
--52--修改,設(shè)置從服務(wù)器的名slave1
<dbServer name="slave1"  parent="abstractServer">
--55--修改,設(shè)置從服務(wù)器1的地址
<property name="ipAddress">192.168.174.18</property>
--58--復(fù)制上面6行粘貼,設(shè)置從服務(wù)器2的名slave2和地址
<dbServer name="slave2"  parent="abstractServer">
<property name="ipAddress">192.168.174.19</property>
--65行--修改
<dbServer name="slaves" virtual="true">
--71行--修改
<property name="poolNames">slave1,slave2</property>


/usr/local/amoeba/bin/amoeba start&					#啟動(dòng)Amoeba軟件,按ctrl+c 返回
netstat -antp | grep java							#查看8066端口是否開啟,默認(rèn)端口為TCP 8066


1.2 測試讀寫分離
#先安裝數(shù)據(jù)庫
yum install -y mariadb-server mariadb
systemctl start mariadb.service
在客戶端服務(wù)器上測試
mysql -u test -pabc123 192.168.174.12 -P8066		
//通過amoeba服務(wù)器代理訪問mysql ,在通過客戶端連接mysql后寫入的數(shù)據(jù)只有主服務(wù)會(huì)記錄,然后同步給從--從服務(wù)器

在主服務(wù)器上:
use db_test;
create table test (id int(10),name varchar(10),address varchar(20));

在兩臺(tái)從服務(wù)器上:
stop slave;											#關(guān)閉同步
use db_test;
//在slave1上:
insert into test values('1','billkin','this_is_slave1');

//在slave2上:
insert into test values('2','pp','this_is_slave2');

//在主服務(wù)器上:
insert into test values('3','sehun','this_is_master');

//在客戶端服務(wù)器上:
use test;
select * from test;		//客戶端會(huì)分別向slave1和slave2讀取數(shù)據(jù),顯示的只有在兩個(gè)從服務(wù)器上添加的數(shù)據(jù),沒有在主服務(wù)器上添加的數(shù)據(jù)

insert into test values('4','chanyeol','this_is_client');		//只有主服務(wù)器上有此數(shù)據(jù)

//在兩個(gè)從服務(wù)器上執(zhí)行 start slave; 即可實(shí)現(xiàn)同步在主服務(wù)器上添加的數(shù)據(jù)
start slave;

dress varchar(20));

在兩臺(tái)從服務(wù)器上:
stop slave; #關(guān)閉同步
use db_test;
//在slave1上:
insert into test values(‘1’,‘billkin’,‘this_is_slave1’);

//在slave2上:
insert into test values(‘2’,‘pp’,‘this_is_slave2’);

//在主服務(wù)器上:
insert into test values(‘3’,‘sehun’,‘this_is_master’);

//在客戶端服務(wù)器上:
use test;
select * from test; //客戶端會(huì)分別向slave1和slave2讀取數(shù)據(jù),顯示的只有在兩個(gè)從服務(wù)器上添加的數(shù)據(jù),沒有在主服務(wù)器上添加的數(shù)據(jù)

insert into test values(‘4’,‘chanyeol’,‘this_is_client’); //只有主服務(wù)器上有此數(shù)據(jù)

//在兩個(gè)從服務(wù)器上執(zhí)行 start slave; 即可實(shí)現(xiàn)同步在主服務(wù)器上添加的數(shù)據(jù)
start slave;文章來源地址http://www.zghlxwxcb.cn/news/detail-613059.html









到了這里,關(guān)于Mysql-主從復(fù)制與讀寫分離的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • MySQL主從分離讀寫復(fù)制

    MySQL主從分離讀寫復(fù)制

    在高負(fù)載的生產(chǎn)環(huán)境里,把數(shù)據(jù)庫進(jìn)行讀寫分離,能顯著提高系統(tǒng)的性能。下面對(duì)MySQL的進(jìn)行讀寫分離。 試驗(yàn)環(huán)境 A機(jī):IP:192.168.0.1 mysql版本:mysql-5.6.4,主數(shù)據(jù)服務(wù)器(只寫操作) B機(jī):IP:192.168.0.2 mysql版本:mysql-5.6.4,從數(shù)據(jù)服務(wù)器(只讀操作) 步驟 ? ? 1.修改主數(shù)據(jù)庫服務(wù)器

    2024年02月09日
    瀏覽(22)
  • MySQL 主從復(fù)制與讀寫分離

    MySQL 主從復(fù)制與讀寫分離 1、什么是讀寫分離? 讀寫分離,基本的原理是讓主數(shù)據(jù)庫處理事務(wù)性增、改、刪操作(INSERT、UPDATE、DELETE),而從數(shù)據(jù)庫處理SELECT查詢操作。數(shù)據(jù)庫復(fù)制被用來把事務(wù)性操作導(dǎo)致的變更同步到集群中的從數(shù)據(jù)庫。 2、為什么要讀寫分離呢?讀快寫慢

    2024年02月06日
    瀏覽(25)
  • MySQL主從復(fù)制與讀寫分離

    MySQL主從復(fù)制與讀寫分離

    STATEMENT∶基于語句的復(fù)制。在服務(wù)器上執(zhí)行sql語句,在從服務(wù)器上執(zhí)行同樣的語句,mysql默認(rèn)采用基于語句的復(fù)制,執(zhí)行效率高。 ROW∶ 基于行的復(fù)制。把改變的內(nèi)容復(fù)制過去, 而不是把命令在從服務(wù)器上執(zhí)行一遍。 MIXED∶混合類型的復(fù)制。默認(rèn)采用基于語句的復(fù)制,一旦發(fā)

    2024年02月05日
    瀏覽(21)
  • Mysql-主從復(fù)制與讀寫分離

    Mysql-主從復(fù)制與讀寫分離

    1.在企業(yè)應(yīng)用中,成熟的業(yè)務(wù)通常數(shù)據(jù)量都比較大 2.單臺(tái)MySQL在安全性、 高可用性和高并發(fā)方面都無法滿足實(shí)際的需求 3.配置多臺(tái)主從數(shù)據(jù)庫服務(wù)器以實(shí)現(xiàn)讀寫分離 1.MySQL的復(fù)制類型 基于語句的復(fù)制(STATEMENT, MySQL默認(rèn)類型) 基于行的復(fù)制(ROW) 混合類型的復(fù)制(MIXED) 2. MySQL主從復(fù)制

    2024年02月15日
    瀏覽(19)
  • Docker 搭建MySQL主從復(fù)制-讀寫分離

    Docker 搭建MySQL主從復(fù)制-讀寫分離

    MySQL主從復(fù)制是一種常用的數(shù)據(jù)庫高可用性解決方案,通過在主數(shù)據(jù)庫上記錄的數(shù)據(jù)變更,同步到一個(gè)或多個(gè)從數(shù)據(jù)庫,實(shí)現(xiàn)數(shù)據(jù)的冗余備份和讀寫分離。在Docker環(huán)境下搭建MySQL主從復(fù)制和讀寫分離,不僅方便管理,還能充分發(fā)揮Docker的輕量、可移植性等特性。 在開始搭建之

    2024年02月22日
    瀏覽(19)
  • 【簡單認(rèn)識(shí)MySQL主從復(fù)制與讀寫分離】

    【簡單認(rèn)識(shí)MySQL主從復(fù)制與讀寫分離】

    在企業(yè)應(yīng)用中,成熟的業(yè)務(wù)通常數(shù)據(jù)量都比較大 單臺(tái)MySQL在安全性、 高可用性和高并發(fā)方面都無法滿足實(shí)際的需求 配置多臺(tái)主從數(shù)據(jù)庫服務(wù)器以實(shí)現(xiàn)讀寫分離 1、 MySQL的復(fù)制類型 基于語句的復(fù)制(STATEMENT, MySQL默認(rèn)類型) 基于行的復(fù)制(ROW) 混合類型的復(fù)制(MIXED) 2、 MySQL主從復(fù)制

    2024年02月15日
    瀏覽(15)
  • Mysql - 配置Mysql主從復(fù)制-keepalived高可用-讀寫分離集群

    Mysql - 配置Mysql主從復(fù)制-keepalived高可用-讀寫分離集群

    目錄 高可用: 為什么需要高可用呢? 高可用的主要作用: keepalived是什么?它用在哪里? 什么是VRRP協(xié)議,它的作用是什么? 搭建一個(gè)基于keepalived的高可用Mysql主從復(fù)制讀寫分離集群 一、項(xiàng)目中的IP地址配置表: 二、項(xiàng)目拓?fù)鋱D: 項(xiàng)目步驟:(主從復(fù)制、讀寫分離、單vi

    2024年02月13日
    瀏覽(21)
  • MySQL 主從復(fù)制[異步 同步 半同步復(fù)制] 讀寫分離 優(yōu)化 (非常重要)

    MySQL 主從復(fù)制[異步 同步 半同步復(fù)制] 讀寫分離 優(yōu)化 (非常重要)

    1、什么是讀寫分離? 讀寫分離,基本的原理是讓主數(shù)據(jù)庫處理事務(wù)性增、改、刪操作(INSERT、UPDATE、DELETE),而從數(shù)據(jù)庫處理SELECT查詢操作。數(shù)據(jù)庫復(fù)制被用來把事務(wù)性操作導(dǎo)致的變更同步到集群中的從數(shù)據(jù)庫。 2、為什么要讀寫分離呢? 因?yàn)閿?shù)據(jù)庫的“寫”(寫10000條數(shù)據(jù)

    2024年02月11日
    瀏覽(21)
  • python 實(shí)現(xiàn)對(duì)MySQL 主從復(fù)制與讀寫分離 --2023博客之星候選--城市賽道

    在Python中,可以使用 pymysql 庫來實(shí)現(xiàn)對(duì)MySQL主從復(fù)制和讀寫分離的代碼封裝。以下是一個(gè)簡單的示例: 在上述示例中,創(chuàng)建了一個(gè)名為 MySQLReplication 的類,該類用于封裝主從數(shù)據(jù)庫連接和執(zhí)行查詢的功能。在類的初始化方法中,傳入主數(shù)據(jù)庫和從數(shù)據(jù)庫的配置信息,并創(chuàng)建連

    2024年02月11日
    瀏覽(25)
  • 第100講:MHA+Atlas實(shí)現(xiàn)MySQL主從復(fù)制讀寫分離分布式集群

    第100講:MHA+Atlas實(shí)現(xiàn)MySQL主從復(fù)制讀寫分離分布式集群

    Atlas是由 Qihoo 360, Web平臺(tái)部基礎(chǔ)架構(gòu)團(tuán)隊(duì)開發(fā)維護(hù)的一個(gè)基于MySQL協(xié)議的數(shù)據(jù)中間層項(xiàng)目。它是在mysql-proxy 0.8.2版本的基礎(chǔ)上,對(duì)其進(jìn)行了優(yōu)化,增加了一些新的功能特性。 Atlas是一個(gè)位于應(yīng)用程序與MySQL之間中間件。在后端DB看來,Atlas相當(dāng)于連接它的客戶端,在前端應(yīng)用看來

    2024年02月21日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包