实现mysql级联复制

所谓级联复制就是master服务器,只给一台slave服务器同步数据,然后slave服务器在向后端的所有slave服务器同步数据,降低master服务器的写压力,和复制数据的网络IO。

一,配置master服务器

1,修改主配置文件

    vim /etc/my.cnf
      在[mysql]配置块下添加如下两行配置
       [mysql]
       log_bin          #开启二进制日志功能
       server_id=1      #为当前节点设置一个全局惟一的ID号 

2,重启mysql服务,使配置生效

    systemctl restart mairadb

3,创建有复制权限的用户账号

GRANT REPLICATION SLAVE  ON *.* TO ‘repluser‘@‘HOST‘ IDENTIFIED BY ‘replpass‘; 

    命令解析:
        ‘repluser‘@‘HOST‘ :设置用户名即主机ip或网段,网段用%表示 例如10.0.0.%
        IDENTIFIED BY:设置密码
        *.* :表示所有数据库,所有表
        GRANT REPLCATION SLAVE:就是允许该用户复制数据

    该命令作用就是授权repluser能拷贝数据库的所有内容

二,中继slave服务器配置

1,修改主配置文件

    vim /etc/my.cnf
   在[mysql]配置块中添加如下两行配置
        [mysqld]
        log_bin
        server_id=2      #为当前节点设置一个全局惟一的ID号
                read_only=ON #限制从服务器为只读."注意:此限制对拥有SUPER权限的用户均无效"
        log_slave_updates #该项的作用是把master服务器的二进制日志计入到本机,然后再把二进制日志复制给后端的其他slave服务器

2,重启mysql服务,使配置生效

    systemctl  restart mariadb

3,使用有复制权限的用户账号连接至主服务器,并启动复制线程

     CHANGE MASTER TO
     MASTER_HOST=‘host‘,        #指定master主机IP
     MASTER_USER=‘repluser‘,    #指定master被授权的用户名
     MASTER_PASSWORD=‘replpass‘,#指定被授权的用户密码 MASTER_LOG_FILE=‘mysql-bin.xxxxx‘, #指定从master服务器的那个二进制日志开始复制
     MASTER_LOG_POS=#;          #二进制日志位置,可以在master服务器上执行该命令查看,show master logs;

     启动复制线程IO_THREAD和SQL_THREAD
     START SLAVE; 

4,查看中继slave服务器状态


    MariaDB [(none)]> start slave;
    Query OK, 0 rows affected (0.00 sec)

    MariaDB [(none)]> show slave status\G
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 192.168.68.7
                      Master_User: repluser
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mariadb-bin.000001
              Read_Master_Log_Pos: 557
                   Relay_Log_File: mariadb-relay-bin.000002
                    Relay_Log_Pos: 843
            Relay_Master_Log_File: mariadb-bin.000001
                 Slave_IO_Running: Yes  "重点关注如果是NO表示线程没起来"
                Slave_SQL_Running: Yes "重点关注 如果是NO表示该线程没起来"
                  Replicate_Do_DB:
              Replicate_Ignore_DB:
               Replicate_Do_Table:
           Replicate_Ignore_Table:
          Replicate_Wild_Do_Table:
      Replicate_Wild_Ignore_Table:
                       Last_Errno: 0
                       Last_Error:
                     Skip_Counter: 0
              Exec_Master_Log_Pos: 557
                  Relay_Log_Space: 1139
                  Until_Condition: None
                   Until_Log_File:
                    Until_Log_Pos: 0
               Master_SSL_Allowed: No
               Master_SSL_CA_File:
               Master_SSL_CA_Path:
                  Master_SSL_Cert:
                Master_SSL_Cipher:
                   Master_SSL_Key:
            Seconds_Behind_Master: 0 "该项表示同步时间 0表示即使同步"
    Master_SSL_Verify_Server_Cert: No
                    Last_IO_Errno: 0
                    Last_IO_Error:
                   Last_SQL_Errno: 0
                   Last_SQL_Error:
      Replicate_Ignore_Server_Ids:
                 Master_Server_Id: 1

三,后端slave配置

1,修改配置文件

    vim /etc/my.cnf
        在[mysql]配置块中添加如下两行配置
            [mysqld]
            server_id=3     #为当前节点设置一个全局惟一的ID号
            read_only=ON #限制从服务器为只读."注意:此限制对拥有SUPER权限的用户均无效"

2,重启mysql服务,使配置生效

    systemctl restart mariadb

3,使用有复制权限的用户账号连接至主服务器,并启动复制线程

CHANGE MASTER TO
     MASTER_HOST=‘中继host‘,        #指定中继slave主机IP
     MASTER_USER=‘repluser‘,    #指定master被授权的用户名
     MASTER_PASSWORD=‘replpass‘,#指定被授权的用户密码 MASTER_LOG_FILE=‘mysql-bin.xxxxx‘, #指定从中继slave服务器的那个二进制日志开始复制
     MASTER_LOG_POS=#;          #二进制日志位置,可以在slave服务器上执行该命令查看,show master logs;

     启动复制线程IO_THREAD和SQL_THREAD
     START SLAVE; 

4,查看slave服务器状态


    MariaDB [(none)]> start slave;
    Query OK, 0 rows affected (0.00 sec)

    MariaDB [(none)]> show slave status\G
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 192.168.68.17
                      Master_User: repluser
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mariadb-bin.000001
              Read_Master_Log_Pos: 557
                   Relay_Log_File: mariadb-relay-bin.000002
                    Relay_Log_Pos: 843
            Relay_Master_Log_File: mariadb-bin.000001
                 Slave_IO_Running: Yes  "重点关注如果是NO表示线程没起来"
                Slave_SQL_Running: Yes "重点关注 如果是NO表示该线程没起来"
                  Replicate_Do_DB:
              Replicate_Ignore_DB:
               Replicate_Do_Table:
           Replicate_Ignore_Table:
          Replicate_Wild_Do_Table:
      Replicate_Wild_Ignore_Table:
                       Last_Errno: 0
                       Last_Error:
                     Skip_Counter: 0
              Exec_Master_Log_Pos: 557
                  Relay_Log_Space: 1139
                  Until_Condition: None
                   Until_Log_File:
                    Until_Log_Pos: 0
               Master_SSL_Allowed: No
               Master_SSL_CA_File:
               Master_SSL_CA_Path:
                  Master_SSL_Cert:
                Master_SSL_Cipher:
                   Master_SSL_Key:
            Seconds_Behind_Master: 0 "该项表示同步时间 0表示即使同步"
    Master_SSL_Verify_Server_Cert: No
                    Last_IO_Errno: 0
                    Last_IO_Error:
                   Last_SQL_Errno: 0
                   Last_SQL_Error:
      Replicate_Ignore_Server_Ids:
                 Master_Server_Id: 1

5,最后在master服务器上创建数据库测试即可查看是否同步

级联复制特点

  • 降低master服务器的压力,网络io压力
  • 但是会产生数据不一致的问题

总结

  • 中继slave需要打开二进制日志,必须加上log_slave_updates配置项
  • 注意read_only=ON作用,限制从服务器为只读."注意:此限制对拥有SUPER权限的用户均无效"

原文地址:http://blog.51cto.com/13598893/2092036

时间: 2024-08-07 03:13:24

实现mysql级联复制的相关文章

mysql级联复制

需求:三个服务器A->B->C级联主从 版本: 数据库 mysql 5.6_64bit_binary_install                            操作系统: centos 6.5_x86_64bit Master :  192.168.0.180        =>主节点 slave1   :    192.168.0.18    =>中继节点 slave2   :    192.168.4.88 1:    管理iptables , selinux ,/

MYSQL 完全备份、主从复制、级联复制、半同步

mysql 完全备份 1,启用二进制日志,并于数据库分离,单独存放 vim /etc/my.cnf 添加 log_bin=/data/bin/mysql-bin 创建/data/bin文件夹并授权 chown mysql.mysql /data/bin 2,完成备份数据库 mysqldump -A --single-transaction --master-data=2 | xz > /data/all.sql.xz 3,对数据库进行增删改 INSERT hellodb.students(stu

Mysql主从级联复制

场景1 如果主节点已经运行了一段时间,且有大量数据时,如何配置并启动slave节点 通过备份恢复数据至从服务器· 复制起始位置为备份时,二进制日志文件及其POS: Mater 设置 1) 修改配置文件 2) 备份出数据库,会自动刷新日志,查看bin 日志 [root@mysql-master ~]# mysqldump -A -F --single-transaction --master-data=1 > /root/all.sql MariaDB [(none)]> show binary

MYSQL数据库中的主从级联复制的实现

主服务ip:192.168.1.107 级联服务ip:192.168.1.110 从服务ip:192.168.1.106 一.主服务器设置: 1.修改配置文件 vim /etc/my.cnf server_id=1 设置主服务的id log_bin=/data/binlog/bin 开启并设置二进制日志文件路径,建议单独磁盘存放 bin_log_format=row 设置二进制日志记录方式为行记录方式,此记录更全面 innodb_file_per_table 每个表单独一个文件,查找起来更方便

(5.14)mysql高可用系列——级联复制

目录: [0]实验需求 级联复制,201为主库,202为从库/同时为203的主库,203为202的从库[1]实验环境 级联:A->B->C 实践思路: (1)直接拿A的xtrabackup的全备到 B和C 还远即可 (2)然后设置gtid_purged,最后change master 即可:[2]操作 [2.0]配置文件 my.cnf [2.1]在主库201创建复制用户 [2.2]在主库201创建测试数据 [2.3]备份与还原 [2.4]构建级联主从复制 [2.5]核验 正文: [0]实验需求

mariadb(mysql)复制、备份以及启用ssl

mariadb复制模型主从复制.半同步复制.双主复制.多主复制.以及启用ssl 环境:虚拟机CentOS6.5x64 mariadb-10.0.23 mariadb编译安装方式和mysql类同mariadb下载地址https://downloads.mariadb.org/ 原理:mysql的复制是将主服务器的二进制日志发往从服务器,从服务器保存为中继日志,然后将中继日志执行写入数据库的过程. 使用show global variables like '%log%';查看与日志相关的全局变量 使

数据库集群的级联复制完整实现

实验前的注意: 如果要启用级联复制,需要在从服务器启用以下配置: [mysqld] log_bin log_slave_updates log_slave_updates的作用:     因为默认从主服务器过来的二进制日志保存在从服务器的中继日志:并应用到本地数据库:     但是中间这个从服务器是即便是开启二进制日志的记录功能,他也是不记录到本地的二进制日志,     那么也就不能将对数据库的操作再传输到从的从服务器上去.当log_slave_updates启用后,     从服务器也就能将对

MySQL组复制(4):配置多主模型的组复制

在这一篇,我演示的是如何配置MySQL组复制的多主模型(multi-primary).在配置上,多主模型的组复制和单主模型基本没区别. 本文仅为搭建和维护多主模型组复制抛块小砖,若对其间涉及的术语和理论有所疑惑,可参看: 单主模型相关内容的大长文:配置单主模型的组复制. 组复制的理论:MySQL组复制官方手册翻译. 使用组复制技术,必须要了解它的要求和局限性.见:组复制的要求和局限性. 1.组复制:单主和多主模型 MySQL组复制支持单主模型和多主模型,它们都能保证MySQL数据库的高可用. 单

MySQL数据库复制过滤

在复制的时候只复制数据库中的部分表,可以减少主从服务器的压力 在主服务器上 binlog-bin-db仅将指定数据库相关的修改操作计入二进制日志(一般来讲)[白名单] binlog-ignore-db[黑名单] 一旦主数据库发生故障,则无法立即还原引起较大的损失,因此主端的二进制日志是完整的 从服务器上 replicate-do-db[白名单]只应用哪个数据库到本地 replicate-ignore-db[黑名单] replicate-do-table使用指定表 replicate-ignore