zoukankan      html  css  js  c++  java
  • MySql 主从复制

    ⒈主从复制的使用场景

      1.数据自动备份,实现数据库拓展,加强数据的安全性。

      2.提升数据库的负载性能,读写分离,主写数据,从读数据,减轻主的压力。

    ⒉实现原理

      MySQL之间数据复制的基础是二进制日志文件(binary log file)。一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以“事件”的方式记录在二进制日志中,其他数据库作为slave通过一个I/O线程与主服务器保持通信,并监控master的二进制日志文件的变化,如果发现master二进制日志文件发生变化,则会把变化复制到自己的中继日志中,然后slave的一个SQL线程会把相关的“事件”执行到自己的数据库中,以此实现从数据库和主数据库的一致性,也就实现了主从复制。

    ⒊MySql主从配置的前提条件

      1、服务器版本一致

      2、主服务器日志必须二进制

      3、主服务器-从服务器库的数据要求一致

      4、从数据库不能做写操作

    ⒋实现流程

      1.配置主服务器MySql

        ①修改MySql my.cnf文件,添加以下内容

    [mysqld]
    
    server-id=1  #设置server-id
    log-bin=mysql-bin  #开启二进制日志并定义binlog的前缀名
        *我使用的是Docker镜像,执行以下操作
    docker cp 6e246d8fdb51:/etc/mysql/my.cnf /fanqi/mysql/conf
    docker cp my.cnf 6e246d8fdb51:/etc/mysql/my.cnf

        *Linux的MySql,执行以下操作

    vim /etc/mysql/my.cnf

        ②在MySql数据库中,建立用于同步数据库的账号

    create user 'repl'@'%' identified with 'mysql_native_password' by '123456';  -- 创建用户
    GRANT replication slave ON *.* TO 'repl'@'%';  -- 分配权限
    GRANT ALL privileges ON *.* TO 'repl'@'%';  -- 分配权限
    flush privileges;	-- 刷新MySQL的系统权限相关表

        ③重启MySql服务

        *我使用的是Docker镜像,执行以下操作

    docker restart 6e246d8fdb51

        *Linux的MySql,执行以下操作

    systemctl restart mysqld.service

        ④查看MySql主服务器日志

    show master status
    show master statusG(均可)

    *记录下File和Position的值,一会儿在从服务器上配置时需要使用。 

        ⑤为了同步前数据一致,锁定表

    1 flush tables with read lock;

       *完成主从配置后,应尽快解除表的锁定

    1 unlock tables;

      2.配置从服务器MySql

        ①修改MySql my.cnf文件,添加以下内容

      [mysqld]
    
      server-id=2
      log-bin=mysql-bin

        ②重启MySql服务

        ③执行以下命令

    1 stop slave;
    2 change master to master_host='192.168.204.128', master_user='repl', master_password='123456', master_log_file='mysql-bin.000002', master_log_pos=1171;
    3 start slave;
    4 show slave status;

      输入命令:show slave status后如果slave_io_running和slave_sql_running都为yes,那么表明可以成功同步了 

      如果slave_io_running为no,那么可能是以下原因:

      (1)、你的主从MySql是拷贝的,安装的UUID是一样的。  

    docker cp 6e246d8fdb51:/var/lib/mysql/auto.cnf /fanqi/mysql/conf 
    docker cp auto.cnf 6e246d8fdb51:/var/lib/mysql/auto.cnf

      (2)、防火墙拦截

    systemctl  stop firewalld

      (3)、没有关闭SeLinux,临时关闭SeLinux看是否可行

    setenforce 0

      (4)、配置信息不正确,检查Sql中的用户名密码、master_log_file等配置信息是否正确。

    master开启二进制日志后默认记录所有库所有表的操作,可以通过配置来指定只记录指定的数据库甚至指定的表的操作,具体在mysql配置文件的[mysqld]可添加修改如下选项:

    复制代码
    # 不同步哪些数据库  
    binlog-ignore-db = mysql  
    binlog-ignore-db = test  
    binlog-ignore-db = information_schema  
      
    # 只同步哪些数据库,除此之外,其他不同步  
    binlog-do-db = game  
    复制代码
  • 相关阅读:
    windows下mysql多实例安装
    linux下mysql多实例安装
    redisAPI整理
    Flink
    Google Dremel架构
    Apache Kylin
    Phoenix概述
    SQL on Hadoop技术综述
    AES对称加密算法
    Hawq架构
  • 原文地址:https://www.cnblogs.com/fanqisoft/p/10786135.html
Copyright © 2011-2022 走看看