mariadb多源复制 muiltil source replication

环境:centos-6.5      Mariadb:10.1.13-MariaDB

多源复制:企业数据库中写的需求较大,以至于I/O负载比较大,那么就必须把写的操作分摊到多台主服务器上进行,然后在将主服务器上的数据汇总到从服务器上去进行数据分析。或者是将异地数据库的数据汇总到一起。注意:每台主服务上的库是不能相同的。

  proxy-mysql:192.168.88.139

  master1:192.168.88.147

  master2:192.168.88.148

  slave1:192.168.88.149

  slave2:192.168.88.150

一、1.编辑master1的配置文件:

1 编辑/etc/my.cnf,修改如下两行:
2     [[email protected] ~]# vim /etc/my.cnf
3         log-bin = /mylogs/mysql-bin    #二进制日志存放位置
4         server-id = 10            #mysql服务器id,同一集群里的所有server-id都不能相同
5
6     

  2.创建二进制日志目录,并重启:

1 [[email protected] ~]# mkdir /mylogs2 [[email protected] ~]# chown mysql.mysql -R /mylogs
3 [[email protected] ~]# service mysqld restart

  3.连接mysql服务器,进行复制用户授权:

1 MariaDB [(none)]>  grant replication slave,replication client on *.* to ‘daixiang‘@‘192.168.88.%‘ identified by ‘daixiang‘;    #在生产环境,为了安全起见,千万记住要指定单台被授权的主机

2 MariaDB [(none)]>  flush privileges;

二、1.编辑master2的配置文件:

1 编辑/etc/my.cnf,修改如下两行:
2     [[email protected] ~]# vim /etc/my.cnf
3         log-bin = /mylogs/mysql-bin    #二进制日志存放位置
4         server-id = 20            #mysql服务器id,同一集群里的所有server-id都不能相同
5
6     

  2.创建二进制日志目录,并重启:

1 [[email protected] ~]# mkdir /mylogs2 [[email protected] ~]# chown mysql.mysql -R /mylogs
3 [[email protected] ~]# service mysqld restart

 

  3.连接mysql服务器,进行复制用户授权:

1 MariaDB [(none)]>  grant replication slave,replication client on *.* to ‘daixiang‘@‘192.168.88.%‘ identified by ‘daixiang‘;2 MariaDB [(none)]>  flush privileges;

三、1.编辑slave1配置文件并重启mysql:

1 编辑/etc /my.cnf修改如下几行:
2 [[email protected] ~]# vim /etc/my.cnf
3         server-id  = 30
4         relay-log = relay-mysql     #启用中继日志
5         #log-bin=mysql-bin     #不启用二进制日志

6 [[email protected] ~]# service mysqld restart 

  2.连接slave1,分别指定master1和master2的位置,并启动I/O_thread和SQL_thread:

1 MariaDB [(none)]> change master ‘m1‘ to MASTER_HOST=‘192.168.88.147‘,MASTER_USER=‘daixiang‘,MASTER_PASSWORD=‘daixiang‘;
2 MariaDB [(none)]> change master ‘m2‘ to MASTER_HOST=‘192.168.88.148‘,MASTER_USER=‘daixiang‘,MASTER_PASSWORD=‘daixiang‘;   #分别指定主服务器并设置别名为m1和m23 MariaDB [(none)]> start all slaves;

4 MariaDB [(none)]> help change master to;    #查看change master to命令用法

  3.查看从服务器slave1的状态:

MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.88.147
                  Master_User: daixiang
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000005
          Read_Master_Log_Pos: 586
               Relay_Log_File: relay-mysql.000006
                Relay_Log_Pos: 874
        Relay_Master_Log_File: mysql-bin.000005
             Slave_IO_Running: Yes           #表示I/O_thread启动成功
            Slave_SQL_Running: Yes        #表示SQL_thread启动成功
              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:     #如果此处出现错误提示,一般情况是需要指定主服务器上position:下面有详细解释
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 586
              Relay_Log_Space: 1736
              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
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: 10
               Master_SSL_Crl:
           Master_SSL_Crlpath:
                   Using_Gtid: No
                  Gtid_IO_Pos:
      Replicate_Do_Domain_Ids:
  Replicate_Ignore_Domain_Ids:
                Parallel_Mode: conservative
1 row in set (0.00 sec)

#注意:如果上面启动复制线程和执行中继日志语句线程时,使用show all slaves status\G时,出现错误提示;一般情况是因为初始化数据库时,主从服务器上的库是相同的,而从服务器是从最开始的位置同步主服务器上的二进制日志进自己中继日志并执行,那么从服务器上原本就已经有了系统库,如果在执行一遍中继日志那么就会产生冲突,所以必须要指定position,我使用的是Mariadb:10.1.13-MariaDB,很幸运,没出现此错误:  解决方法:1.切换到主服务器上查看其状态:
MariaDB [mage]> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000005 |      721 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

2.在到从服务器上执行下面语句: MariaDB [(none)]> STOP ALL SLAVES; MariaDB [(none)]> change master ‘m1‘ to MASTER_HOST=‘192.168.88.147‘,MASTER_USER=‘daixiang‘,MASTER_PASSWORD=‘daixiang‘,MASTER_LOG_FILE=‘mysql-bin.000005‘,MASTER_LOG_POS=721;MariaDB [(none)]> START ALL SLAVES;
  

四、1.编辑slave2配置文件并重启mysql:

1 编辑/etc /my.cnf修改如下几行:
2 [[email protected] ~]# vim /etc/my.cnf
3         server-id  = 40
4         relay-log = relay-mysql     #启用中继日志
5         #log-bin=mysql-bin     #不启用二进制日志

6 [[email protected] ~]# service mysqld restart

  

  2.连接slave1,分别指定master1和master2的位置,并启动I/O_thread和SQL_thread:

1 MariaDB [(none)]> change master ‘m1‘ to MASTER_HOST=‘192.168.88.147‘,MASTER_USER=‘daixiang‘,MASTER_PASSWORD=‘daixiang‘;
2 MariaDB [(none)]> change master ‘m2‘ to MASTER_HOST=‘192.168.88.148‘,MASTER_USER=‘daixiang‘,MASTER_PASSWORD=‘daixiang‘;3 MariaDB [(none)]> start all slaves;

MariaDB [(none)]> help change master to;    #查看change master to命令用法

  3.查看从服务器slave2的状态:

MariaDB [(none)]> show all slaves status\G
*************************** 1. row ***************************
              Connection_name: m1
              Slave_SQL_State: Slave has read all relay log; waiting for the slave I/O thread to update it
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.88.147                   #master1的地址
                  Master_User: daixiang
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000005
          Read_Master_Log_Pos: 586
               Relay_Log_File: mysql-relay-m1.000006
                Relay_Log_Pos: 874
        Relay_Master_Log_File: mysql-bin.000005
             Slave_IO_Running: Yes                            #已启动I/O_thread线程
            Slave_SQL_Running: Yes                #已启动SQL_thread线程
              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: 586
              Relay_Log_Space: 1739
              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
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: 10
               Master_SSL_Crl:
           Master_SSL_Crlpath:
                   Using_Gtid: No
                  Gtid_IO_Pos:
      Replicate_Do_Domain_Ids:
  Replicate_Ignore_Domain_Ids:
                Parallel_Mode: conservative
         Retried_transactions: 0
           Max_relay_log_size: 1073741824
         Executed_log_entries: 37
    Slave_received_heartbeats: 8
       Slave_heartbeat_period: 1800.000
               Gtid_Slave_Pos: 0-20-3
*************************** 2. row ***************************
              Connection_name: m2
              Slave_SQL_State: Slave has read all relay log; waiting for the slave I/O thread to update it
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.88.148              #master2的地址
                  Master_User: daixiang
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000005
          Read_Master_Log_Pos: 585
               Relay_Log_File: mysql-relay-m2.000006
                Relay_Log_Pos: 873
        Relay_Master_Log_File: mysql-bin.000005
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              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: 585
              Relay_Log_Space: 1738
              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
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: 20
               Master_SSL_Crl:
           Master_SSL_Crlpath:
                   Using_Gtid: No
                  Gtid_IO_Pos:
      Replicate_Do_Domain_Ids:
  Replicate_Ignore_Domain_Ids:
                Parallel_Mode: conservative
         Retried_transactions: 0
           Max_relay_log_size: 1073741824
         Executed_log_entries: 37
    Slave_received_heartbeats: 8
       Slave_heartbeat_period: 1800.000
               Gtid_Slave_Pos: 0-20-3
2 rows in set (0.00 sec)

五、验证:

  1.在master1上创建一个库dxdb ,在dxdb库里面创建表daixiang,并在里面插入一些数据:

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| dxdb               |
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.05 sec)

MariaDB [(none)]> use dxdb
Database changed
MariaDB [dxdb]> show tables;
+----------------+
| Tables_in_dxdb |
+----------------+
| daixiang       |
+----------------+
1 row in set (0.00 sec)

MariaDB [dxdb]> select * from daixiang;
  +------+
  | name |
  +------+
  | tom |
  | jeck |
  +------+
  2 rows in set (0.01 sec)

  2.在master2上创建一个库mage_db,在mage_db库里面创建表mage_tb,并在里面插入一些数据:

MariaDB [mage]> show databases;
+------------------------+
| Database               |
+------------------------+
| information_schema     |
| mage_db                   |
| mysql                  |
| performance_schema     |
| test                   |
+------------------------+
5 rows in set (0.00 sec)

  3.在slave1上验证是否已经成功汇总:

MariaDB [mage]> show databases;
+--------------------+
| Database           |
+--------------------+
| dxdb               |
| information_schema |
| mage_db               |
| mysql              |
| performance_schema |
| test               |
+--------------------+
6 rows in set (0.00 sec)

  4.在slave2上验证是否已经成功汇总:

MariaDB [mage]> show databases;
+--------------------+
| Database           |
+--------------------+
| dxdb               |
| information_schema |
| mage               |
| mysql              |
| performance_schema |
| test               |
+--------------------+
6 rows in set (0.00 sec)

  

时间: 2024-11-06 11:19:49

mariadb多源复制 muiltil source replication的相关文章

mariadb 多源复制

最近做慢sql优化,比较头疼,看到慢sql中全是一些select  count(*) 或者sum这样的聚合统计的sql,由于本人的数据库就是传统的主从,或者一主多从,这样的慢sql直接在数据库上统计,对线上存在一定影响,而且由于多个db主从,统计一些相关数据也相对比较麻烦,所以决定搭建一台专门用来给运营或者聚合统计操作查询的多主从库,汇集线上数据,方便查询,也可以减少这些统计对线上库的影响! 搭建前,先说一下以前官方mysql版本都只支持一个master向一个slave复制,而mariadb 从

mariadb 10 多源复制(Multi-source replication) 业务使用场景分析,及使用方法

mariadb 10 多源复制(Multi-source replication) 业务使用场景分析,及使用方法 官方mysql一个slave只能对应一个master,mariadb 10开始支持多源复制,一个slave可以有多个master,分别从各自的master复制不同的DB. 这个特性可以用在OLAP环境中,传统电商DB都是拆了再拆,分库分表,sharding,而OLAP环境或者大数据平台环境,通常需要各种数据的聚合,多个平台多个DB数据的复合查询,而这些数据分散在各个库中,怎么办了,当

mariadb multi-source replication(mariadb多主复制)

下文一起来看看mariadb multi-source replication(mariadb多主复制)例子,希望对各位有帮助. mariadb multi-source replication(mariadb多主复制)在mariadb-10.0里面加入了多主复制功能. 修改过的语法:针对每个复制线程会有一个对应的connection_name,而connection_name是default_master_connection变量的值,如果你要操作对应的复制线程,需要将这个变量设置为对应的复制

MariaDB的GTID复制和多源复制

什么是GTID? GTID就是全局事务ID(global transaction identifier ),最初由google实现,官方MySQL在5.6才加入该功能.GTID实际上是由UUID+TID组成的.其中UUID是一个MySQL实例的唯一标识.TID代表了该实例上已经提交的事务数量,并且随着事务提交单调递增. 什么是多源复制? 多源复制意味着一个服务器能从多个从服务器上复制.这是MariaDB 10.0的一个新特性. 实验系统:CentOS 6.6_x86_64 实验前提:防火墙和se

mysql多源复制详解

大家应该知道,mysql比起其他数据库,最大的特色是就是主从复制,不过5.7之前的版本最多就只支持一主多从的复制方式,对于一些统计类的需求,就需要跨库,这是比较麻烦的事情,以往只能交由数据库中间件(mycat等)去做这种事情,还有备份操作,也只能一个个库的用脚本去轮询或并发备份,不可谓不费时费力.然后,多源复制的概念出来了. 多源复制的概念最早是mariadb社区提出的,后来mysql官方积极引入到5.7的版本中来(5.6最新版也是没有这个功能的),percona就不说了,也是随后推出.这个功能

mariadb-10GTID复制及多源复制

---本文大纲 一.什么是GTID 二.应用场景 三.多线程复制说明 四.实现过程 五.多源复制原理 六.实现过程 ---------------------------------- 一.什么是GITD 自MySQL 5.6引入的GTID(Global Transaction IDs)使得其复制功能的配置.监控及管理变得更加易于实现,且更加健壮.官方文档在这篇文档里,我们可以知道全局事务 ID 的官方定义是:GTID = source_id:transaction_id gtid 是一个 un

MySQL多源复制(八)

一.什么是多源复制 MySQL 5.7发布后,在复制方面有了很大的改进和提升.比如开始支持多源复制(multi-source)以及真正的支持多线程复制了.多源复制可以使用基于二进制日子的复制或者基于事务的复制.下面我们说一说如何配置基于二进制日志的多源复制. 首先,我们要清楚几种常见的复制模式: 一主一从 一主多从 级联复制 multi-master MySQL 5.7 之前只能支持一主一从,一主多从或者多主多从的复制.如果想实现多主一从的复制 只能使用mariadb,但是mariadb又与官方

MySQL 5.7的多源复制

MySQL 5.7已经开始支持了多源复制,相信小伙们都很激动,MySQL 5.7之前只能实现一主一从.一主多从或者多主多从的复制,如果想实现多主一从的复制,只好使用MariaDB,但是MariaDB又与官方的MySQL版本不兼容的,在MySQL 5.7版本已经可以实现多主一从的复制了.MySQL 5.7版本相比之前的版本,无论在功能还是性能.安全等方面都已经提升了不少,值得大家去研究和使用. MySQL 5.7版本之前的最常见的复制方式,一主一从或者一主多从的架构: MySQL 5.7之后就可以

MySQL多源复制搭建

1.1     实验概要 1.1.1  实验假设 本实验假设已经完成操作系统和MySQL安装部署. 1.1.2  实验目的 MySQL5.7的多源复制技术搭建部署,然后简单测试. 1.1.3  环境信息 操作系统 MySQL版本 服务器地址 服务器角色 Centos7 5.7.18 192.168.102.23 source 1 Centos7 5.7.18 192.168.102.24 source 2 Centos7 5.7.18 192.168.102.25 target 1.1.4  实