天天看点

数据库-主从复制;laravel-读写分离

作者:一只老的代码狗

为什么数据库要读写分离

在互联网的系统应用是一个读多写少的应用,比如电商系统中,商品浏览的次数是比下单要多的。数据库承载压力大,主要是由这些【读】的请求造成的,我们可以把【读】的操作和【写】的操作分开,让所有【读】的请求落到专门负责【读】的数据库上,所有【写】的操作落到专门负责【写】的数据库上,【写】库的数据同步到【读】库上,这样保证所有的数据修改都可以在读取时,从【读】库获得。

读写分离原理

读写分离就是在【主】服务器上修改,数据会同步到【从】服务器,【从】服务器只能提供读取数据,不能写入,实现备份的同时也实现了数据库性能的优化,以及提升了服务器安全。

主从复制原理

(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通

数据库-主从复制;laravel-读写分离

192.168.1.162 ping 192.168.1.163

数据库-主从复制;laravel-读写分离

192.168.1.163 ping 192.168.1.162

3.2.防火墙开放3306端口

我这边使用的防火墙是iptable

vi /etc/sysconfig/iptables

数据库-主从复制;laravel-读写分离

主服务器开放3306端口

4.主(Master)数据库配置

vi /etc/my.cnf

数据库-主从复制;laravel-读写分离

主数据库配置内容

配置项解读:

server-id=1 #主服务器唯一Id[必填]

log-bin=自己mysql的路径/mysqlbin #启用二进制日志[必填]

read-only=0 #主机,读写都可以

#binlog-ignore-db=mysql #设置不要复制的数据库[可选]

binlog-do-db=test #设置需要复制的数据库[可选](输数据库名字)

重启数据库 service mysqld restart

5.从库配置

数据库-主从复制;laravel-读写分离

从库配置

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

数据库-主从复制;laravel-读写分离

状态

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

数据库-主从复制;laravel-读写分离

正确启动情况

有错误会有相应的错误提示

数据库-主从复制;laravel-读写分离

错误提示

解决方案:百度或者留言

注意:

1.如果要修改配置

【从】库要执行以下操作

mysql>stop slave; //停止

mysql>reset slave; //复位

mysql>start slave; //开启

2.如果【主】服务器挂了,【从】服务器必须重启,重新启动同步!

到此,已完美结束!

有问题欢迎留言!有言必回!