mysql 主从同步配置

主从复制是指将主数据库的DDL和DML操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。

MySQL支持一台主库同时向多台从库进行复制,从库同时也可以作为其他从服务器的主库,实现链状复制。

MySQL复制的有点主要包含以下三个方面:

1.主库出现问题,可以快速切换到从库提供服务。

2.实现读写分离,降低主库的访问压力。

3.可以在从库中执行备份,以避免备份期间影响主库服务。

原理:

 

步骤:

1.Master主库在事务提交时,会把数据变更记录在二进制日志文件Binlog中。

2.从库读取主库的二进制日志文件Binlog,写入到从库的中继日志Relay Log.

3.slave重做中继日志中的事件,将改变反映它自己的数据。

搭建:

服务器准备

 

 

主库配置

1. 修改配置文件my.cnf

server-id=1
read-only=0

 

 

 

2. 重启mysql

3.登录mysql,创建远程连接账号,并赋予主从复制权限

# 创建用户user001并设置密码
create user 'user001'@'%' identified with mysql_native_password by  'kykzXa58fZTaH734';
# 为user001用户分配主从复制权限
grant replication slave on *.* to 'user001'@'%';

 

 4. 查看二进制日志坐标

show master status;

字段含义说明:
file:从哪个日志文件开始推送日志文件
position:从哪个位置开始推送日志
binlog_ignore_db:指定不需要同步的数据库

从库配置

1. 修改配置文件my.cnf

server-id=2
read-only=1

 2. 重启mysql

3. 登录mysql,设置主库配置

change master to master_host='192.168.200.200',master_port=3306,master_user='user001',master_password='密码',master_log_file='mysql-bin.000004',master_log_pos=663;

master_host                主服务器的IP地址(内网地址)

master_port                 主服务器的PORT端口

master_log_file           和主服务器show master status中的File字段值相同

master_log_pos          和主服务器show master status中的Position字段值相同

4.启动

mysql>start slave;                #stop slave;停止服务,出错时先停止,再重新配置
mysql>show slave status\G;        #查看SLAVE状态,\G结果纵向显示。必须大写,这个命令无法再sqlyog中使用

如果出现问题:error connecting to master 'user001'@'192.168.200.200:3306' - retry-time: 60 retries: 86400 message: Access denied for user 'user001'@'192.168.200.200' (using password: YES)

slave_io_running:表示同步日志的io进程

slave_sql_running:表示执行同步sql命令的进程

这个2个必须为yes,否则表示配置失败(如果配置失败请检查3306端口是否有对外开放)

 

测试: 主服务器创建数据表添加数据 看从数据库是否同步

 

 

如何解决mysql主从复制带来的数据延迟问题?

 

在写入数据库的同时写缓存,数据先从缓存读再读数据库
插入后,更新缓存服务如redis,其他节点需先读缓存中的数据。然后在写入从mysql。

 

mysql主从复制存在的问题:

  • 主库宕机后,数据可能丢失

  • 从库只有一个sql Thread,主库写压力大,复制很可能延时

 

解决方法:

  • 半同步复制---解决数据丢失的问题

  • 并行复制----解决从库复制延迟的问题

 

posted @ 2018-09-27 11:18  py卡卡  阅读(138)  评论(0编辑  收藏  举报