mysql主从复制实践
网站首页 文章专栏 mysql主从复制实践
mysql主从复制实践
编辑时间:2019-05-27 09:50 作者:毛毛小妖 浏览量:51 评论数:1

随着应用的数据越来越多,mysql的压力也越来越大。所以就有了配置主从数据库的想法,主库用来写入数据,从库用来读取数据,大大减小了主库的压力。

数据库高可用架构分为

主从:一主一从,一主多从,一主从从

双主

一、主从复制的原理

主从复制涉及到三个线程:主库生成一个 log dump 线程,用来给从库 i/o线程传binlog;从库生成两个线程,一个I/O线程,一个SQL线程;i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;

二、可能出现的问题及解决方案

mysql主从复制存在的问题:

  • 主库宕机后,数据可能丢失
  • 从库只有一个sql Thread,主库写压力大,复制很可能延时

解决方法:

  • 半同步复制---解决数据丢失的问题
  • 并行复制----解决从库复制延迟的问题

半同步复制:

5.5集成到mysql,以插件的形式存在,需要单独安装
确保事务提交后binlog至少传输到一个从库
不保证从库应用完这个事务的binlog
性能有一定的降低,响应时间会更长
网络异常或从库宕机,卡主主库,直到超时或从库恢复

并行复制:

社区版5.6中新增
并行是指从库多线程apply binlog
库级别并行应用binlog,同一个库数据更改还是串行的(5.7版并行复制基于事务组)

设置sql线程数为10

set global slave_parallel_workers=10;

三、举个栗子

实践1:一主多从复制实战

1、环境准备

centos 系统服务器2台、一台用户做Mysql 主服务器,1台用于做Mysql 从服务器,配置好yum 源、 防火墙关闭、关闭selinux、各节点时钟服务同步。

机器名称 IP配置 服务角色 备注
master 192.168.179.128 主数据库 二进制日志
slave1 192.168.179.129 从数据库 中继日志

2、master节点配置

① 修改mysql主配置文件

vim /etc/my.cnf 

server-id=1             #配置server-id,让主服务器有唯一ID号
log-bin=mysql-bin   #打开Mysql日志,日志格式为二进制
skip-name-resolve   #关闭名称解析,(非必须)

启动mysql:systemctl start mariadb

② 创建并授权slave mysql 用的复制帐号

mysql> CREATE USER 'slave'@'192.168.179.129' IDENTIFIED BY 'slave';#创建用户
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.179.129';#分配权限
mysql>flush privileges;   #刷新权限
分析:在Master的数据库中建立一个备份帐户:每个slave使用标准的MySQL用户名和密码连接master。进行复制操作的用户会授予REPLICATION SLAVE权限。

③ 查看主服务器状态

在Master的数据库执行show master status,查看主服务器二进制日志状态,位置号

show master status;

3、slave节点配置

① 修改配置文件

vim /etc/my.cnf;指定唯一的servr ID,设置只读权限

server-id=2       #配置server-id,让从服务器有唯一ID号
relay_log = mysql-relay-bin    #打开Mysql日志,日志格式为二进制
read_only = 1    #设置只读权限
log_bin = mysql-bin         #开启从服务器二进制日志,(非必须)
log_slave_updates = 1  #使得更新的数据写进二进制日志中

systemctl start mariadb 开启服务

② 启动从服务器复制线程

mysql>change master to master_host='192.168.179.128', master_user='slave', master_password='slave', master_log_file='mysql-bin.000002', master_log_pos=2285;
mysql>start slave;

③ 查看从服务器状态

可使用SHOW SLAVE STATUS\G查看从服务器状态

Slave_IO_Running: Yes #IO线程正常运行

Slave_SQL_Running: Yes #SQL线程正常运行

4、测试

 在主上创建一个slave库,从库上也自动生成了一个表

 

推荐文章
来说两句吧
最新评论