zoukankan      html  css  js  c++  java
  • Linux 部署MySQL 一主一从一备

    主服务器搭建

    1. 准备三台服务器,一主一从一备

    2. 在主服务器(master)下找到mysql配置文件。
      Window下为my.ini(一般在C:ProgramDataMySQLMySQL Server 5.7下); Linux下为/etc/my.cnf

    3. 在[mysqld]下添加如下配置

    # 服务的唯一编号
    server-id=1
    # 开启mysql binlog功能 slave会基于此log-bin来做replication
    log-bin=master-bin
    log-bin-index=master-bin.index
    # binlog记录内容的方式,记录被操作的每一行
    binlog_format=ROW
    # 减少记录日志的内容,只记录受影响的列
    binlog_row_image=minimal
    # 指定需要复制的数据库名
    # 如果没有指定会监听复制所有的库,新建库操作也会复制,反之只监听复制指定的库
    binlog-do-db=test
    #不用于master-slave的具体数据库
    binlog_ignore_db=mysql 
    binlog_ignore_db=information_schema
    
    1. 授权
      我们需要给slave配置一个用户/密码的权限
    # 只读赋权
    GRANT SELECT ON *.* TO 'lucky'@'slave服务器IP' IDENTIFIED BY 'luckytea';
    # 从权限 赋权
    GRANT REPLICATION SLAVE ON *.* TO 'luckytea'@'slave服务器IP' IDENTIFIED BY 'luckytea';
    # 刷新权限
    FLUSH PRIVILEGES;
    
    1. 重启mysql
    系统 命令
    Linux service mysqld restart;
    Window net stop mysql;
    net start mysql;

    6、 查看主服务器状态
    注意!更改配置或者数据库重启,主库日志的Position会改变,从库需要重新配置

    # 确保主从库数据库结构一致
    # 查看server-id 是否和配置一致,从服务器id需要大于主服务器id
    show variables like '%server_id%'
    # 将下列结果中 File和 Position 记录后交给从服务器搭建人员
    show master statusG;
    

    从服务器搭建

    1. 在从服务器(slave)下找到mysql配置文件。
      Window下为my.ini(一般在C:ProgramDataMySQLMySQL Server 5.7下); Linux下为/etc/my.cnf
    2. 在[mysqld]下添加如下配置
    log-bin=relay-bin
    #先全局查找注释原来的server-id
    server-id=2
    #保存配置进行重启查看server-id
    show variables like '%server_id%';
    
    1. 进入slave的mysql命令行 执行
    CHANGE MASTER TO
    MASTER_HOST='master所在服务器的IP',
    MASTER_USER='master授权的账号',
    MASTER_PASSWORD='master授权的密码',
    MASTER_LOG_FILE='master的日志文件名',
    MASTER_LOG_POS=master的日志所在位置;
    
    1. 执行服务 并查看状态
    # 关闭防火墙或者打开端口权限
    # 查看server-id 是否和配置一致,从服务器id需要大于主服务器id
    show variables like '%server_id%'
    start slave;
    show slave statusG;
    # 请确认 Master_Log_File = 主服务器的File, Read_Master_Log_Pos = 主服务器的Position
    # 请确认 Slave_IO_Running = Slave_SQL_Running = yes
    
    1. 如果Slave_SQL_Running = No
    方法一:说明从库执行了错误操作,请进行回滚
     stop slave ;
     set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
     start slave ;
     show slave statusG;
     方法二:重新进行一次同步操作
      stop slave ;
      CHANGE MASTER TO
    MASTER_HOST='master所在服务器的IP',
    MASTER_USER='master授权的账号',
    MASTER_PASSWORD='master授权的密码',
    MASTER_LOG_FILE='master的日志文件名',
    MASTER_LOG_POS=master的日志所在位置;
    start slave;
    show slave statusG;
    
    1. 修改主库数据库,如从库变化,则配置成功

    主主互备

    主主互备:服务器1是服务器2的主服务器,服务器2也是服务器1的主服务器,互相进行主从备份。主从备份过程参考如上。
    注意,为了避免主键id冲突,需要加入如下配置
    主服务器1 在/etc/my.cnf下[mysqld]加入如下语句,使得新增id全为奇数

    # 自增id起始值
    auto_increment_offset=1
    # 每次自增数字
    auto_increment_increment=2
    

    主服务器2 在/etc/my.cnf下[mysqld]加入如下语句,使得新增id全为偶数

    # 自增id起始值
    auto_increment_offset=2
    # 每次自增数字
    auto_increment_increment=2
    

    注意,本教程未考虑灾备和脑裂的情况,暂行方案是连接客户端时捕获异常,切换ip连接。
    灾备+脑裂 推荐使用keepaliver,但是脚本需要自己编写,较复杂
    只灾备不考虑集群,可以先上nginx,用upstream的backup做简单灾备 参考官网文档

  • 相关阅读:
    robotframework eclipse Robot Reference libraries不显示(selenium library无法导入)问题解决办法
    Navicat_Keygen_Patch 5.6如何使用
    电子标签拣货系统DPS
    matplotlib中的bar图
    Windows 10 清除文件
    npm包的上传npm包的步骤,与更新和下载步骤
    深入理解JWT的使用场景和优劣
    关于Vue.js去掉#号路由
    关于sklearn中的导包交叉验证问题
    python函数作用域
  • 原文地址:https://www.cnblogs.com/hyry/p/11927586.html
Copyright © 2011-2022 走看看