mysql
在企业应用中,成熟的业务通常数据量都比较大,单台mysql在安全性、高可用性和高并发方面都无法满足实际需求,配置多台主从数据库服务器实现读写分离能增加上述能力
主从复制原理
- 只在主服务器上写入,只在从服务器上读取
- 主数据库处理事务性查询,而从数据库处理select查询
- 数据库复制用于将事务性查询的变更同步到集群中的从数据库
mysql主从复制类型
- 基于语句的复制。从服务器执行主服务器执行过的一样的SQL语句,mysql默认采用此种复制,效率较高。
- 基于行的复制。仅把改变的内容复制过去,而不是把命令在从服务器再执行一遍。
- 混合类型的复制。默认先采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制。
读写分离原理
- 读写分离是让主服务器处理事务性操作(增删改查),从服务器处理读(select)操作
读写分离的方案
- 基于程序代码内部实现(在代码中根据 select、insert 进行路由分类,这类方法也是目前生产环境应用最广泛的。)
- 基于中间代理层实现(mysql-proxy、amoeba)
✋mysql主从复制-同步时间
先关闭主从的防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
主从服务器同步时间
主服务器地址;172.16.10.116/24
yum -y install ntp #ntp同步时钟网络协议
vim /etc/ntp.conf
server 127.127.10.0 #末行添加本地网段为时间源
fudge 127.127.10.0 stratum 8 #设置时间层级为8。
配置完开启服务ntpd
从服务器地址:172.16.10.119/24;172.16.10.115/24
yum install -y ntp ntpdate
systemctl start ntpd
service ntpd start
usr/sbin/ntpdate 172.16.10.116
主服务器mysql配置
GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'172.16.10.%' IDENTIFIEED BY 'abc123';
flush privileges;
show master status;
从服务器mysql配置
server-id = 2
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index#默认位置在usr/local/mysql/data
修改完重启
change master to master_host='172.16.10.116' , master_user='myslave',master_password='abc123',master_log_file='mysql-bin.000010',master_log_pos=154;
# 指定master服务器ip,用户名,密码,二进制文件名和偏移量(主的mysql show master status;)
start slave; #启动同步,如有报错执行 reset slave;
show slave status\G #查看 Slave 状态
//确保 IO 和 SQL 线程都是 Yes,代表同步正常。
Slave_IO_Running: Yes #负责与主机的io通信
Slave_SQL_Running: Yes #负责自己的slave mysql进程
这里修改过一次,文件名和偏移量不要对照前面的。
主从复制效果验证
mysql读写分离
amoeba地址:172.16.10.113
amoeba是基于jdk1.5 开发的,所以官方推荐使用 jdk1.5 或 1.6 版本,高版本不建议使用。
将所需安装包传到opt目录下
可执行文件复制到/usr/local/
赋予执行权限
./jdk-6u14-linux-x64.bin #执行
按空格到最后一行
按yes enter
重命名一下
执行全局配置文件,查看java版本
amoeba
创建并解压amoeba到/usr/local/amoeba
递归赋权755 ,开启amoeba
配置amoeba读写分离,slave负载均衡
在master、slave1、slave2 的mysql上开放权限给 amoeba 访问
30行修改
32行修改
115修改
117去掉注释,修改
23行注释掉,如果库中没有test会报错
26修改
28去掉注释,修改
45行,主服务器名master
48设置主服务器地址
52设置从服务器名slave1
55设置从服务器slave1地址
复制上面的模板,设置从服务器2 slave2
65修改
71修改
客户机验证
yum install -y mysql mysql-server
mysql -uamoeba -pabc123 -h 172.16.10.113 -P8066
在两台从服务器的一张表内添加不同的内容
客户机从两台从服务器上轮询查找内容