MYSQL 主從備份(一主多從)
- 資源相關
Master 192.168.44.161
Slave 192.168.44.153
Slave 192.168.44.154
- 開啓log-bin日誌
#192.168.44.161 master節點
log-bin=mysql-bin
server-id=161
#192.168.44.153 slave節點
log-bin=mysql-bin
server-id=153
#192.168.44.154 slave節點
log-bin=mysql-bin
server-id=154
#重啓mysql
systemctl restart mysql
- 在192.168.44.161 Master節點上創建賬戶【用於從節點連接】
#創建賬戶: slave 密碼:147258 授權44網段內都可訪問
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.44.%' IDENTIFIED BY '147258';
#刷新
flush privileges;
- 查看192.168.44.161 Master節點狀態
show master status;
- 配置192.168.44.153,192.168.44.154 Slave從節點
#在192.168.44.153 192.168.44.154節點上都執行
CHANGE MASTER TO
MASTER_HOST='192.168.44.161',
MASTER_USER='slave',
MASTER_PASSWORD='147258',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=328;
#啓動Slave 節點
start slave;
- 查看配置的Master節點信息
#切換目錄
cd /var/lib/mysql && ll
#查看
cat master.info
- 查看192.168.44.153,192.168.44.154 Slave 進程信息
show slave status\G;
- 測試主從
-
192.168.44.161 主節點創建數據庫信息
CREATE DATABASE `task_db`; USE `task_db`; DROP TABLE IF EXISTS `tb_user`; CREATE TABLE `tb_user` ( `id` int(4) NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; insert into `tb_user`(`id`,`name`) values (1,'劉一'),(2,'陳二'),(3,'張三'),(4,'李四'),(5,'王五'); insert into tb_user(name) values(@@hostname);
-
查看153,154從節點信息
-
到此,一主多從配置完成
-
MYSQL 互爲主備(雙主)
- 資源相關
Master 192.168.44.161
Master 192.168.44.162
- 開啓bin-log日誌配置
#192.168.44.161 Master節點配置
log-bin=mysql-bin
server-id=161
#忽略指定數據庫
binlog-ignore-db=mysql
#192.168.44.162 Master節點配置
log-bin=mysql-bin
server-id=162
#忽略指定數據庫
binlog-ignore-db=mysql
#重啓mysql
systemctl restart mysql
-
以161爲Master、162爲Slave
- 在161主機上創建授權信息、允許162 Slave節點訪問
#創建賬戶: slave_m_162密碼:147258 允許192.168.44.162訪問 GRANT REPLICATION SLAVE ON *.* TO 'slave_m_162'@'192.168.44.162' IDENTIFIED BY '147258'; #刷新 flush privileges;
- 查詢192.168.44.161 上Master信息
show master status;
- 以192.168.44.162爲Slave節點、鏈接192.168.44.161 Master節點
#在192.168.44.162上執行 CHANGE MASTER TO MASTER_HOST='192.168.44.161', MASTER_USER='slave_m_162', MASTER_PASSWORD='147258', MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=336; #啓動Slave 節點 start slave;
- 查看192.168.44.162 Slave節點狀態
show slave status\G;
-
以162爲Master、161爲Slave
- 在162主機上創建授權信息、允許162 Slave節點訪問
#創建賬戶: slave_m_161密碼:147258 允許192.168.44.161訪問 GRANT REPLICATION SLAVE ON *.* TO 'slave_m_161'@'192.168.44.161' IDENTIFIED BY '147258'; #刷新 flush privileges;
- 查詢192.168.44.162 上Master信息
show master status;
- 以192.168.44.161爲Slave節點、鏈接192.168.44.162 Master節點
#在192.168.44.161上執行 CHANGE MASTER TO MASTER_HOST='192.168.44.162', MASTER_USER='slave_m_161', MASTER_PASSWORD='147258', MASTER_LOG_FILE='mysql-bin.000005', MASTER_LOG_POS=336; #啓動Slave 節點 start slave;
- 查看192.168.44.161 Slave節點狀態
show slave status\G;
-
測試雙主(互爲準備)
- 192.168.44.161上創建數據庫、192.168.44.162上查看備份
- 192.168.44.162上刪除剛創建的數據庫、192.168.44.161上查看是否刪除
- 到此、雙主搭建完成
- 192.168.44.161上創建數據庫、192.168.44.162上查看備份
MYSQL 雙主雙從
- 資源準備
master 192.168.44.191 3306 root SYS_666_admin Mysql 5.7
master 192.168.44.192 3306 root SYS_666_admin Mysql 5.7
slave 192.168.44.193 3306 root SYS_666_admin Mysql 5.7
slave 192.168.44.194 3306 root SYS_666_admin Mysql 5.7
- 編輯MYSQL配置
#雙主 191
log-bin=mysql-bin
server-id=191
#略過數據庫
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#設置需要主備的數據庫【根據情況填寫】
binlog-do-db=task_db
#設置logbin格式
binlog_format=STATEMENT
#作爲從庫、也寫入日誌
log-slave-updates
#自增長字段每次遞增的量、指定自增字段的起始值,取值範圍1-65535
auto_increment_increment=2
#自增長字段從哪個數開始、即一次遞增多少、取值1-65535
auto-increment-offset=1
#雙主 192
log-bin=mysql-bin
server-id=192
#略過數據庫
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#設置需要主備的數據庫【根據情況填寫】
binlog-do-db=task_db
#設置logbin格式
binlog_format=STATEMENT
#作爲從庫、也寫入日誌
log-slave-updates
#自增長字段每次遞增的量、指定自增字段的起始值,取值範圍1-65535
auto_increment_increment=2
#自增長字段從哪個數開始、即一次遞增多少、取值1-65535
auto-increment-offset=2
#雙從 193
log-bin=mysql-bin
server-id=193
#只讀哪個數據庫
replicate-do-db=task_db
read_only=1
relay-log=mysql-relay
#雙從 194
log-bin=mysql-bin
server-id=194
#只讀哪個數據庫
replicate-do-db=task_db
read_only=1
relay-log=mysql-relay
- 授權並鏈接主從
#191/192分別創建授權賬戶
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY 'SYS_admin_147258';
flush privileges;
#相關清除命令
flush logs;
reset master;
reset slave;
#雙主 s/192 鏈接 m/191
CHANGE MASTER TO MASTER_HOST='192.168.44.191',MASTER_USER='slave',MASTER_PASSWORD='SYS_admin_147258', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;
#雙主 s/191 鏈接 m/192
CHANGE MASTER TO MASTER_HOST='192.168.44.192',MASTER_USER='slave',MASTER_PASSWORD='SYS_admin_147258', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;
#雙主 s/193 鏈接 m/191
CHANGE MASTER TO MASTER_HOST='192.168.44.191',MASTER_USER='slave',MASTER_PASSWORD='SYS_admin_147258', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;
#雙主 s/194 鏈接 m/192
CHANGE MASTER TO MASTER_HOST='192.168.44.192',MASTER_USER='slave',MASTER_PASSWORD='SYS_admin_147258', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;
#啓動Slave
start slave;
show slave status\G;
- 測試雙主雙從
- 到此,雙主雙從搭建完成。
MYSQL 中間件(Amoeba)
-
Amoeba簡介
- Amoeba是一個以MySQL爲底層數據存儲,並對應用提供MySQL協議接口的proxy。它集中地響應應用的請求,依據用戶事先設置的規則,將SQL請求發送到特定的數據庫上執行。基於此可以實現負載均衡、讀寫分離、高可用性等需求。
-
資源相關
Amoeba 192.168.44.162
-
MYSQL 一主多從配置參考如上步驟
-
Amoeba 負載均衡/讀寫分離配置
wget https://liquidtelecom.dl.sourceforge.net/project/amoeba/Amoeba%20for%20mysql/3.x/amoeba-mysql-3.0.5-RC-distribution.zip #解壓 unzip amoeba-mysql-3.0.5-RC-distribution.zip -d /opt/module #切換目錄 cd /opt/module/ && ll
-
Amoeba 配置文件詳解
-
Amoeba主配置文件($AMOEBA_HOME/conf/amoeba.xml),用來配置Amoeba服務的基本參數,如Amoeba主機地址、端口、認證方式、用於連接的用戶名、密碼、線程數、超時時間、其他配置文件的位置等。
-
數據庫服務器配置文件($AMOEBA_HOME/conf/dbServers.xml),用來存儲和配置Amoeba所代理的數據庫服務器的信息,如:主機IP、端口、用戶名、密碼等。
-
切分規則配置文件($AMOEBA_HOME/conf/rule.xml),用來配置切分規則。
-
數據庫函數配置文件($AMOEBA_HOME/conf/functionMap.xml),用來配置數據庫函數的處理方法,Amoeba將使用該配置文件中的方法解析數據庫函數。
-
切分規則函數配置文件($AMOEBA_HOME/conf/ruleFunctionMap.xml),用來配置切分規則中使用的用戶自定義函數的處理方法。
-
訪問規則配置文件($AMOEBA_HOME/conf/access_list.conf),用來授權或禁止某些服務器IP訪問Amoeba。
-
日誌規格配置文件($AMOEBA_HOME/conf/log4j.xml),用來配置Amoeba輸出日誌的級別和方式。
-
-
Amoeba 集羣節點信息配置
- ① 編輯dbServers.xml
#切換目錄 cd /opt/module/amoeba-mysql-3.0.5-RC/conf #編輯dbServer.xml文件 vim dbServers.xml
- ② MYSQL 節點基本信息配置
<!-- 鏈接各MYSQL 節點的 用戶密碼配置 --> <dbServer name="abstractServer" abstractive="true"> <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory"> <property name="connectionManager">${defaultManager}</property> <property name="sendBufferSize">64</property> <property name="receiveBufferSize">128</property> <property name="port">3306</property> <property name="schema">test</property> <property name="user">amoeba</property> <property name="password">amoeba</property> </factoryConfig> <!-- 優化相關 --> <poolConfig class="com.meidusa.toolkit.common.poolable.PoolableObjectPool"> <property name="maxActive">500</property> <property name="maxIdle">500</property> <property name="minIdle">1</property> <property name="minEvictableIdleTimeMillis">600000</property> <property name="timeBetweenEvictionRunsMillis">600000</property> <property name="testOnBorrow">true</property> <property name="testOnReturn">true</property> <property name="testWhileIdle">true</property> </poolConfig> </dbServer>
- ③ MYSQL 集羣節點配置
<!-- 192.168.44.161 Master節點 --> <dbServer name="master_server1" parent="abstractServer"> <factoryConfig> <!-- mysql ip --> <property name="ipAddress">192.168.44.161</property> </factoryConfig> </dbServer> <!-- 192.168.44.153 Slave從節點 --> <dbServer name="slave_server2" parent="abstractServer"> <factoryConfig> <!-- mysql ip --> <property name="ipAddress">192.168.44.153</property> </factoryConfig> </dbServer> <!-- 192.168.44.154 Slave從節點 --> <dbServer name="slave_server3" parent="abstractServer"> <factoryConfig> <!-- mysql ip --> <property name="ipAddress">192.168.44.154</property> </factoryConfig> </dbServer>
- ④ MYSQL 讀寫數據庫鏈接池配置
<!-- 寫數據庫鏈接池 --> <dbServer name="masterPool" virtual="true"> <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool"> <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA--> <property name="loadbalance">1</property> <!-- Separated by commas,such as: server1,server2,server1 --> <property name="poolNames">master_server1</property> </poolConfig> </dbServer> <!--讀數據庫鏈接池 --> <dbServer name="slavePool" virtual="true"> <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool"> <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA--> <property name="loadbalance">1</property> <!-- Separated by commas,such as: server1,server2,server1 --> <property name="poolNames">slave_server2,slave_server3</property> </poolConfig> </dbServer>
-
Amoeba 基本信息/讀寫分離配置
- ① 編輯amoeba.xml
#編輯命令 vim /opt/module/amoeba-mysql-3.0.5-RC/conf/amoeba.xml
- ② Amoeba基本鏈接信息配置
<proxy> <!-- service class must implements com.meidusa.amoeba.service.Service --> <service name="Amoeba for Mysql" class="com.meidusa.amoeba.mysql.server.MySQLService"> <!-- port --> <property name="port">8066</property> <!-- bind ipAddress --> <property name="ipAddress">192.168.44.162</property> <property name="connectionFactory"> <bean class="com.meidusa.amoeba.mysql.net.MysqlClientConnectionFactory"> <property name="sendBufferSize">128</property> <property name="receiveBufferSize">64</property> </bean> </property> <property name="authenticateProvider"> <bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator"> <!-- 鏈接Amoeba的賬戶 密碼 --> <property name="user">amoeba</property> <property name="password">amoeba</property> <property name="filter"> <bean class="com.meidusa.toolkit.net.authenticate.server.IPAccessController"> <property name="ipFile">${amoeba.home}/conf/access_list.conf</property> </bean> </property> </bean> </property> </service> <runtime class="com.meidusa.amoeba.mysql.context.MysqlRuntimeContext"> <property name="executeThreadSize">128</property> <property name="statementCacheSize">500</property> <property name="serverCharset">utf8</property> <property name="queryTimeout">60</property> </runtime> </proxy>
- ③ Amoeba讀寫分離配置
<!-- 讀寫分離配置--> <queryRouter class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter"> <property name="ruleLoader"> <bean class="com.meidusa.amoeba.route.TableRuleFileLoader"> <property name="ruleFile">${amoeba.home}/conf/rule.xml</property> <property name="functionFile">${amoeba.home}/conf/ruleFunctionMap.xml</property> </bean> </property> <property name="sqlFunctionFile">${amoeba.home}/conf/functionMap.xml</property> <property name="LRUMapSize">1500</property> <!-- 配置讀寫分離 MYSQL鏈接池 --> <property name="defaultPool">masterPool</property> <property name="writePool">masterPool</property> <property name="readPool">slavePool</property> <property name="needParse">true</property> </queryRouter>
-
Amoeba JVM配置
#編輯命令 vim /opt/module/amoeba-mysql-3.0.5-RC/jvm.properties #修改-Xss196k 爲512k JVM_OPTIONS="-server -Xms256m -Xmx1024m -Xss512k -XX:PermSize=16m -XX:MaxPermSize=96m"
- 在MYSQL集羣節點上爲Amoeba配置授權信息
#創建用戶 GRANT ALL ON *.* TO 'amoeba'@'192.168.44.162' IDENTIFIED BY 'amoeba'; #刷新配置 flush privileges;
- Amoeba 啓動
#啓動方式一 nohup bash -x /opt/module/amoeba-mysql-3.0.5-RC/bin/benchmark #啓動方式二 #切換目錄 cd /opt/module/amoeba-mysql-3.0.5-RC/bin/ #啓動 ./launcher start #查看進程 ps -ef|grep amoeba
- Amoeba 讀寫分離測試
- ① 鏈接Amoeba
#鏈接Amoeba服務 mysql -h 192.168.44.162 -u amoeba -pamoeba -P 8066
- ② 測試寫操作
- ③ 測試讀操作
- 到此,Amoeba讀寫分離配置完成。
- ① 鏈接Amoeba
-