mysql的主从复制和读写分离
主从复制的模式
1、mysql的默认模式
异步模式,主库会更新完事务之后会立刻把结束返回给从服务器,并不关系从库是否收到,以及从库是否处理成功
网络问题可能没有同步,或者是其他因素的影响导致同步失败
特点:快 效率高
2、全同步模式
主库在更新完事务之后,立即把结果返回到从库,所有库执行完毕之后才能继续下一个同步,安全,性能收到影响
3、半同步复制
介乎于异步和全同步之间,主库更新完事务之后,也是同步到从库,同步完成之后又有一个等待时间
等待时间是一个tcp/ip的往返时间
5毫秒左右。
即在一定程度上保证了效率,也在一定程度上保证了数据的完整性
架构模式:高可用架构一般都是奇数台,一主两从、两主三从
主从复制的模式
主可以复制到从
从不可以复制到主
主主模式:都是主的情况下,都可以互相复制
主从复制的延迟大怎么解决
1、网络问题、防火墙的原因
2、硬件设备问题,cpu内存和磁盘出了问题
3、配置文件写错了。
配置文件当中进行设置的方式提高数据的安全性
数据库的存储引擎要是innodb:配置之前要先看一线配置文件设置是不是innodb
双一设置:
innodb_flush_log_at_trx_commit=1
每次提交都会刷新事物日志,确保事务的持久性,但是会影响性能
sync_binlog=1
每次提交事务,将二进制日志和内容保存到磁盘,确保日志的持久性,提高了安全性,
性能化设置
sync_binlog=10
最多提交几次事务会进行磁盘刷新。日志内容保存到磁盘
innodb_flush_log_at_trx_commit=2
每次更新都保存在内存中,不进行刷新。
innodb_buffer_pool_size=60m
控制innodb缓冲池的大小,增大可以提高数据库的性能,但是占用的是系统内存,配置的时候要注意合理化时间
主从复制如何实现:
实现是基于mysql的二进制日志,根据主库的二进制文件的标志位,实现主和从的同步
主从服务器之间,服务器的时间要同步。
架构:
三台服务器
一主两从
安装软件
查看时间 如果时间不同步先同步时间
date
ntpdate ntp.aliyun.com
修改配置文件
log-slave-updates=true
允许从服务器复制二进制日志,从而实现数据复制和同步
修改完主后重启配置文件
进入数据库
设置连接 密码 赋权
mysql> CREATE USER 'myslave'@'20.0.0.%' IDENTIFIED WITH mysql_native_password BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'20.0.0.%';
FLUSH PRIVILEGES;
从服务器
添加配置文件
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
relay_log_recovery=1
relay-log=relay-log-bin
从服务器获取二进制日志的开头,开启从库的二进制日志
relay-log-index=slave-relay-bin.index
二进制日志的索引文件的名称
relay——log_recovery=1
配置从服务器在启动时
配置完后也重启
从二
修改配置文件和从一基本一样 修改完重启
从一从二进入数据库
change master to master_host='20.0.0.40',master_user='myslave',master_password='123456',master_log_file='master-bin.000002 ',master_log_pos=2901;
master这一段 和857
start
查看这两个为yes即是成功
出现no即查看配置文件
Slave_lO_Running:yes
从库和主机的读写通信是否正常 出现no即查看配置文件
slave_SQL_Running:yes
检查从库的状态进程是否在正常运行
主从都要做这个配置
报错后重启一下
没用就重置
然后重新配置一下
读写分离
主从架构当中,主库负责写,从库负责读
读写分离 主库只写 从库只读
读写分离的方式
1、代码 开发人员纯靠代码完成,设计到数据库的二次开发,性能好,不需要额外的硬件设备
2、中间层代理,代理服务器。基于客户端和主从架构之间有一个代理服务器收到客户端的请求之后 通过客户端的sql语句来进行判断,读转到从,写转到主
Amoeba:读写分离最常见的客户代理软件,计算代码开发的一个软件
添加两台试验机
一台代理服务器安装 jdk1.6环境 Amoeba
一台客户端
实验
先安装Java环境
移动位置
修改全局配置文件 profile
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
修改完刷新一下
解包
赋权
验证成功
主库创建用户
CREATE USER 'amoeba'@'20.0.0.%' IDENTIFIED WITH mysql_native_password BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'amoeba'@'20.0.0.%';
GRANT ALL PRIVILEGES ON *.* TO 'amoeba'@'20.0.0.%';
flush privileges;
两个从库 输入赋权语句 并刷新
代理服务器 修改配置文件
修改主配置文件
删掉两个注释 确定库名 和主从
修改配置文件
23行 下面添加
27行
修改
46 修改ip地址 修改主的ip地址
53添加从 需要复制
66行
验证 后台运行
查看端口
客户机安装
修改主的配置文件 和从的 将日志打开 然后重启服务
客户机
主从 查看日志
客户机 创建表
在主上查表