zoukankan      html  css  js  c++  java
  • mysql数据库多源复制方案

    概述

    由于目前生产环境的mysql数据库分布在两台服务器,若从单一主从来看,配置很简单,但是需要将两台服务器的数据库同步到一台从库上面,需要进行更多配置和注意事项。多源复制有两种方案,Binlog+Position和GTID,我们采用的是第一种方案Binlog+Position进行的多源复制。

    安装mysql

    在从库的服务器上安装mysql-5.7版本的,目前只有mysql5.7以上的版本才支持多源复制。

    配置mysql

    1、配置两台master的mysql

    在my.cnf配置文件中增加或修改以下参数:

    server_id = 90

    log_bin = master_1

    log-bin-index = master_1.index

    2、配置slave

    在my.cnf配置文件中增加或修改以下参数

    server_id = 92

    relay_log = slave

    relay_log_index = slave.index

    master-info-repository = TABLE

    relay-log-info-repository = TABLE

    replicate_ignore_db = mysql

    开始配置多源主从复制

    1、设置master

    在master新建slave复制用户:

    grant replication slave,replication client on *.* to repl@'192.168.2.92' identified by 'repl';

    flush privileges;

    分别进入两台master的mysql终端执行以下命令将mysql进行锁表操作

    flush tables with read lock;

    然后执行show master status; 获取master的log_bin_file的文件名和file_size。

    分别导出两台master的mysql需要备份的数据库的结构和数据。

    2、设置slave

    登入slave的mysql终端,新建需要备份的数据库(例:CREATE DATABASE `order_00` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;)

    进入各个数据库导入master备份的数据库的结构和数据(所花时间长短取决于数据量的大小)。

    在slave执行完以上步骤后开始配置从复制,先执行stop slave; 然后slave复制master配置如下:

    change master to master_host='192.168.2.91',master_port=3507,master_user='repl',master_password='repl',master_log_file='master_91.000001',master_log_pos=376 FOR CHANNEL 'master_91';

    注意:需要分别配置两台master,然后分别执行。

    以上配置命令执行完成后,启动slave执行命令:start slave;

    检查slave有没有启动成功:

    Slave_IO_Running: Yes

    Slave_SQL_Running: Yes

    以上两项为yes代表配置多源主从复制成功。

    最后分别在master库执行命令unlock tables;解除锁表。

    测试

    分别在两台master中的数据库中抽查几个数据库进行新建数据表和数据,对master的新建表数据进行手动增删改查,然后查询slave有没有进行同步,若和master的数据一致,则表示多源主从复制成功,若没有同步则不成功,不成功从第一步开始检查。

    注意事项

    1、遇到Slave_IO_Running: connection的时候,检查master和slave的防火墙,若防火墙没有问题,检查change master配置的时候IP,port,user,pwd等。

    2、遇到Slave_IO_Running: Yes,Slave_SQL_Running: Yes都是yes却数据不同步的时候检查my.cnf配置文件中replicate-do-db参数。可以将其注释或者分库单独写。

    3、一定要在master锁表后才能进行数据的导出,不然可能会导致主从数据不一致。

    4、再所有步骤完成后一定要解除master的锁表,不然master插入数据会报错。

  • 相关阅读:
    使用Struts时,JSP中如何取得各个会话中的参数值?
    JUnit —— TestSuite 的使用
    如何修改 Ubuntu 的字符集?
    如何修改 VIM 制表符的空格数?
    最遥远的距离
    二分法求平方根(Python实现)
    Hadoop 学习之路之MapReduce原理
    JDK 1.8源码阅读 TreeMap
    JDK 1.8源码阅读 HashMap
    JDK 1.8源码阅读 HashSet
  • 原文地址:https://www.cnblogs.com/xiongyoutom/p/8286668.html
Copyright © 2011-2022 走看看