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,主库写压力大,复制很可能延时
解决方法:
-
半同步复制---解决数据丢失的问题
-
并行复制----解决从库复制延迟的问题