zoukankan      html  css  js  c++  java
  • MySQL5.7主从复制

    MySQL主从复制

    前言:

    A、全年无故障率(非计划内故障停机)

    99.9%                 ----> 0.001*365*24*60=525.6  min
    99.99%                ----> 0.0001*365*24*60=52.56 min
    99.999%               ----> 0.0001*365*24*60=5.256 min
    

    B、高可用架构方案

    负载均衡:有一定的高可用性 
    LVS  Nginx
    主备系统:有高可用性,但是需要切换,是单活的架构
    KA ,   MHA, MMM
    真正高可用(多活系统): 
    NDB Cluster  Oracle RAC  Sysbase cluster   , InnoDB Cluster(MGR),PXC , MGC
    

    一、主从复制介绍

    1.1. 基于二进制日志复制的
    1.2. 主库的修改操作会记录二进制日志
    1.3. 从库会请求新的二进制日志并回放,最终达到主从数据同步
    1.4. 主从复制核心功能:
    辅助备份,处理物理损坏                   
    扩展新型的架构:高可用,高性能,分布式架构等
    

    二、主从复制搭建(基于binlog)

    搭建环境:

    • 主库:192.168.1.111
    • 从库:192.168.1.112

    前提条件:

    1、两台以上的Mysql实例(独立的主机或者多实例),保证server_id(>0)、server_uuid不同
    
    2、主库开启二进制日志(binlog)、(主从服务器同步时间)
    
    3、主库要开启一个专业的复制用户(给replication slave权限)
    
    4、“补课的操作”,如果要新加一个从库,那么要把主库的数据备份,然后恢复到从库。
    
    5、通知从库可以进行自动复制,确认复制的起点(使用命令change master to 主库ip port user password 起点)
    
    6、在从库启动专用的复制线程(start slave)
    

    2.1、配置文件查看

    2.1.1、主库配置文件查看

    [root@master ~]# cat  /etc/my.cnf
    [mysqld]
    user=mysql
    basedir=/app/mysql
    datadir=/data/mysql
    server_id=6		#多台MySQL中,server_id必须是唯一的
    port=3306
    socket=/tmp/mysql.sock
    innodb_data_file_path=ibdata1:12M;ibdata2:512M:autoextend
    autocommit=0
    server_id=6
    log_bin=/data/mysql/binlog/mysql-bin  #开启binlog日志
    sync_binlog=1
    binlog_format=row
    gtid-mode=on
    enforce-gtid-consistency=true
    slow_query_log=1 
    slow_query_log_file=/data/mysql/slow.log 
    long_query_time=0.1  
    log_queries_not_using_indexes
    [mysql]
    socket=/tmp/mysql.sock
    prompt=tzh>
    

    2.1.2、从库配置文件查看

    [mysqld]
    user=mysql
    basedir=/app/mysql
    datadir=/data/mysql
    server_id=7		#多台MySQL中,server_id必须是唯一的
    port=3306
    socket=/tmp/mysql.sock
    innodb_data_file_path=ibdata1:12M;ibdata2:512M:autoextend
    autocommit=0
    server_id=6
    log_bin=/data/mysql/binlog/mysql-bin  #开启binlog日志
    sync_binlog=1
    binlog_format=row
    gtid-mode=on
    enforce-gtid-consistency=true
    slow_query_log=1 
    slow_query_log_file=/data/mysql/slow.log 
    long_query_time=0.1  
    log_queries_not_using_indexes
    [mysql]
    socket=/tmp/mysql.sock
    prompt=tzh>
    

    2.2、补课操控省略,因为此处两台MySQL都是新部署的

    2.3、查看server_id、server_uuid

    主库:

    [root@master ~]# mysql -p123  -e "select @@server_id"
    mysql: [Warning] Using a password on the command line interface can be insecure.
    +-------------+
    | @@server_id |
    +-------------+
    |           6 |
    +-------------+
    [root@master ~]# mysql -p123  -e "select @@server_uuid"
    mysql: [Warning] Using a password on the command line interface can be insecure.
    +--------------------------------------+
    | @@server_uuid                        |
    +--------------------------------------+
    | d6caac23-2863-11eb-9bba-000c29af70c3 |
    +--------------------------------------+
    [root@master ~]# mysql -p123  -e "select @@log_bin"; #1表示开启
    mysql: [Warning] Using a password on the command line interface can be insecure.
    +-----------+
    | @@log_bin |
    +-----------+
    |         1 |
    +-----------+
    

    从库:

    [root@slave1 ~]# mysql -p123  -e "select @@server_id"
    mysql: [Warning] Using a password on the command line interface can be insecure.
    +-------------+
    | @@server_id |
    +-------------+
    |           7 |
    +-------------+
    [root@slave1 ~]# mysql -p123  -e "select @@server_uuid"
    mysql: [Warning] Using a password on the command line interface can be insecure.
    +--------------------------------------+
    | @@server_uuid                        |
    +--------------------------------------+
    | 49fea94e-2917-11eb-9da2-000c291cb61f |
    +--------------------------------------+
    [root@slave1 ~]# mysql -p123  -e "select @@log_bin"; #1表示开启
    mysql: [Warning] Using a password on the command line interface can be insecure.
    +-----------+
    | @@log_bin |
    +-----------+
    |         1 |
    +-----------+
    

    2.4、开启一个专用的复制用户(主库)

    [root@master ~]# mysql -p123 -e "grant replication slave on *.* to tzh@'%' identified by '123'";
    
    # 查看当前在使用的binlog文件
    [root@master ~]#  mysql -p123 -e "SHOW MASTER STATUSG";
    mysql: [Warning] Using a password on the command line interface can be insecure.
    *************************** 1. row ***************************
                 File: mysql-bin.000004   #关注这个
             Position: 678932			  #关注这个
         Binlog_Do_DB: 
     Binlog_Ignore_DB: 
    Executed_Gtid_Set: d6caac23-2863-11eb-9bba-000c29af70c3:1-1846,
    f9511c39-1e28-11eb-8a8e-000c29af70c3:1-16
    

    2.5、告知从库关键复制信息(从库)

    mysql -p123 -e "CHANGE MASTER TO
      MASTER_HOST='192.168.1.111',   #主库ip
      MASTER_USER='tzh',			 #刚刚创建的用户
      MASTER_PASSWORD='123',		 #密码
      MASTER_PORT=3306,				 #主库端口
      MASTER_LOG_FILE='mysql-bin.000004', #主库在使用的binlog二进制文件
      MASTER_LOG_POS=678932,			  #主库对应的POS
      MASTER_CONNECT_RETRY=10";			  # 尝试重连次数
    
    # 开启主从专用线程
    mysql -p123 -e "start slave";
    
    #查看状态,Slave_IO_Running、Slave_SQL_Running都是yes 说明主从部署成功!
    [root@slave1 ~]# mysql -p123 -e "show slave  status G" | grep Running
    mysql: [Warning] Using a password on the command line interface can be insecure.
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
      
    # 如果不成功执行以下命令重新开始部署
    mysql -p123 -e "stop slave;reset slave all";
  • 相关阅读:
    IDEA 代码统计插件使用
    四种遍历ConcurrentHashMap的方式
    Java中多线程并发体系知识点汇总
    程序员高效工具列表
    js数组与字符串的相互转换方法
    ajax使用json数据格式--无效的 JSON 基元
    for和$.each 的记录
    表单提交模型记录
    /Date(1512551901709+0800)/转换
    jsonp的使用记录
  • 原文地址:https://www.cnblogs.com/hsyw/p/13997559.html
Copyright © 2011-2022 走看看