zoukankan      html  css  js  c++  java
  • Centos7 mysql 主从复制(读写分离)设置

    最近准备研究一些实战型的可以承担中型流量的系统架构知识,记录于此。
    Centos7 mysql 主从复制

    1 Mysql 读写分离主从复制模式概述

    • 主(master)从(slave)复制,就是一台机器的mysql充当主服务器,其他充当从服务器。
    • 更新操作(insert、update、delete)在主(master)服务器
    • 读取在从服务器(select)

    1.1 mysql 支持的复制类型

    1. 基于语句复制,MySQL默认采用基于语句的复制,效率比较高。一旦发现没法精确复制时, 会自动选着基于行的复制。   
      • 在主服务器上执行的SQL语句,
      • 在从服务器上执行同样的语句。
    2. 基于行复制,把改变的内容复制过去,而不是把命令在从服务器上执行一遍. 从mysql5.0开始支持
    3. 混合类型复制,默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。

    1.2 复制解决的问题

    MySQL复制技术有以下一些特点:

    • 数据分布 (Data distribution )
    • 负载平衡(load balancing)
    • 备份(Backups)
    • 高可用性和容错行 High availability and failover

    1.3 复制如何工作

    分3个步骤

    1. master 将改变记录到二进制(binary log)中。
    2. slave 将 master 的binary log events 拷贝到他的中继日志(relay log)
    3. slave 重做中继日志中的事件,将改变反映他自己的数据。

    2 复制配置

    两天 centos

    • 主(master)192.168.0.112
    • 从(slave)192.168.0.113

    2.1 master 建立账号赋权

    在 Master 中创建账号 backup,并允许每个 slave 节点有 PEPLICATION SLAVE 权限。用户名的密码都会存储在文本文件 master.info 中

    ‘backup’@’%’ 表示用还可以从远程登录

    CREATE USER ‘backup’@’%’ IDENTIFIED BY ‘password’;
    

    授权

    mysql > GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.*  TO backup@’%’  IDENTIFIED BY ‘1234’;
    

    2.2 拷贝数据

    新安装服务器不需要

    2.3 配置 master 节点

    查找 my.cnf 文件

    find / -name 'my.cnf'
    

    现在在 /etc/my.cnf

    编辑

    vi /etc/my.cnf
    

    在文本后增加

    server-id=1 
    log-bin=master-bin
    log-bin-index=master-bin.index
    

    保存文件后

    systemctl restart mysqld
    

    进入mysql

    show master status
    

    2.4 配置 slave 节点

    配置 my.cnf 文件如下:

    og_bin= mysql-bin
    server_id = 2
    relay_log= mysql-relay-bin
    log_slave_updates = 1
    read_only= 1
    

    2.5 启动 slave

    接下来就是让slave连接master,并开始重做master二进制日志中的事件。你不应该用配置文件进行该操作,而应该使用CHANGE MASTER TO语句,该语句可以完全取代对配置文件的修改,而且它可以为slave指定不同的master,而不需要停止服务器。如下:

    mysql> CHANGE MASTER TO MASTER_HOST='server1',
    
        -> MASTER_USER='repl',
    
        -> MASTER_PASSWORD='p4ssword',
    
        -> MASTER_LOG_FILE='mysql-bin.000001',
    
        -> MASTER_LOG_POS=0;
    

    测试

    mysql> start slave;
    

    显示,注意命令是大写的G,查看输出结果 在这里主要是看: Slave_IO_Running=Yes Slave_SQL_Running=Yes

    msyql> show slave status G
    

    在 master 端输入 show processlistG

    msyql> show processlist G
    

    2.6 停止 slave

    stop slave
    

    只有再停止了 slave 后才能修改配置文件。

    2.7 问题

    :The slave I/O thread stops because master and slave have equal MySQL server UUIDs

    最后检查发现他们的auto.cnf中的server-uuid是一样的。。。

    [root@localhost ~]# vim /var/lib/mysql/auto.cnf
    
    [auto]
    server-uuid=4f37a731-9b79-11e8-8013-000c29f0700f
    

    问题解决
    停止从库的mysqld服务,删除他的auto.cnf文件,再启动数据库服务即可:

    [root@localhost mysql]# systemctl stop mysqld.service
    
    [root@localhost mysql]# mv /var/lib/mysql/auto.cnf /var/lib/mysql/auto.cnf.bak
    
    [root@localhost mysql]# systemctl start mysqld.service
    

    2.8 测试

    在主库创建一个demo库

    create database demo;
    

    在从库也能快速看到。

  • 相关阅读:
    C++操作mysql方法总结(3)
    C++操作mysql方法总结(2)
    C++操作mysql方法总结(1)
    基于C++11的线程池
    C++ 类之间的互相调用
    C++编译与链接(1)-编译与链接过程
    C++判断char*的指向
    确保你想要修改的char*是可以修改的
    C++编译与链接(0)-.h与.cpp中的定义与声明
    C++获取private的变量-偷走private
  • 原文地址:https://www.cnblogs.com/fishpro/p/12792479.html
Copyright © 2011-2022 走看看