MySQL 運維 - 主從復制與讀寫分離
- 一、概述
- 二、應用場景
- 三、案例實施
- 1. 建立時間同步環境
- 1.1 主服務器作為時間服務器
- 1.2 在從服務器上進行時間同步
- 2.配置主服務器MySQL
- 3.配置從服務器
- 4.驗證復制效果
- 5.搭建讀寫分離
- 5.1 安裝Amoeba
- 5.2 配置Amoeba
- 6.測驗
- 四、排錯
- 1.ERROR 2006 (HY000): MySQL server has gone away
- 2.java.util.NoSuchElementException: Could not create a validated object, cause: ValidateObject failed
一、概述
單臺MySQL服務器無法滿足高可用和負載均衡,所以需要至少兩臺以上的MySQL服務器做主從復制以提高安全性和效率
二、應用場景
主服務器使用dump執行緒寫入二進制日志檔案,從服務器請求并通過I/O執行緒讀取主服務器的日志并存入自己的中繼服務器中,并通過SQL執行緒對主服務器更新的內容進行重讀操作

三、案例實施
| 主機名 | 主機 | 作業系統 | IP 地址 | 主要軟體 |
|---|---|---|---|---|
| CentOS 7-1 | Master | CentOS 7 | 192.168.0.10 | ntp 、 mysql-server |
| CentOS 7-2 | Amoeba | CentOS 7 | 192.168.0.20 | jdk6、amoeba |
| CentOS 7-3 | Slave1 | CentOS 7 | 192.168.0.30 | ntp 、ntpdate 、 mysql-server |
| CengOS 7-4 | Slave2 | CentOS 7 | 192.168.0.40 | ntp 、ntpdate 、mysql-server |
| CentOS 7-5 | 客戶端 | CentOS 7 | 192.168.0.50 | mysql-client |
1. 建立時間同步環境
1.1 主服務器作為時間服務器
yum -y install ntp;
#進入ntp組態檔
vim /etc/ntp.conf
server 192.168.0.10
fudge 192.168.0.10 stratum 8
systemctl start ntpd
#查看同步狀態
ntpq -p | ntpstat

1.2 在從服務器上進行時間同步
yum -y install ntp;
systemctl start ntpd
ntpdate 192.168.0.10

設定crontab定時同步
crontab -e
#每隔30分鐘同步一次時間
*/30 * * * * ntpdate 192.168.0.10
2.配置主服務器MySQL
vim /etc/my.cnf
[mysqld]
server-id = 1
#開啟二進制日志
log-bin=master-bin
#允許從服務器從主服務器更新日志
log-slave-updates=true
#重啟服務
systemctl restart mysqld
mysql -uroot -p
#給從服務器授權
grant replication slave on *.* to 'myslave'@'192.168.0.%' identified by '123456';
#重繪權限
flush privileges;
#查看狀態
show master status;
Position項記得保存下來

3.配置從服務器
vim /etc/my.cnf
[mysqld]
#ID要與Master不同,兩個Slave的id也要不同
server-id = 2
#開啟中繼日志,從主服務器上同步日志檔案記錄到本地
relay-log=relay-log-bin
#定義中繼日志檔案的位置和名稱
relay-log-index=slave-relay-bin.index
systemctl restart mysqld
mysql -uroot -p
#配置主服務器IP地址賬戶密碼和檔案
change master to master_host='192.168.0.10',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=602;
#啟用同步
start slave;
#查看狀態
show slave status\G

4.驗證復制效果
主服務器創建test資料
create database test;
從服務器查看資料庫
show databses;

5.搭建讀寫分離
Amoeba(變形蟲)專案開源框架于 2008 年發布了一款 Amoeba for MySQL 軟體
這個軟體致力于 MySQL 的分布式資料庫前端代理層,它主要為應用層訪問 MySQL 時充當 SQL 路由,并具有負載均衡、高可用性、SQL 過濾、讀寫分離、可路由相關到目標資料庫、可并發請求多臺資料庫
通過 Amoeba 能夠完成多資料源的高可用、負載均衡、資料切片的功能

5.1 安裝Amoeba
Amoeba 基于是 jdk1.5 開發的,所以官方推薦使用 jdk1.5 或 1.6 版本,高版本不建議使用
#安裝jdk1.6
cp jdk-6u14-linux-x64.bin /usr/local/
cd /usr/local/
chmod +x jdk-6u14-linux-x64.bin
./jdk-6u14-linux-x64.bin
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
#輸出定義Java的作業目錄
#輸出指定的java型別
#將java加入路徑環境變數
#輸出定義amoeba作業目錄
#加入路徑環境變數
source /etc/profile
#執行修改后的全域組態檔
java -version
#查看java版本資訊以檢查是否安裝成功
#下載Amoeba
wget -P /opt https://pilotfiber.dl.sourceforge.net/project/amoeba/Amoeba%20for%20mysql/2.2.x/amoeba-mysql-binary-2.2.0.tar.gz
cd /opt
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

5.2 配置Amoeba
在主從服務器上都開啟Amoeba的訪問權限
grant all on *.* to test@'192.168.0.%' identified by '123456';
修改Amoeba主組態檔
cd /usr/local/amoeba/conf/
cp amoeba.xml amoeba.xml.bak
vim amoeba.xml
#修改amoeba組態檔
#30行修改
<property name="user">amoeba</property>
#32行修改
<property name="password">123456</property>
#115行修改
<property name="defaultPool">master</property>
#117去掉注釋
<property name="writePool">master</property>
<property name="readPool">slaves</property>


修改dbServers.xml 檔案
cp dbServers.xml dbServers.xml.bak
vim dbServers.xml
#修改資料庫組態檔
#23行注釋掉
作用:默認進入test庫 以防mysql中沒有test庫時,會報錯
<property name="schema">mysql</property>
#26行修改
<property name="user">test</property>
#28-30行去掉注釋
<property name="password">123456</property>
#45行修改,設定主服務器的名Master
<dbServer name="master" parent="abstractServer">
#48行修改,設定主服務器的地址
<property name="ipAddress">192.168.0.10</property>
#52行修改,設定從服務器的名slave1
<dbServer name="slave1" parent="abstractServer">
#55行修改,設定從服務器1的地址
<property name="ipAddress">192.168.0.20<property>
#58行復制上面6行粘貼,設定從服務器2的名slave2和地址
<dbServer name="slave2" parent="abstractServer">
<property name="ipAddress">192.168.0.30</property>
#65行修改
<dbServer name="slaves" virtual="true">
#71修改
<property name="poolNames">slave1,slave2</property>
6.測驗
/usr/local/amoeba/bin/amoeba start&
#啟動Amoeba軟體,按ctrl+c 回傳
netstat -anpt | grep java
#查看8066埠是否開啟,默認埠為TCP 8066

客戶機安裝登錄工具
yum install -y mysql mysql-server
mysql -u amoeba -p123456 -h 192.168.0.40 -P8066
主服務器創建資料庫
create database bbs;
create table user(id int(10),name varchar(10));
insert into user values(1,'Chara'),(2,'Frisk');
客戶機查看資料庫
use bbs;
select * from user;

四、排錯
1.ERROR 2006 (HY000): MySQL server has gone away
① 查看packet允許最大值
mysql>show global variables like 'max_allowed_packet';
② 設定 packet 最大值
mysql> set global max_allowed_packet=1024*1024*16;
2.java.util.NoSuchElementException: Could not create a validated object, cause: ValidateObject failed
變形蟲報錯問題,客戶端無法獲取資料庫資訊
① 檢查MySQL版本
5.6和5.7的他們存盤用戶名的資料庫名不同
5.6為test 5.7為mysql
② 檢查變形蟲組態檔
vim dbServers.xml
#尋找23行
<property name="schema">mysql</property>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/279526.html
標籤:其他
