《MySQL主從復(fù)制讀寫分離》要點:
本文介紹了MySQL主從復(fù)制讀寫分離,希望對您有用。如果有疑問,可以聯(lián)系我們。
MySQL簡介
MySQL是最流行的開放源碼 SQL數(shù)據(jù)庫管理系統(tǒng),它是由 MySQL AB 公司開發(fā)、發(fā)布并支持的.它的插入式存儲引擎可以讓使用者根據(jù)實際應(yīng)用使用分歧的存儲.
生產(chǎn)環(huán)境中應(yīng):
MySQL源碼安裝+LVM邏輯卷
虛擬機測試環(huán)境,添加一塊硬盤
重啟電腦 創(chuàng)立一個分區(qū)
[root@localhost6 ~]# fdisk /dev/sdb
Device Boot Start End Blocks Id System
/dev/sdb1 1 3917 31463271 8e Linux LVM [root@localhost6 ~]# partprobe /dev/sdb #安裝法式是parted
創(chuàng)立一個卷組 VG
查看卷組vgdisplay mysqlvg
[root@localhost6 ~]# vgcreate mysqlvg /dev/sdb1
No physical volume label read from /dev/sdb1
Physical volume /dev/sdb1 not found
Physical volume "/dev/sdb1" successfully created
Volume group "mysqlvg" successfully created
創(chuàng)立一個邏輯卷 LV
[root@localhost6 ~]# lvcreate -L 10G -n mysqllv mysqlvg
Logical volume "mysqllv" created
lvdisplay /dev/mysqlvg/mysqllv --查看
[root@localhost6 ~]# lvextend -L +3G /dev/mysqlvg/mysqllv 動態(tài)增加3G空間
Extending logical volume mysqllv to 13.00 GiB
Logical volume mysqllv successfully resized
格式化邏輯卷并掛載
[root@localhost6 ~]# mkfs -t ext4 /dev/mysqlvg/mysqllv
[root@localhost6 ~]# mkdir -p /usr/local/mysql/data
[root@localhost6 ~]# mount /dev/mysqlvg/mysqllv /usr/local/mysql/data
實現(xiàn)開機自動掛載
[root@localhost6 ~]# vim /etc/fstab
/dev/mysqlvg/mysqllv /usr/local/mysql/data ext4 defaults 0 0
[root@localhost6 ~]# mount -a
安裝MySQL數(shù)據(jù)庫準備
[root@localhost6 ~]# ls
cmake-2.8.12.tar.gz mysql-5.7.2-m12.tar.gz
安裝前確認主從服務(wù)器時間一致,全部配置時間同步服務(wù)器
ntpdate 202.112.31.197 中國教育網(wǎng)的時間
安裝cmake
[root@localhost6 ~]# tar xf cmake-2.8.12.tar.gz -C /usr/src/
[root@localhost6 ~]# cd /usr/src/cmake-2.8.12/
[root@localhost6 cmake-2.8.12]# ./configure && gmake && gmake install
安裝MySQL
[root@localhost6 ~]# tar xf mysql-5.7.2-m12.tar.gz -C /usr/src/
[root@localhost6 ~]# cd /usr/src/mysql-5.7.2-m12/
[root@localhost6 mysql-5.7.2-m12]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DSYSCONFDIR=/etc && make && make install
[root@localhost6 mysql-5.7.2-m12]# cp support-files/my-default.cnf /etc/my.cnf
cp:是否覆蓋"/etc/my.cnf"? y
[root@localhost6 mysql-5.7.2-m12]# cp support-files/mysql.server /etc/init.d/mysqld
[root@localhost6 mysql-5.7.2-m12]# chmod +x /etc/init.d/mysqld
[root@localhost6 mysql-5.7.2-m12]# chkconfig --add mysqld
[root@localhost6 mysql-5.7.2-m12]# chkconfig --list mysqld
mysqld 0:關(guān)閉1:關(guān)閉2:啟用3:啟用4:啟用5:啟用6:關(guān)閉
[root@localhost6 mysql-5.7.2-m12]# echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
[root@localhost6 mysql-5.7.2-m12]# . /etc/profile
[root@localhost6 mysql-5.7.2-m12]# groupadd mysql
[root@localhost6 mysql-5.7.2-m12]# useradd -M -s /sbin/nologin -g mysql mysql
[root@localhost6 mysql-5.7.2-m12]# chown -R mysql:mysql /usr/local/mysql/
[root@localhost6 mysql-5.7.2-m12]# /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data --user=mysql
[root@localhost6 mysql-5.7.2-m12]# service mysqld start
Starting MySQL. SUCCESS!
[root@localhost6 mysql-5.7.2-m12]# mysqladmin -u root password '123123'
[root@localhost6 mysql-5.7.2-m12]# mysql -u root -p123123
在實際生產(chǎn)環(huán)境中,如果對數(shù)據(jù)庫的讀和寫都在同一個數(shù)據(jù)庫服務(wù)器中操作,無論是在平安性,高可用還是高并發(fā)等各個方面都不能完全滿足實際需求的,因此一般來說都是通過主從復(fù)制(Master-Slave)的方式來同步數(shù)據(jù),在通過讀寫分離來提升數(shù)據(jù)的高并發(fā)負載能力這樣的方案來進行部署.
MYISAM 讀寫操作相互 互斥 (磁盤的IO限制,讀與寫不克不及同時進行)
MySQL Replication 俗稱MySQL AB復(fù)制(主從,雙機熱備),從庫以一定的頻率去讀取主庫的二進制日志文件,依照日志中記錄對從庫進行同樣的操作,以達到同步效果.
MySQL 支持的復(fù)制類型
基于語句的復(fù)制在主服務(wù)器上執(zhí)行的SQL語句,在從服務(wù)器上執(zhí)行同樣的語句,MySQL默認采用基于語句的復(fù)制,效率比擬高
基于行的復(fù)制把改變的內(nèi)容復(fù)制過去,而不是把命令在從服務(wù)器上執(zhí)行一遍
混合類型的復(fù)制默認采納基于語句的復(fù)制,一旦發(fā)現(xiàn)基于語句無法精確復(fù)制時,就會采納行
mysql 5.6 以后多了一個GTIDS復(fù)制
復(fù)制的工作過程
1.主庫在每個事務(wù)更新完數(shù)據(jù)完成之前,Master在二進制日志(Binary log,binlog)記錄這些改變,寫入二進制日志完成后,Master通知存儲引擎提交事務(wù)
2.Slave將Master的Binary log復(fù)制到其中中繼日志,首先Slave開始一個工作線程-I/O線程在Master上打開一個普通的連接,然后開始Binlog dump process,Binlog dump process從Master的二進制日志中讀取變亂,如果已經(jīng)跟上Master,它會催眠并等待Master產(chǎn)生新的變亂,I/O線程將這些變亂寫入中繼日志.
3.SQL Slave Thread(SQL從線程)處理該過程的最后一步,SQL線程從中繼日志讀取事件,并重放其中的事件而更新Slave的數(shù)據(jù),使其與Master中的數(shù)據(jù)一致,只要該線程與I/O線程堅持一致,中繼日志通常會在OS的緩存中,所以中繼日志的開銷很小.
復(fù)制過程的限制
1.即復(fù)制在Slave上是串行化的,也便是說Master上的并行更新不能在Slave上并行操作
2.MYSQL的版本都要高于3.2,還有一個基本的原則便是作為從數(shù)據(jù)庫的數(shù)據(jù)庫版本可以高于主服務(wù)器數(shù)據(jù)庫的版本,但是不可以低于主服務(wù)器的數(shù)據(jù)庫版本
從庫以一定的頻率去讀取主庫的二進制日志文件,依照日志中記錄對從庫進行同樣的操作,以達到同步效果.
MySQL Master IP: 192.168.8.60
MySQL Slave IP: 192.168.8.70
Amoeba IP: 192.168.8.80
每臺機器操作:
[root@localhost6 ~]# service iptables stop
iptables:將鏈設(shè)置為政策 ACCEPT:filter [確定]
iptables:清除防火墻規(guī)則: [確定]
iptables:正在卸載模塊: [確定]
[root@localhost6 ~]# setenforce 0
setenforce: SELinux is disabled
[root@localhost6 ~]# service sshd restart
停止 sshd: [確定]
正在啟動 sshd: [確定]
配置mysql master服務(wù)器
[root@localhost6 ~]# vim /etc/my.cnf
[mysqld]
server-id=1 依次設(shè)置server-id號
log-bin=mysql-binlog
log-slave-updates=true
[root@localhost6 ~]# /etc/init.d/mysqld stop
Shutting down MySQL.. SUCCESS!
[root@localhost6 ~]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!
創(chuàng)立Replication用戶
mysql> grant replication slave on *.* to 'myslave'@'192.168.8.%' identified by '123123';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
replication slave:用于復(fù)制型從屬服務(wù)器(從主服務(wù)器中讀取二進制日志變亂)
獲得Master DB的相關(guān)信息
mysql> show master status;
+---------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------------+----------+--------------+------------------+-------------------+
| mysql-binlog.000001 | 428 | | | |
+---------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
供Slave DB連接時使用,記錄下File和Position的值
如果一個數(shù)據(jù)庫里面有數(shù)據(jù),現(xiàn)在要加一個從服務(wù)器需將數(shù)據(jù)一致后再配置服務(wù)器AB復(fù)制
mysqldump -u root -p123123 --all-databases > /root/alldbbackup.sql 導(dǎo)出數(shù)據(jù)
scp /root/alldbbackup.sql 傳到從數(shù)據(jù)庫
mysql -u root -p < /root/alldbbackup.sql 導(dǎo)入備份
從服務(wù)器slave配置MySQL配置文件
[root@localhost7 ~]# vim /etc/my.cnf
[mysqld]
server-id=2
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
[root@localhost7 ~]# /etc/init.d/mysqld stop
Shutting down MySQL.. SUCCESS!
[root@localhost7 ~]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!
mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> CHANGE MASTER TO MASTER_HOST='192.168.8.60', MASTER_USER='myslave', MASTER_PASSWORD='123123', MASTER_LOG_FILE='mysql-binlog.000001', MASTER_LOG_POS=428;
Query OK, 0 rows affected, 2 warnings (0.17 sec)
參數(shù)闡明:
mysql> CHANGE MASTER TO
-> MASTER_HOST='master_host_name', //主服務(wù)器的IP地址
-> MASTER_USER='replication_user_name', //同步數(shù)據(jù)庫的用戶
-> MASTER_PASSWORD='replication_password', //同步數(shù)據(jù)庫的暗碼
-> MASTER_LOG_FILE='recorded_log_file_name', //主服務(wù)器二進制日志的文件名(前面要求記錄的參數(shù))
-> MASTER_LOG_POS=recorded_log_position; //日志文件的開始位置(前面要求記錄的參數(shù))
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.8.60
Master_User: myslave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-binlog.000001
Read_Master_Log_Pos: 428
Relay_Log_File: relay-log-bin.000002
Relay_Log_Pos: 286
Relay_Master_Log_File: mysql-binlog.000001
Slave_IO_Running: Yes 顯示為兩個Yes即配置與連接沒問題
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: 428
Relay_Log_Space: 457
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: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: 39dc0a9f-96b5-11e7-aeee-000c292a38b6
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 the slave I/O thread to update it
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp: 如果上面顯示的不是兩個Yes,這里會顯示哪里出了
Last_SQL_Error_Timestamp: 問題,網(wǎng)絡(luò)、IO···
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
1 row in set (0.00 sec)
在主master數(shù)據(jù)庫上創(chuàng)立一個數(shù)據(jù)庫testdb,在從slave數(shù)據(jù)庫上進行查看
mysql> create database testdb;
Query OK, 1 row affected (0.01 sec)
從數(shù)據(jù)庫有,即主從同步(AB復(fù)制)數(shù)據(jù)庫已完成
報錯解決辦法:
ERROR 1201(HY000):Could now initialize master info structure; more error messages can be found in the MySQL error log
stop slave;
reset slave;
CHANGE MASTER TO MASTER_HOST='192.168.8.60', MASTER_USER='slave', MASTER_PASSWORD='123123',MASTER_LOG_FILE='mysql-binlog.000003', MASTER_LOG_POS=246;
start slave;
停止slave角色:
mysql> stop slave;
重置slave角色:
mysql> reset slave;
啟動slave角色:
mysql> start slave;
數(shù)據(jù)不同步解決方法:
mysql> stop slave;
Query OK, 0 rows affected (0.00 sec)
mysql> set global sql_slave_skip_counter=1;
Query OK, 0 rows affected (0.00 sec)
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
主從數(shù)據(jù)庫相關(guān)命令:
slave stop; slave start; 開始停止從數(shù)據(jù)庫.
show slave status\G顯示從庫狀態(tài)信息
show master status\G顯示主庫狀態(tài)信息
purge master logs to ’binlog.000004’; 此命令非常小心,刪除主數(shù)據(jù)庫沒用的二進制日志文件.如果誤刪除,那么從庫就沒有方法自動更新了.
change master;從服務(wù)器上修改參數(shù)使用
另外,如果你當(dāng)前操作的從庫以前曾經(jīng)與其他服務(wù)器建立過主從關(guān)系,你可能會發(fā)現(xiàn)即使你在my.cnf文件中即便變動了主服務(wù)器的位置,但是MSQL仍然
在試圖連接就舊的主服務(wù)器的現(xiàn)象.產(chǎn)生這種問題的時候,我們可以通過清除master.info這個緩存文件或者在mysql中通過命令來進行設(shè)置.方式如下:
刪除master.info辦法
這個文件位于數(shù)據(jù)文件存放目錄里,可以直接將其刪除,然后重新啟動服務(wù)器.
b、mysql命令辦法
如果你不方便重新啟動服務(wù)器的話,那么就只能使用mysql命令來贊助你做到.
首先登錄到主服務(wù)器上,查看當(dāng)前服務(wù)器狀態(tài):
mysql> show master status\G;
+---------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| mysql-bin.003 | 73 | test | manual,mysql |
+---------------+----------+--------------+------------------+
1.FLUSH TABLES WITH READ LOCK
這個命令是全局讀鎖定,執(zhí)行了命令之后所有庫所有表都被鎖定只讀.一般都是用在數(shù)據(jù)庫聯(lián)機備份,這個時候數(shù)據(jù)庫的寫操作將被阻塞,讀操作順利進行
解鎖的語句是unlock tables
2.LOCK TABLES tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE}
這個命令是表級其余鎖定,可以定制鎖定某一個表.例如: lock tables test read; 不影響其他表的寫操作.
解鎖語句也是unlock tables.
這兩個語句在執(zhí)行的時候都需要注意個特點,在退出mysql終端的時候都會隱式的執(zhí)行unlock tables.也就是如果要讓表鎖定生效就必須一直堅持對話
P.S. MYSQL的read lock和wirte lock
read-lock: 允許其他并發(fā)的讀哀求,但阻塞寫哀求,即可以同時讀,但不允許任何寫.也叫共享鎖
write-lock: 不允許其他并發(fā)的讀和寫哀求,是排他的(exclusive).也叫獨占鎖
3. flush table tablename
目前較為常見的MySQL讀寫分離有兩種:
1.基于法式代碼內(nèi)部實現(xiàn)
在代碼中根據(jù)select,insert進行路由分類,這類辦法也是目前生產(chǎn)環(huán)境應(yīng)用最廣泛的,優(yōu)點是性能好,因為在程序代碼中實現(xiàn),不需要曾加額外的設(shè)備作為硬件開支,缺點是需要開發(fā)人員來實現(xiàn),運維人員無從下手.
2.基于中間代理層實現(xiàn)
代理一般位于客戶端和服務(wù)器之間,代理服務(wù)器接到客戶端哀求后通過判斷后轉(zhuǎn)發(fā)到后端數(shù)據(jù)庫,有兩個代表性程序.
(1)mysql-proxy 為mysql開源項目,通過其自帶的lua腳本進行SQL判斷,雖然是mysql的官方產(chǎn)物,但是mysql官方不建議將其應(yīng)用到生產(chǎn)環(huán)境
(2)Amoeba (變形蟲)由陳思儒開發(fā),曾就職與阿里巴巴,該法式由java語言進行開發(fā),阿里巴巴將其應(yīng)用于生成環(huán)境,它不支持事物和存儲過程通過法式代碼實現(xiàn)mysql讀寫分離自然是一個不錯的選擇,但是并不是所有的應(yīng)用都適合在法式代碼中實現(xiàn)讀寫分離,像一些大型復(fù)雜的java應(yīng)用,如果在法式代碼中實現(xiàn)讀寫分離對代碼改動就較大,像這種應(yīng)用一般會考慮使用代理層來實現(xiàn).
Amoeba (變形蟲)項目開源框架于2008年發(fā)布一款A(yù)moeba for mysql軟件,這個軟件致力于mysql的分布式數(shù)據(jù)庫前端代理層,主要為應(yīng)用層訪問mysql的時候充當(dāng)SQL路由功能,并具有負載均衡,高可用性,SQL過濾,讀寫分離,可路由到相關(guān)的目標數(shù)據(jù)庫,可并發(fā)哀求多臺數(shù)據(jù)庫,通過Amoeba能夠完成多數(shù)據(jù)源的高可用,負載均衡,數(shù)據(jù)切片的功能,目前Amoeba已經(jīng)在很多企業(yè)的生產(chǎn)線上使用.
因為Amoeba基于jdk1.5開發(fā)的,所以官方保舉使用jdk1.5 或者1.6版本,高版本不建議使用
.bin 通用二進制格式
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
[root@localhost8 ~]# ls
amoeba-mysql-binary-2.2.0.tar.gz jdk-6u31-linux-x64.bin
[root@localhost8 ~]# chmod +x jdk-6u31-linux-x64.bin
[root@localhost8 ~]# ./jdk-6u31-linux-x64.bin
[root@localhost8 ~]# mv jdk1.6.0_31/ /usr/local/java
[root@localhost8 ~]# vim /etc/profile
export JAVA_HOME=/usr/local/java
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
[root@localhost8 ~]# java -version
java version "1.6.0_31"
Java(TM) SE Runtime Environment (build 1.6.0_31-b04)
Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01, mixed mode)
安裝Amoeba
https://sourceforge.net/projects/amoeba/
[root@localhost8 ~]# mkdir /usr/local/amoeba
[root@localhost8 ~]# tar xf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
[root@localhost8 ~]# chmod -R 755 /usr/local/amoeba
[root@localhost8 ~]# /usr/local/amoeba/bin/amoeba
amoeba start|stop 顯示此即為安裝勝利
配置Amoeba讀寫分離,寫主,讀從
Master,Slave中配置放權(quán)給Amoeba拜訪
mysql> grant all on *.* to 'amoeba'@'192.168.8.%' identified by 'elements123';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
配置文件比較多位于/usr/local/amoeba/conf下,但是僅僅使用讀寫分離功能,只需配置兩個文件即可,分別是dbServers.xml和amoeba.xml,如果需要配置ip拜訪控制,還需要修改access_list.conf文件,下面首先介紹dbServers.xml
配置amoeba.xml
[root@localhost8 ~]# cp /usr/local/amoeba/conf/amoeba.xml{,.bak}
[root@localhost8 ~]# vim /usr/local/amoeba/conf/amoeba.xml
11 <property name="port">8066</property>
#設(shè)置amoeba監(jiān)聽的端口,默認是8066
15 <property name="ipAddress">127.0.0.1</property>
#配置監(jiān)聽的接口,如果不設(shè)置,默認監(jiān)聽所有的IP
30 <property name="user">root</property>
31提供客戶端連接amoeba時需要使用這里設(shè)定的賬號 (這里的賬號暗碼和amoeba連接后端數(shù)據(jù)庫服務(wù)器的暗碼無關(guān))
32 <property name="password"> elements </property>
115 <property name="defaultPool">master</property>
116
117 <!-- 將注釋去掉
118 <property name="writePool">master</property>
119 <property name="readPool">slave</property>
120 --> 將注釋去掉
:wq
[root@localhost8 ~]# cp /usr/local/amoeba/conf/dbServers.xml{,.bak}
[root@localhost8 ~]# vim /usr/local/amoeba/conf/dbServers.xml
20 <property name="port">3306</property>
#設(shè)置Amoeba要連接的mysql數(shù)據(jù)庫的端口,默認是3306
23 <property name="schema">test</property>
#設(shè)置缺省的數(shù)據(jù)庫,當(dāng)連接amoeba時,操作表必需顯式的指定數(shù)據(jù)庫名,即采用dbname.tablename的方式,不支持 use dbname指定缺省庫,因為操作會調(diào)度到各個后端dbserver
25 <!-- mysql user -->
26 <property name="user">amoeba</property>
27 #設(shè)置amoeba連接后端數(shù)據(jù)庫服務(wù)器的賬號和暗碼,因此需要在所有后端數(shù)據(jù)庫上創(chuàng)建該用戶,并授權(quán)amoeba服務(wù)器可連接 此步驟上面已經(jīng)做過授權(quán)
28 <property name="password">elements123</property>
32 <property name="maxActive">500</property> #最大連接數(shù),默認500
33 <property name="maxIdle">500</property> #最大空閑連接數(shù)
34 <property name="minIdle">10</property> #最新空閑連接數(shù)
43 <dbServer name="master" parent="abstractServer"> #設(shè)置一個后端可寫的dbServer,這里必需設(shè)置為master,這個名字上面已經(jīng)聲明 寫master讀slave
46 <property name="ipAddress">192.168.8.60</property> #設(shè)置后端可寫dbserver
50 <dbServer name="slave" parent="abstractServer"> #設(shè)置后端可讀dbserver
51 <factoryConfig>
52 <!-- mysql ip --> #后端可讀
53 <property name="ipAddress">192.168.8.70</property>
57 <dbServer name="myslave" virtual="true">
#設(shè)置定義一個虛擬的dbserver,實際上相當(dāng)于一個dbserver組,這里將可讀的數(shù)據(jù)庫IP統(tǒng)一放到一個組中,這里將可讀的數(shù)據(jù)庫IP統(tǒng)一放到一個組中,組名本身定,這里為myslave
58 <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
59 <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
60 <property name="loadbalance">1</property>
#選擇調(diào)度算法,1表現(xiàn)復(fù)制均衡,2表現(xiàn)權(quán)重,3表現(xiàn)HA
61
62 <!-- Separated by commas,such as: server1,server2,server1 -->
63 <property name="poolNames">slave</property> #myslave組成員
啟動Amoeba
[root@localhost8 amoeba]# bin/amoeba start
log4j:WARN log4j config load completed from file:/usr/local/amoeba/conf/log4j.xml
2017-09-11 16:24:24,524 INFO context.MysqlRuntimeContext - Amoeba for Mysql current versoin=5.1.45-mysql-amoeba-proxy-2.2.0
log4j:WARN ip access config load completed from file:/usr/local/amoeba/conf/access_list.conf
2017-09-11 16:24:24,772 INFO net.ServerableConnectionManager - Amoeba for Mysql listening on 0.0.0.0/0.0.0.0:8066.
2017-09-11 16:24:24,778 INFO net.ServerableConnectionManager - Amoeba Monitor Server listening on /127.0.0.1:2463.
[root@localhost8 ~]# netstat -anpt | grep :8066
tcp 0 0 0.0.0.0:8066 0.0.0.0:* LISTEN 2146/java
想要后臺運行:
nohup /usr/local/amoeba/bin/amoeba start >> /var/log/amoeba.file 2>&1 &
查看用ps -ef 進行過濾查看 結(jié)束進程kill進程ID號
測試:
[root@localhost8 ~]# yum -y install mysql
[root@localhost8 ~]# mysql -u root -pelements -h 192.168.8.80 -P8066
刪除完多余的庫后
創(chuàng)立一個庫,看從是否同步,從服務(wù)器上進行查看,也已經(jīng)同步
《MySQL主從復(fù)制讀寫分離》是否對您有啟發(fā),歡迎查看更多與《MySQL主從復(fù)制讀寫分離》相關(guān)教程,學(xué)精學(xué)透。維易PHP學(xué)院為您提供精彩教程。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/7871.html