集群、主从复制、读写分离
Mysql-集群、主从复制、读写分离
从库备份主库,读写分离后,从库可以读,主库可以写和读。
单击mysql做不到:高可用、高并发、海量数据(5千万)
主从复制,读写分离原理:主库中事务提交后,写入到 bin log 中,从库I/O读取bin log日志到从库日志relay日志,然后从relay日志中将数据放入从库中。
从库备份主库。mysql中做配置,从主库的一定的位置开始复制。
主从复制mysql配置:
主服务器配置
1.修改my.cnf文件
1 | #启用二进制日志 |
2.重启mysql服务
1 | systemctl restart mysqld |
3.主机给从机授权备份
1 | GRANT REPLICATION SLAVE ON *.* TO 'root'@'%' identified by 'root'; |
4.刷新权限
1 | FLUSH PRIVILEGES; |
5.查询mater的状态
1 | mysql> show master status; |
主从备份: mysqldump
从服务器配置
1.修改my.cnf文件
1 | [mysqld] |
2.重启并登录到mysql配置从服务器
1 | show slave status \G; |
3.启动从服务器复制功能
1 | start slave; |
4.检查从服务器复制功能状态
1 | show slave status \G; |
测试:
向主机插入数据,看从机是否有数据。
1 | # 插入失败时解决方案: |
主从延时
因为SQLThread和IOThread是默认单线程,当主机的tps(每秒事务处理数)高于从机的Thread所能承受范围,则会出现从机复制延时
解决:将thread改成多线程模式 MySQL5.6改表,MySQL5.7改GTID
网络延时
解决:主和从放在一个网内
IO延时
解决 :slave server硬件升级
解决方案: 利用分库分表中间件 Mycat、 sharding JDBC强制读取主库
读写分离
一个库对外工作,性能限制在一个库。多个库对外工作,增加数据库负载能力。
主从集群中,让主库负责写和部分读,从库负责读。即读写分离。
Mysql-Proxy
代理。负责路由SQL到Master或Slave
安装
1 | #下载 |
配置
创建mysql-proxy.cnf文件
1 | [mysql-proxy] |
修改mysql-proxy.cnf文件的权限
1 | chmod 660 mysql-proxy.cnf #可读写 |
修改rw-splitting.lua
1 | 40 min_idle_connections = 1, |
Mysql-Ploxy启动域测试
1 | ./mysql-proxy --defaults-file=mysql-proxy.cnf配置文件的地址 |
连接Mysql Proxy机器
1 | mysql -uroot -p123456 -h192.168.56.102 -P4040; #注: 关闭防火墙 |