1.用户在主服务器执行一些写的操作后,会记录到主服务器的二进制日志(Binary log)中
2.然后从数据库开启IO线程,读取主服务器的二进制日志内的数据,同步复制到自己的中继日志(Relay log)中,中继日志在自己的缓存中
3.从服务器SQL线程读取缓存当中的中继日志,再把里面的事件重放到自己的服务器,实现重写操作
4.完成从服务器和主服务器操作一致
Master 服务器 :192.168.253.22
Slave1 服务器 :192.168.253.33
Slave2 服务器 :192.168.253.44
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
安装相应软件
yum -y install ntp
时间同步设置
末行添加
server 127.127.253.0 # 设置本地为时钟源,网段为本机的
fudge 127.127.253.0 stratum 10 # 设置时间层级,范围15内即可
service ntpd start # 开启服务
mysql设置
log-bin=master-bin # 开启二进制日志
binlog_format = MIXED
log-slave-updates=tru # 允许从服务器更新二进制日志
systemctl restart mysqld.service
GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.253.%' IDENTIFIED BY '123456'; # 给从服务器授权
FLUSH PRIVILEGES;
安装相应软件
yum -y install ntp ntpdate
时间同步
service ntpd start # 开启服务
/usr/sbin/ntpdate 192.168.253.22 # 和主服务器进行时间同步
*/30 * * * * /usr/sbin/ntpdate 192.168.253.22 # 设置定时任务
mysql设置
server-id = 33 # id与master不同,和另一台也不能相同
relay-log=relay-log-bin # 开启中继日志,从主服务器上同步日志文件记录到本地
relay-log-index=slave-relay-bin.index # 定义中继日志文件的位置和名称
systemctl restart mysqld.service
mysql> CHANGE master to
-> master_host='192.168.253.22',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=604; # 配置同步,两个值和前面查询的需要一致
start slave; # 启动同步,如果报错了输入:reset slave;
show slave status\G # 查看 Slave状态
Slave_IO_Running: Yes # 负责与主机的IO通信
Slave_SQL_Running: Yes # 负责自己的slave mysql进程
主服务器添加新的库
create database ccd;
读写分离就是只在主服务器上写,只在从服务器上读。基本的原理是让主数据库处理事务性查询,而从数据库处理select查询。数据库复制被用来把主数据库上事务性查询导致的变更同步到集群中的从数据库。
基于程序代码内部实现
Master 服务器 :192.168.253.22
Slave1 服务器 :192.168.253.33
Slave2 服务器 :192.168.253.44
客户端 服务器 :192.168.253.55
Amoeba 服务器:192.168.253.66
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
安装环境
cd /opt
cp jdk-6u14-linux-x64.bin /usr/local
cd /usr/local
chmod +x jdk-6u14-linux-x64.bin
./jdk-6u14-linux-x64.bin
yes确定
回车
mv jdk1.6.0_14/ /usr/local/jdk1.6
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
安装软件
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 # 表示安装成功
配置服务
# 修改以下行数
30 <property name="user">amoeba</property>
32 <property name="password">123456</property>
115 <property name="defaultPool">master</property>
117 去掉注释
118 <property name="writePool">master</property>
119 <property name="readPool">slaves</property>
# 注释,作用:默认进入ccc库,以防mysql中没有ccc库会报错
23 <!-- <property name="schema">test</property> -->
# 修改
26 <property name="user">ccd</property>
# 取消注释并修改
28 mysql password # 此行删除
29 <property name="password">123456</property>
30
# 设置主服务器名为master
45 <dbServer name="master" parent="abstractServer">
# 设置主服务器地址
48 <propertyname="ipAddress">192.168.253.22</property>
# 设置从服务器名
52 <dbServer name="slave1" parent="abstractServer">
# 设置从服务器1的地址
55 <property name="ipAddress">192.168.253.33</property>
# 复制从服务器1的名和地址,改为2的
58 <dbServer name="slave2" parent="abstractServer">
59 <factoryConfig>
60 <!-- mysql ip -->
61 <property name="ipAddress">192.168.253.44</property>
62 </factoryConfig>
63 </dbServer>
# 修改
65 <dbServer name="slaves" virtual="true">
# 修改
71 <property name="poolNames">slave1,slave2</property>
开放权限给Amoeba
grant all on *.* to ccd@'192.168.253.%' identified by '123456';
开放权限给Amoeba
grant all on *.* to ccd@'192.168.253.%' identified by '123456';
客户端服务器
mysql -u amoeba -p123456 -h 192.168.253.66 -P8066
insert into cccc values(1);
服务器添加数据
mysql> stop slave; # 关闭同步
Query OK, 0 rows affected (0.02 sec)
mysql> insert into cccc values(2); # 新增
mysql> insert into cccc values(3); # 新增
Query OK, 1 row affected (0.06 sec)
mysql> insert into cccc values(4); # 新增
Query OK, 1 row affected (0.06 sec)