基于Atlas实现mysql读写分离(1)--主从同步

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011320740/article/details/78774836

什么是读写分离?为什么要用读写分离?

读写分离顾名思义就是读和写分开不同的数据库,分别有主库master和从库slave,master进行写操作,slave进行读操作;使用读写分离提高系统读写数据的性能,缓解数据库的压力,增加了机器的处理能力。

读写分离主从同步的数据库架构有很多种,比如一主一从,一主多从,环形...


该种一主一从,架构简便,和一主多从差不多,我以这个架构为例。


一般中小型互联网公司常用该种架构,一主二从已经是够用的了


这种架构呢,主从从方式,其中中间一台也就是热备作用不提供任何操作,一点master宕机立刻将该slave升为master


这种是环形架构,比较少用而且复杂,当然每个master都会衍生出多台slave,京东使用过


主从同步原理

主从同步原理:主数据库进行写数据时,同时会有bin-log也就是二进制文件进行记录,每次的修改更新记录的sql都会记录在此,说到这题外说点,该日志可以进行数据恢复,也就是删库也不用跑路啦,可以把该日志导出生成sql然后执行即可。主从同步也就是利用该原理,从库开启一个线程IO进行复制该主库的bin-log文件,然后再开启一个sql执行线程来执行该日志sql,这样就达到了主从同步的效果了。


从该图来看,主从的bin-log日志读写同步是异步的,如果在这环节上出现问题,也就是master数据已经写入到数据库,在日志发送中突然中断出现问题了,那么执行从库就失去了同步的效果了,可以采用方法有半同步,也就是master进行写数据的时候,等bin-log发送到从库成功后再进行实物提交,一旦发送失败则进行回滚,当然这种性能会比前面异步的低,这种方式在一主多从中,其中有一台从库是成功接收到主库的bin-log就算是成功,主库不再回滚


下面开始玩玩,以一主一从为例

准备了两台linux机

master:192.168.27.130

slave:192.168.27.129

linux下mysql的安装可以参考该篇文章

1.修改主数据库配置

打开/etc/my.cnf修改为如下内容

datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
#主从复制配置
innodb_flush_log_at_trx_commit=1
sync_binlog=1
#需要备份的数据库
binlog-do-db=test
#不需要备份的数据库
binlog-ignore-db=mysql

#启动二进制文件
log-bin=mysql-bin
log-slave-updates=1 #这个参数一定要加上,否则不会给更新的记录些到二进制文件 里

#服务器ID
server-id=1  
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
skip-grant-tables

注意:配置文件最下方这里的skip-grant-tables得加上,不然可能会报这么个错:

Access denied for user 'root'@'localhost' (using password:YES)



2.重启主数据库

 service mysqld restart

 mysql -u root -p 123进入数据库

 创建数据库test

 执行show master status显示master的信息。

说明:这里的master status 的信息在slave从库配置的时候需要用到,每次的修改position都会改变

3.修改slave从库配置

添加如下信息:

user=root
server-id=3
log-slave-updates=1

注意:一定要添加log-slave-updates=1,否则数据无法同步

4.重启从数据库

 service mysqld restart

 mysql -u root -p 123进入数据库

 输入如下信息:

change master to master_host='192.168.27.130'
    -> master_user='root'//主库用户名
    -> master_password='123'//主库密码
    -> master_port=3306//端口
    -> master_log_file='mysql-bin.000001'//主库show master status里的日志名
    ->  master_log_pos=154//主库show master status里的日志位置,该位置每次修改主库都会变化
    -> master_connect_retry=10
注意:master_log_pos=154//主库show master status里的日志位置,该位置每次修改主库都会变化

启动slave从库

start slave;
显示同步信息状态:

show slave status \G;

说明:当标红两处为YES是才算主从同步成功

如果配置失败可查看以下位置,查看错误原因:



5.测试

主库创建表user;这时候查看从库表信息,发现已经同步到


至此也就算是主从同步成功了!






猜你喜欢

转载自blog.csdn.net/u011320740/article/details/78774836