MySql详解(六)--集群篇

MySQL集群篇

集群搭建之主从复制

主从复制原理

binlog介绍和relay日志

查看bin log和relay log日志:

mysqlbinlog --base64-output=decode-rows -v -v mysql-bin.000058 >binlog

主从复制实践

关闭主从机器的防火墙

systemctl stop iptables(需要安装iptables服务)

systemctl stop firewalld(默认)

systemctl disable firewalld.service(设置开启不启动)

主服务器配置
第一步:修改my.conf文件

在[mysqld]段下添加:

#启用二进制日志

log-bin=mysql-bin

#服务器唯一ID,一般取IP最后一段

server-id=133

第二步:重启mysql服务

systemctl restart mysqld

第三步:主机给从机授备份权限

注意:先要登录到MySQL命令客户端

mysql>GRANTREPLICATION SLAVE ON *.* TO '从机MySQL用户名'@'从机IP' identified by '从机MySQL密码';

示例:

GRANT REPLICATIONSLAVE ON *.* TO 'root'@'%' identified by 'root';

注意事项:

一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.145.226,加强安全。

第四步:刷新权限

mysql> FLUSHPRIVILEGES;

第五步:查询master的状态

mysql> showmaster status;

+------------------+---------+--------------+------------------+

| File | Position| Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000001| 410 | db1 | mysql |

+------------------+----------+--------------+------------------+

1 row in set

从服务器配置
第一步:修改my.conf文件

[mysqld]

server-id=135

第二步:删除UUID文件

Fatalerror: The slave I/O thread stops because master and slave have equal MySQLserver UUIDs; these UUIDs must be different for replication to work.

如果出现此错误:因为是mysql是克隆的系统所以mysql的uuid是一样的,所以需要修改。

解决方法: 删除/var/lib/mysql/auto.cnf文件,重新启动MySQL服务。

第三步:重启并登录到MySQL进行配置从服务器

mysql>change master to

master_host='192.168.211.128',

master_port=3306,

master_user='root',

master_password='root',

master_log_file='mysql-bin.000001',

master_log_pos=397

注意:

语句中间不要断开,master_port 为mysql服务器端口号(无引号), master_user 为执行同步操作的数据库账户, “410” 无单引号(此处的 410 就是show master status 中看到的 position 的值,这里的mysql-bin.000001 就是 file 对应的值)。

第四步:启动从服务器复制功能

mysql>startslave;

第五步:检查从服务器复制功能状态

mysql> showslave status \G;

……………………(省略部分)

Slave_IO_Running:Yes //此状态必须YES

Slave_SQL_Running:Yes //此状态必须YES

……………………(省略部分)

注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。

测试以上操作过程,从服务器配置完成。

以上操作过程,从服务器配置完成。

测试

搭建成功之后,往主机中插入数据,看看从机中是否有数据

主从同步延迟的原因及解决办法

1、主从同步的延迟的原因

我们知道, 一个服务器开放N个链接给客户端来连接的, 这样有会有大并发的更新操作,但是从服务器的里面读取binlog 的线程仅有一个, 当某个SQL在从服务器上执行的时间稍长 或者由于某个SQL要进行锁表就会导致,主服务器的SQL大量积压,未被同步到从服务器里。这就导致了主从不一致,也就是主从延迟。

2、主从同步延迟的解决办法

实际上主从同步延迟根本没有什么一招制敌的办法, 因为所有的SQL必须都要在从服务器里面执行一遍,但是主服务器如果不断的有更新操作源源不断的写入, 那么一旦有延迟产生,那么延迟加重的可能性就会原来越大。 当然我们可以做一些缓解的措施。

  • 我们知道因为主服务器要负责更新操作, 他对安全性的要求比从服务器高, 所有有些设置可以修改,比如sync_binlog=1,innodb_flush_log_at_trx_commit = 1 之类的设置,而slave则不需要这么高的 数 据 安 全 , 完 全 可 以 讲 sync_binlog 设 置 为 0 或 者 关 闭 binlog,innodb_flushlog, innodb_flush_log_at_trx_commit 也 可以设置为0来提高sql的执行效率 这个能很大程度上提高效率。另外就是使用比主库更好的硬件设备作为slave。

  • 就是把一台从服务器单独作为备份使用, 而不提供查询, 那边他的负载下来了, 执行relay log 里面的SQL效率自然就高了。

  • 增加从服务器喽,这个目的还是分散读的压力, 从而降低服务器负载。

3、判断主从延迟的方法

MySQL提供了从服务器状态命令,可以通过show slave status 进行查看, 比如可以看看Seconds_Behind_Master参数的值来判断,是否有发生主从延时。 其值有这么几种: NULL - 表示io_thread或是sql_thread有任何一个发生故障,也就是该线程的Running状态是No,而非Yes. 0 - 该值为零,是我们极为渴望看到的情况,表示主从复制状态正常。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值