mysql主从复制

目录

一、主从复制和读写分离

1、什么是读写分离?

2、为什么要读写分离呢?

3、主从复制的工作过程

4、MySQL 读写分离原理

二、搭建主从复制和读写分离

主服务器时间同步配置

从服务器时间同步配置

主服务器文件配置

从服务器的文件配置

Amoeba服务器配置

amoeba服务器配置amoeba服务


一、主从复制和读写分离

1、什么是读写分离?

读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库

2、为什么要读写分离呢?

因为数据库的“写”操作是比较耗时的
但是数据库的“读”操作相对迅速
所以读写分离,解决的是,数据库的写入,影响了查询的效率

3、主从复制的工作过程


 Master节点将数据的改变记录成二进制日志(bin log),当Master上的数据发生改变时,则将其改变写入二进制日志中
Slave节点会在一定时间间隔内对Master的二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/O线程请求 Master的二进制事件
同时Master节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至Slave节点本地的中继日志(Relay log)中,Slave节点将启动SQL线程从中继日志中读取二进制日志,在本地重放,即解析成 sql 语句逐一执行,使得其数据和 Master节点的保持一致,最后I/O线程和SQL线程将进入睡眠状态,等待下一次被唤醒

注:
中继日志通常会位于 OS 缓存中,所以中继日志的开销很小
复制过程有一个很重要的限制,即复制在 Slave上是串行化的,也就是说 Master上的并行更新操作不能在 Slave上并行操作

4、MySQL 读写分离原理

读写分离就是只在主服务器上写,只在从服务器上读。基本的原理是让主数据库处理事务性操作,而从数据库处理 select 查询。数据库复制被用来把主数据库上事务性操作导致的变更同步到集群中的从数据库
 

二、搭建主从复制和读写分离

主服务器时间同步配置

yum -y install ntp
 
vim /etc/ntp.conf
末行添加
server 127.127.255.0							#设置本地是时钟源,注意修改网段
fudge 127.127.255.0 stratum 8					#设置时间层级为8(限制在15内)
 
systemctl start ntpd

从服务器时间同步配置

yum -y install ntp ntpdate
 
systemctl start ntpd
/usr/sbin/ntpdate 192.168.255.180			#进行时间同步,指向Master服务器IP
 
crontab -e
*/30 * * * * /usr/sbin/ntpdate 192.168.255.180

主服务器文件配置

vim /etc/my.cnf
server_id = 1
log_bin=master-bin							#添加,主服务器开启二进制日志
log_slave=updates=true						#添加,允许从服务器更新二进制日志
 
systemctl restart mysqld
 
mysql -u root -p123456
#给从服务器授权,允许其复制所有数据库的所有表(第一个账户)
grant replication slave on *.* to 'myslave'@'192.168.255.%' identified by '123456';			
 
flush privileges;
 
查看master数据库状态
show master status\G

从服务器的文件配置

vim /etc/my.cnf
server-id = 2						#修改,注意id与Master的不同,两个Slave的id也要不同
relay-log=relay-log-bin				#添加,开启中继日志,从主服务器上同步日志文件记录到本地
relay-log-index=slave-relay-bin.index		#添加,定义中继日志文件的位置和名称
 
systemctl restart mysqld
 
mysql -u root -p
CHANGE master to master_host='192.168.255.180', master_user='myslave', master_password ='123456', master_log_file='master-bin.000001',master_log_pos=604;
#配置同步,注意 master_log_file 和 master_log_pos 的值要与Master查询的一致,这里的是例子,每个人的都不一样
 
start slave;						#启动同步,如有报错执行 reset slave;
show slave status\G					#查看 Slave 状态
 
确保 IO 和 SQL 线程都是 Yes,代表同步正常。
Slave_IO_Running: Yes				#负责与主机的io通信
Slave_SQL_Running: Yes				#负责自己的slave mysql进程
 
 
#一般 Slave_IO_Running: No 的可能性:
1、网络不通
2、my.cnf配置有问题
3、密码、file文件名、pos偏移量不对
4、防火墙没有关闭

Amoeba服务器配置

将jdk-6u14-linux-x64.bin 和 amoeba-mysql-binary-2.2.0.tar.gz.0 上传到/opt目录下。
 
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,按enter
 
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
 
#之前如果有环境变量需要删掉
source /etc/profile
java -version
 
##安装 Amoeba软件##
mkdir /usr/local/amoeba
tar zxvf /opt/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 说明安装成功

amoeba服务器配置amoeba服务

cd /usr/local/amoeba/conf/
 
cp amoeba.xml{,.bak}
vim amoeba.xml									#修改amoeba配置文件
 
30修改
<property name="user">amoeba</property>
 
32修改
<property name="password">123.com</property>
 
115修改
<property name="defaultPool">master</property>
 
117去掉注释–
<property name="writePool">master</property>
<property name="readPool">slaves</property>
 
 
cp dbServers.xml{,.bak}
vim dbServers.xml								#修改数据库配置文件
 
23修改
<!--<property name="schema">mysql</property> -->
 
26修改
<!-- mysql user -->
<property name="user">test</property>
 
28-30去掉注释(表头mysql password 注释别去)
<property name="password">123.com</property>
 
45修改,设置主服务器的名Master
<dbServer name="master"  parent="abstractServer">
 
48修改,设置主服务器的地址
<property name="ipAddress">192.168.255.180</property>
 
52修改,设置从服务器的名slave1
<dbServer name="slave1"  parent="abstractServer">
 
55修改,设置从服务器1的地址
<property name="ipAddress">192.168.255.141</property>
 
58复制上面6行粘贴,设置从服务器2的名slave2和地址
<dbServer name="slave2"  parent="abstractServer">
<property name="ipAddress">192.168.255.200</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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值