MySQL.02.MySQL集群篇之主从复制

主从复制的原理

MySQL主从复制原理可以总结为一句话:主对外工作,从对内备份。
MySQL主从复制原理
我们使用MySQL–01、Centos7下安装MySQL中配置好的机器作为主服务器(192.168.10.171);然后按照文章Linux–04、虚拟机的克隆与配置再克隆一台主机安装好MySQL作为从服务器(192.168.10.172)
在做主从复制之前首先要关闭主从机器的防火墙,执行以下命令:

systemctl stop iptables(需要安装iptables服务)
systemctl stop firewalld(默认)
systemctl disable firewalld.service(设置开启不启动)

如下图所示:
在这里插入图片描述
如果执行第一条命令提示Failed to start ipatbles.service: Unit not found.则原因是centos从7开始默认用的是firewalld,这个是基于iptables的,虽然有iptables的核心,但是iptables的服务是没安装的。那么安装这个服务然后开启:

#安装
yum install iptables-services 
#开启iptables
systemctl enable iptables 
systemctl enable ip6tables 
#启动服务
systemctl start iptables 
systemctl start ip6tables

主服务器配置

  1. 输入命令vim /etc/my.cnf打开MySQL配置文件,在[mysqld]段下添加如下代码:
#启用二进制日志
log-bin=mysql-bin
#服务器唯一ID,一般取IP最后一段
server-id=171
#指定复制的数据库(可选)
binlog-do-db=christy
#binlog-ignore-db=christy
#指定不复制的数据库(可选,mysql5.7开始)
#replicate-ignore-db=kkb
#指定忽略的表(可选,mysql5.7)
#replicate-ignore-table = t_user
  1. 重启MySQL服务
systemctl restart mysqld
  1. 登录MySQL,输入以下命令(主机给从机授备份权限)
GRANT REPLICATION SLAVE ON *.* TO 'root'@'%' identified by '123456';
  1. 刷新权限
FLUSH PRIVILEGES;
  1. 输入以下命令查询master的状态,结果如下图:
show master status;

在这里插入图片描述
这个要记住,后面配置丛机要用到。

从服务器配置

  1. 输入命令vim /etc/my.cnf打开MySQL配置文件,在[mysqld]段下添加如下代码:
    [mysqld]
    #一般是服务器的ip
    server-id=135
  2. 重启并登录到从服务器配置MySQL
#重启MySQL
systemctl restart mysqld
#登录MySQL
mysql -uroot -p123456
  1. 查看丛机状态,如下图:可以看到我们的机器第一次作为丛机是没有指定过主机的。
show slave status \G;

在这里插入图片描述
4. 先关闭 stop slave,输入以下命令同步初始化 master_log_file 、 master_log_pos以主机状态为主,如果忘记了在主机输入show master status; 可以查看主机状态。

mysql>change master to
master_host='192.168.10.171',
master_port=3306,
master_user='root',
master_password='123456',
master_log_file='mysql-bin.000002',
master_log_pos=397;

在这里插入图片描述
红色区域都是主机的配置信息
5. 启动从服务器复制功能

mysql>start slave;
  1. 输入以下命令检查从服务器复制功能状态
show slave status \G;
……………………(省略部分)
Slave_IO_Running: Yes //此状态必须YES
Slave_SQL_Running: Yes //此状态必须YES
……………………(省略部分)

在这里插入图片描述
上述成功之后插入一条数据看是否成功;

注: 如果出现复制不成功,可以在丛机输入以下命令:
set global sql_slave_skip_counter =1; # 忽略一个错误
start slave

主从延时

1、因为SQLThread和IOThread是默认单线程,当主机的tps(每秒事务处理数)高于从机的Thread所能
承受范围,则会出现从机复制延时
解决方案: 将thread改成多线程模式 MySQL5.6改表,MySQL5.7改GTID
2、网络延时
解决方案: 主和从在一个网内
3、IO延时
slave server硬件升级
判断延时:
show slave status中Seconds_Behind_Master=0则不延时
建表加时间戳(timestamp),看时间差
解决方案: 利用分库分表中间件 Mycat、 sharding JDBC
强制读取主库
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潮汐先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值