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

    Mysql环境准备

    #下载Mysql
    wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
    
    如果报错: -bash: wget: 未找到命令
    安装插件  yum -y install wget
    
    安装mysql-community-release-el7-5.noarch.rpm
    sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm
    
    安装Mysql
    sudo yum install mysql-server
    一直y下去就可以了
    

    配置Mysql

    mysql -u root
    

    报错。原因:原因是/var/lib/mysql的访问权限问题。

    #授权
    chown root /var/lib/mysql/
    
    #重启
    service mysqld restart
    
    #再次登录并修改密码
    mysql -u root
    use mysql;
    update user set password=password('123456') where user='root';
    exit;
    
    #再次重启,授权root可以远程连接
    service mysqld restart
    GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "root";
    service mysqld restart
    

    Mysql主从复制原理

    MySQL的主从复制是MySQL本身自带的一个功能,不需要额外的第三方软件就可以实现。其复制功能并不是copy文件来实现的,而是借助binlog日志文件里面的SQL命令实现的主从复制,可以理解为我在Master端执行了一条SQL命令,那么在Salve端同样会执行一遍,从而达到主从复制的效果。从库生成两个线程,一个1/0线程、一.个SQL线程。i/o线程去请求主库的binlog,并将得到的binlog日志写到relay log (中继日志)文件中。主库会生成一个log dump线程,用来给从库i/o线程传binlog;SQL线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致。

    主从复制搭建

    配置主节点

    vi /etc/my.cnf
    server_id=131 ###服务器id
    log-bin=mysql-bin   ###开启日志文件
    #保存之后重启
    service mysqld restart
    

    #查询对应配置文件中的server_id 说明已经配置成功
    show variables like '%server_id%';
    #看到同步的文件,和行数 说明已经配置成功。
    show master status;
    

    从节点配置

    vi /etc/my.cnf
    server_id=132  ###从服务器server_id
    log-bin=mysql-bin  ###日志文件同步方式
    binlog_do_db=test,test1   ###同步数据库,多个以逗号分隔
    service mysqld restart
    

    从节点同步主节点

    master_host:主节点IP
    master_user :主节点账号
    master_password:密码
    #这两个参数的配置是在主节点通过show master status;查询到的
    master_log_file
    master_log_pos
    
    #执行sql
    CHANGE MASTER TO master_host = '192.168.100.131',
    master_user = 'root',
    master_password = 'root',
    master_log_file = 'mysql-bin.000001',
    master_log_pos = 120;
    
    因为从节点的服务器是直接复制的主节点,所有可能会出现一个错误
    Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.。是因为UUID重复了.删除子节点的auto.cnf就可以了
    解决办法:
    #找到Mysql的位置
    cat  /etc/my.cnf
    cd /var/lib/mysql
    rm -rf auto.cnf
    service mysqld restart
    

    #开始同步
    start slave
    #查看同步状态
    SHOW SLAVE STATUS
    

    效果演示

    在主节点创建test数据库,在创建一个表,子节点会自动同步

    刷新一下从节点

  • 相关阅读:
    2018.4.26 lvm
    2018.4.25 github创建新项目
    2018.4.24 快排查找第K大
    2018.4.24 flask_mail使用
    SpringBoot中使用ES和MongoDB常用API
    设计模式-Template_Method模式
    设计模式-Chain of Responsibility模式
    设计模式-Observer模式
    设计模式-Adapter模式
    设计模式-Strategy模式
  • 原文地址:https://www.cnblogs.com/yangk1996/p/12656613.html
Copyright © 2011-2022 走看看