zoukankan      html  css  js  c++  java
  • MySQL实现主从库,AB复制配置

     

    AB复制是一种数据复制技术,是myslq数据库提供的一种高可用、高性能的解决方案。

    AB复制的模式:
    一主一从 、一主多从、双主、多主多从

    复制的工作原理:
    要想实现ab复制,那么前提是master上必须开启二进制日志
    1)首先master将数据更新记录到二进制日志文件中
    2)从slave start开始,slave通过I/O线程向master请求二进制日志文件,slave要知道向谁请求从哪个位置点请求
    3)master接收到slave的I/O请求之后,就会从相应的位置点开始,给slave传日志
    4)slave接收到日志后,会写入本地的中继日志中
    5)slave通过sql线程读取中继日志中的内容,在数据库中执行相应的操作,到此为止,master和slave上的数据一致,之后slave服务器进入等待状态,等待master的后续更新

    复制工作原理图:

     

     

     配置说明:

    安装配置
    1.准备工作
    1.关闭防火墙
    2.关闭selinux
    3.配置固定ip地址
    4.配置好yum源
    5.修改主机名

    2.实验环境
    master server:192.168.1.3   master.uplook.com     #主数据库
    slave server: 192.168.1.4   slave.uplook.com            #从库

    3.配置过程
    master配置 (主库所在服务器)
    1)安装软件
    安装MySQL数据库(没有安装的可以看这个参照 https://www.cnblogs.com/pxblog/p/10529943.html

    2)修改主库服务器的配置文件

    vim /etc/my.cnf

    [mysqld]
    log-bin=binlog //开启二进制日志
    server-id=1 //指定服务id

    3)启动服务

    systemctl start mysqld 

    4)查看服务是否被监听

     netstat -tulnp | grep 3306
    

      显示以下内容,说明启动成功(可能参数会有不同)

    tcp6       0      0 :::3306                 :::*                    LISTEN      11156/mysqld

      

    5)授权一个实现复制数据的用户 (出现问题,具体说明可以查看 https://www.cnblogs.com/pxblog/p/10721939.html

    mysql> grant replication slave,replication client on *.* to 'repluser'@'192.168.1.4' identified by '123456';
    

     

    在slave远程登陆 测试授权

    mysql -u repluser -h 192.168.1.3 -p123456
    

      

    slave配置(从库所在服务器)
    1)安装软件
    (一样安装MySQL数据库)

    2)修改配置文件

    vim /etc/my.cnf  

    [mysqld]
    server-id=2  //保证和主服务器不一致

    3)启动服务

    systemctl start mysqld
    

     

    4)查看服务是否被监听

    netstat -tulnp | grep 3306

    出现以下内容说明成功(可能参数会有不同)

    tcp6       0      0 :::3306                 :::*                    LISTEN      11156/mysqld

    5)在master(主库所在服务器)上查看,登录MySQL数据库

    mysql> show master statusG
    

     显示以下内容 

    *************************** 1. row ***************************
    File: binlog.000001
    Position: 154
    Binlog_Do_DB:
    Binlog_Ignore_DB:
    Executed_Gtid_Set:
    1 row in set (0.00 sec)

    6)从库所在数据库操作,进入从库,在slave上同步数据,需要告诉slave从master的哪个位置开始同步 (以下参数每个人可能不一样)

    mysql> change master to master_host='192.168.1.3',
    master_port=3306,master_user='repluser',
    master_password='123456',
    master_log_file='binlog.000001',master_log_pos=154;  

      说明:

            master_host:数据库服务器ip

            master_port:数据库端口

            master_user:用户

            master_password:密码

            master_log_file:值与上面的File的参数对应

            master_log_pos:值与上面的Position的值一样

    7)在启动从服务器

    mysql> start slave;  

    Query OK, 0 rows affected (0.00 sec)

    8)查看从服务器的状态

    mysql> show slave statusG;

    Slave_IO_Running: Yes //确保io和sql线程是yes
    Slave_SQL_Running: Yes

    测试:主从同步是否成功
    在master上创建表插入数据
    在slave上查看是否有该表
    有表示主从同步完成

    问题:
    1.如果change语句有问题
    mysql>slave stop;
    change语句问题原因
    1)可能多空格
    2)关键字不正确
    2.同步数据的账户无法连接主服务器
    1)账户密码错误
    2)无法远程登陆

    给所有表加读锁
    > flush tables with read lock;
    解锁
    > unlock tables;

  • 相关阅读:
    MVC4.0系统开发新手历程1
    hdu1205(类似 分布垃圾数列)
    python manage.py startapp app 时候报错No module named _sqlite3
    delphi 文件夹权限设置(执行一个小脚本的笨办法)
    FreeBSD 10安装KDE桌面环境简介(亲测bsdconfig命令有效)
    Qt的目录依赖问题----怎样生成一个绿色的Qt软件包
    Qt5位置相关函数异同详解(附源码)
    Qt 设置背景图片3种方法(三种方法:QPalette调色板,paintEvent,QSS)
    简单实现android和wp聊天
    进程间通讯之mmap文件共享
  • 原文地址:https://www.cnblogs.com/pxblog/p/12501417.html
Copyright © 2011-2022 走看看