单台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 |
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
yum -y install ntp;
systemctl start ntpd
ntpdate 192.168.0.10
crontab -e
#每隔30分钟同步一次时间
*/30 * * * * ntpdate 192.168.0.10
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;
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
主服务器创建test数据
create database test;
从服务器查看数据库
show databses;
Amoeba(变形虫)项目开源框架于 2008 年发布了一款 Amoeba for MySQL 软件
这个软件致力于 MySQL 的分布式数据库前端代理层,它主要为应用层访问 MySQL 时充当 SQL 路由,并具有负载均衡、高可用性、SQL 过滤、读写分离、可路由相关到目标数据库、可并发请求多台数据库
通过 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
在主从服务器上都开启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>
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>
/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;
① 查看packet
允许最大值
mysql>show global variables like 'max_allowed_packet';
② 设置 packet
最大值
mysql> set global max_allowed_packet=1024*1024*16;
变形虫报错问题,客户端无法获取数据库信息
① 检查MySQL版本
5.6
和5.7
的他们存储用户名的数据库名不同
5.6
为test 5.7
为mysql
② 检查变形虫配置文件
vim dbServers.xml
#寻找23行
<property name="schema">mysql</property>