主从复制:

其实就是复制的是主服务器的二进制日志,从服务器然后再重新根据日志操作一遍,从而达到和主服务器里的数据一样,但是时间上会有延迟

mysql主从复制的基本原理

官方文档:https://dev.mysql.com/doc/refman/5.7/en/replication-implementation-details.html

操作步骤

  • 分别在两台centos7上安装好centos7的系统,编译安装好MySQL

  • 在主服务器启动二进制日志功能

vim /etc/my.cnf
server_id = 1
log_bin
  • 新建并且授权用户

  • 并且将主服务器里的数据导出,在从服务器上导入数据,做好前期2台服务器之间的数据的一致性工作

    grant replication slave on *.* to 'oudi'@'192.168.0.69' identified by 'Sanchuang123#';
    
    mysqldump -uroot -p'Sanchuang123#' --all-databases > /backup/all_db.sql
    scp /backup/all_db.sql  root@'192.168.0.70':/root
    
    mysql -uroot -p'Sanchuang123#' </root/all_db.sql
    
  • 在从服务器上配置master信息

    # 在主服务器上查看信息
    show master status;
    flush logs;
    show master status;
    
    # 在从服务器上配置master信息
    CHANGE MASTER TO MASTER_HOST='192.168.0.69' ,MASTER_USER='oudi',MASTER_PASSWORD='Sanchuang123#',MASTER_PORT=3306,MASTER_LOG_FILE='sc-mysql-master-bin.000005',MASTER_LOG_POS=154;
    #查看slave的状态root@(none) 15:28 mysql>show slave status\G;
    

  • 关闭主服务器和从服务器的防火墙和selinux

    vim /etc/sysconfig/selinux
    SELINUX = disabled
    systemctl stop firewalld
    systemctl disable firewalld
    

  • 开启slave服务

    start slave;
    show master status;
    

可能遇到的问题:

解决UUID一样的问题,服务器如果是克隆过来的mysql中uuid是一样的,要解决这个问题

mysql [(none)]> show variables like "%uuid%";
+---------------+--------------------------------------+
| Variable_name | Value                                |
+---------------+--------------------------------------+
| server_uuid   | f359f726-3e50-11e8-8551-000c295ed919 |
+---------------+--------------------------------------+
1 row in set (0.01 sec)
# 复制该uuid号
vim /data/mysql/auto.cnf
[auto]
server-uuid=f359f726-3e50-11e8-8551-000c295ed917  =>修改几个字符就可以了,和主服务器的不一样就行
[root@mysql-slave ~]# service mysqld restart
Redirecting to /bin/systemctl restart mysqld.service
[root@mysql-slave ~]#
[root@mysql-slave ~]# mysql -uroot -p'Sanchuang123#'
mysql [(none)]> show slave status\G;
*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.0.69Master_User: kuigeMaster_Port: 3309Connect_Retry: 60Master_Log_File: mysql-master-bin.000001Read_Master_Log_Pos: 600Relay_Log_File: mysql-slave-relay-bin.000003Relay_Log_Pos: 827Relay_Master_Log_File: mysql-master-bin.000001Slave_IO_Running: YesSlave_SQL_Running: Yes

​ 2.

1)防火墙和selinux没有关

​ 2)在从服务器上输入下面的命令

CHANGE MASTER TO MASTER_HOST=‘192.168.0.69’ ,
MASTER_USER=‘oudi’,
MASTER_PASSWORD=‘Sanchuang123#’,
MASTER_PORT=3306,
MASTER_LOG_FILE=‘sc-mysql-master-bin.000005’,
MASTER_LOG_POS=154;

注意授权的用户密码是否正确,同时二进制日志文件是否正确

mysql的三种复制方式

  1. 半同步复制

    介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后,不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端

    优点:

    ​ 相对于异步复制,半同步复制提高了数据的安全性

    缺点:

    ​ 造成了一定的程度的延迟,这个延迟最少是一个TCP/IP往返的时间,所有,半同步复制最好在低延时的网络中使用。

    配置半同步复制的步骤:

    • 在主服务器上,下载插件,并且启动半同步

      root@localhost [(none)]> install plugin rpl_semi_sync_master soname 'semisync_master.so';
      Query OK, 0 rows affected (0.00 sec)
      然后查看安装的情况
      root@(none) 15:44  mysql>show plugins;
      | rpl_semi_sync_master       | ACTIVE   | REPLICATION        | semisync_master.so | GPL     |
      #打开半同步复制
      root@(none) 15:45  mysql>set global rpl_semi_sync_master_enabled=1;
      Query OK, 0 rows affected (0.00 sec)
      启用半同步
      root@(none) 15:46  mysql>show global variables like '%rpl_semi%';
      +-------------------------------------------+------------+
      | Variable_name                             | Value      |
      +-------------------------------------------+------------+
      | rpl_semi_sync_master_enabled              | ON         |
      | rpl_semi_sync_master_timeout              | 10000      |
      | rpl_semi_sync_master_trace_level          | 32         |
      | rpl_semi_sync_master_wait_for_slave_count | 1          |
      | rpl_semi_sync_master_wait_no_slave        | ON         |
      | rpl_semi_sync_master_wait_point           | AFTER_SYNC |
      +-------------------------------------------+------------+
      6 rows in set (0.01 sec)
      

  • 在从服务器上执行安装插件,打开半同步复制

    root@localhost [(none)]>install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
    Query OK, 0 rows affected (0.01 sec)从库上启用半同步功能
    root@(none) 15:59  mysql>set global  rpl_semi_sync_slave_enabled=1;
    Query OK, 0 rows affected (0.00 sec)root@(none) 16:00  mysql>show global variables like '%rpl_semi%';
    +---------------------------------+-------+
    | Variable_name                   | Value |
    +---------------------------------+-------+
    | rpl_semi_sync_slave_enabled     | ON    |
    | rpl_semi_sync_slave_trace_level | 32    |
    +---------------------------------+-------+
    2 rows in set (0.01 sec)
    
  • 半同步测试

    从库停止复制以后在主库建表测试

    slave端:

    stop slave
    

    master端:

    use sc;
    root@sc 16:41  mysql>create table t6(id int);
    Query OK, 0 rows affected (10.09 sec)  所花费的时间超过10秒root@xiongda 16:42  mysql>
    root@xiongda 16:42  mysql>show status like 'Rpl_semi_sync_master_status';
    +-----------------------------+-------+
    | Variable_name               | Value |
    +-----------------------------+-------+
    | Rpl_semi_sync_master_status | OFF   |  半同步关闭
    +-----------------------------+-------+
    1 row in set (0.00 sec)
    
    在从服务器那边启用start slave ;
    root@sc 16:42  mysql>start slave;
    Query OK, 0 rows affected (0.01 sec)root@sc 16:44  mysql>
    root@sc 16:44  mysql>show tables; 查看同步情况
    +-------------------+
    | Tables_in_sc |
    +-------------------+
    | t1                |
    | t2                |
    | t6                |
    在主服务器上查看状态
    root@sc 16:43  mysql>show status like 'Rpl_semi_sync_master_status';
    +-----------------------------+-------+
    | Variable_name               | Value |
    +-----------------------------+-------+
    | Rpl_semi_sync_master_status | ON    |
    +-----------------------------+-------+
    1 row in set (0.01 sec)
    
  1. 同步复制:
    指当主库执行完一个事务,所有的从库都执行了该事务才返回给客户端。因为需要等待所有从库执行完该事务才能返回,所以全同步复制的性能必然会收到严重的影响。

由若干个节点共同组成一个复制组,一个事务的提交,必须经过组内大多数节点(N/2 +1)决议并通过,才能得以提交。如上图所示,由三个节点组成一个复制组,Consensus层为一致性协议层,在事务提交过程中,发送组问通讯,由2个节点决议通过这个事务,事务才能够最终得以提交并响应。

组复制是为了解决传统异步复制和半同步复制可能产生数据不一致的问题。
  1. 异步复制

    mysql默认的复制即是异步的,主库在执行客户端提交的事务后悔立即将结果返回给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题,主如果crash掉了,此时主上已经提交的事务可能并没有传到从上,如果此时,强行将从提升为主,可能导致新主上的数据不完整。

mysql的主从复制和半同步复制的配置相关推荐

  1. Mysql原理、主从复制、半同步复制及基于SSL复制

    本篇博文主要讲解Mysql主从复制.半同步.基于SSL加密的复制 简介 MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司.MySQL被广泛地应用在Internet上 ...

  2. 运维工程师必备之MySQL数据的主从复制、半同步复制和主主复制详解

    一.MySQL复制概述 ⑴.MySQL数据的复制的基本介绍 目前MySQL数据库已经占去数据库市场上很大的份额,其一是由于MySQL数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费 ...

  3. MySQL多实例实现半同步复制

    MySQL多实例实现半同步复制 MySQL多实例实现半同步复制 主库1:192.168.40.150 主库2:192.168.40.161 从库(2个MySQL实例):192.168.40.162 一 ...

  4. mysql semisync 恢复_mysql半同步复制(semi_sync_replication)搭建及使用

    mysql半同步复制(semi_sync_replication)搭建及使用 google为mysql开发了一个补丁一个基于半同步的补丁,应用与mysql5.0.回来mysql打上了该补丁,并在5.5 ...

  5. Java mysql同步复制_MySQL数据的主从复制、半同步复制和主主复制详解

    一.MySQL复制概述 ⑴.mysql数据的复制的基本介绍 目前MySQL数据库已经占去数据库市场上很大的份额,其一是由于MySQL数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费 ...

  6. percona mysql.cnf_Percona MySQL5.6 半同步复制

    先配置普通的clone 两台服务器,一主一备 主服务器: 10.10.1.30 Slave: 10.10.1.200 修改每台机器的my.cnf文件,分别修改server_id 主服务器server_ ...

  7. mysql主主复制半同步_mysql主从复制中的半同步复制

    实验mysql借助google提供的插件,完成半同步复制模型: 物理机依然是win7系统,虚拟机为centos7: 主节点:192.168.255.2 从节点:192.168.255.3 先配置为主从 ...

  8. mysql 5.5半同步复制_(5.5)mysql高可用系列——MySQL半同步复制(实践)

    关键词,mysql半同步复制 [0]实验环境 操作系统:CentOS linux 7.5 数据库版本:5.7.24 数据库架构:主从复制,主库用于生产,从库用于数据容灾和主库备机,采用默认传统的异步复 ...

  9. MHA-结合MySQL半同步复制高可用集群(Centos7)

    目录 一.理论概述 本案例部署思路 二.环境 三.部署 部署MHA 部署二进制包MySQL及部署主从复制 部署半同步复制 配置MHA MHA测试 部署lvs+keepalived(lvs1,lvs2) ...

最新文章

  1. 前、后端分离权限控制设计和实现思路
  2. 清理计算机英语是什么,如何清理电脑(国外英文资料).doc
  3. Hologres揭秘:如何支持超高QPS在线服务(点查)场景
  4. 封装时间转换工具类_利用swig封装C++的dll为C#方便使用
  5. gwt 同步和异步_GWT Spring和Hibernate进入数据网格世界
  6. php 函数有命名空间吗_解析 ThinkPHP 的命名空间
  7. python数据图形化—— matplotlib 基础应用
  8. python 西门子触摸屏通讯_PLC通过以太网与触摸屏通讯
  9. hdu 4939 Stupid Tower Defense 2014多校七 DP
  10. android 仿微信加载框,Android仿微信网络加载弹出框
  11. 小猫钓鱼java代码,【Java个人笔记】练习-小猫钓鱼
  12. jmeter 接口测试 签名_Jmeter之API接口签名验证测试
  13. 2020-09-07-中国人寿两年java岗位一面
  14. 信管通低代码快速开发工具简介(一)
  15. 304、bootstrap 之 图片样式
  16. Java期末考试试题及参考答案(07)
  17. 红米手机5A获取root超级权限的教程
  18. 一种简单的封装VP8/VP9视频的容器:IVF格式
  19. android beacon微定位,【iBeacon定位开发】- AndroidBLE--Measuring distance(测量距离)
  20. 气缸标识上vr什么意思_dohc发动机是什么意思(发动机的这个标识DOHC是什么意思?)...

热门文章

  1. 31.基类的公有成员在派生类中的访问权限由 决定.java_基类的公有成员在派生类中的访问权限由派生方式决定。()...
  2. 手机游戏服务器都是什么协议,手机网游的服务器架构
  3. 安装win7后怎么装linux系统,小编教你如何使用u盘安装Linux系统
  4. 手把手教你用数据分析帮女神学姐选婚房
  5. 以哥德尔命名的哥德尔数——哥德尔拆解汉译之四
  6. [小代码]通过IP和端口连接到远程摄像机
  7. (毕业设计资料)基于单片机的水位检测系统仿真设计
  8. 同样协调个事情,为什么有人一说就通,有人一说就炸?(转,知乎)
  9. 液晶面板里面有些什么配件_液晶电视核心部件各类液晶面板介绍是什么?请生意经的朋友帮忙解答...
  10. 如何让搜搜soso收录我的网站