为什么数据库要读写分离
在互联网的系统应用是一个读多写少的应用,比如电商系统中,商品浏览的次数是比下单要多的。数据库承载压力大,主要是由这些【读】的请求造成的,我们可以把【读】的操作和【写】的操作分开,让所有【读】的请求落到专门负责【读】的数据库上,所有【写】的操作落到专门负责【写】的数据库上,【写】库的数据同步到【读】库上,这样保证所有的数据修改都可以在读取时,从【读】库获得。
读写分离原理
读写分离就是在【主】服务器上修改,数据会同步到【从】服务器,【从】服务器只能提供读取数据,不能写入,实现备份的同时也实现了数据库性能的优化,以及提升了服务器安全。
主从复制原理
(1) Master的更新事件(update、insert、delete)会按照顺序写入bin-log中。当Slave连接到Master的后,Master机器会为Slave开启binlog dump线程,该线程会去读取bin-log日志
(2) Slave连接到Master后,Slave库有一个I/O线程 通过请求binlog dump thread读取bin-log日志,然后写入从库的relay log日志中。
(3) Slave还有一个 SQL线程,实时监控 relay-log日志内容是否有更新,解析文件中的SQL语句,在Slave数据库中去执行。
mysql主从复制配置
1.配置环境
操作系统:两台CentOS 7.2的Linux系统
数据库版本:MySQL 5.7
主服务器IP:192.168.1.162(主)
从服务器IP:192.168.1.163(从)
2.安装数据库
自行安装,不懂的可以留言!
3.服务器检查
3.1两台服务器之间可以相互ping通
192.168.1.162 ping 192.168.1.163
192.168.1.163 ping 192.168.1.162
3.2.防火墙开放3306端口
我这边使用的防火墙是iptable
vi /etc/sysconfig/iptables
主服务器开放3306端口
4.主(Master)数据库配置
vi /etc/my.cnf
主数据库配置内容
配置项解读:
server-id=1 #主服务器唯一Id[必填]
log-bin=自己mysql的路径/mysqlbin #启用二进制日志[必填]
read-only=0 #主机,读写都可以
#binlog-ignore-db=mysql #设置不要复制的数据库[可选]
binlog-do-db=test #设置需要复制的数据库[可选](输数据库名字)
重启数据库 service mysqld restart
5.从库配置
从库配置
server-id 不能一样,必须唯一
重启数据库 service mysqld restart
6.【主】库建立账户并授权
6.1、在主机上建立账户并授权slave
创建用户zhangsan,密码123456
CREATE USER 'zhangsan'@'%' IDENTIFIED BY '123456';
授权slave
GRANT REPLICATION SLAVE ON *.* TO 'zhangsan'@'192.168.1.163' IDENTIFIED BY '123456';
更新权限
flush privileges;
查看状态
show master status
状态
6.2、【从】机上配置需要复制的【主】机
CHANGE MASTER TO MASTER_HOST='192.168.1.162', MASTER_PORT=3306, MASTER_USER='zhangsan', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysqlbin.000013', MASTER_LOG_POS=1866;
启动【从】服务器复制功能
start slave;
查看启动情况
show slave status\G
正确启动情况
有错误会有相应的错误提示
错误提示
解决方案:百度或者留言
注意:
1.如果要修改配置
【从】库要执行以下操作
mysql>stop slave; //停止
mysql>reset slave; //复位
mysql>start slave; //开启
2.如果【主】服务器挂了,【从】服务器必须重启,重新启动同步!
到此,已完美结束!
有问题欢迎留言!有言必回!