• 主主复制:主从相互授权连接,读取对方binlog日志并更新到本地数据库的过程;只要对方数据改变,自己就跟着改变。

本节介绍主主复制模式的配置。

前提条件

已安装MySQL两台服务器。服务器规划示例如表1所示。

表1 MySQL服务器规划示例

服务器名称

服务器IP

MySQL server1

10.10.10.31

MySQL server2

10.10.10.32

操作步骤

  1. 以root用户登录MySQL server1。
  2. 配置MySQL server1的my.cnf文件。
    1. 执行以下命令,编辑配置文件。

      # vi /etc/my.cnf

    2. 在[mysqld]部分添加下面加黑参数。其中,“bind-address”参数请修改为MySQL服务器的地址。
      说明:

      本步骤中的参数为新增,请保留3.b.i步骤中的其他配置参数。

      #主标服务标识号,必需唯一
      server-id = 1
      # the bind ip
      bind-address = 10.10.10.30 #log_bin日志名称格式:${datadir}/mysql-bin.0000*
      log_bin = mysql-bin
      log_bin_trust_function_creators=1 #日志内容记录格式
      binlog_format = mixed #不建议使用这种配置,如果跨域操作会出现同步异常。
      # binlog_do_db = dbname
      # binlog_ignore_db = dbname #设置需要同步的数据库名,多个数据库时配置多次该语句。
      replicate-wild-do-table=apigwdb.%
      replicate-wild-do-table=apimarkdb.%
      replicate-wild-do-table=livedata.%
      replicate-wild-do-table=mqs_web.%
      replicate-wild-do-table=iot_web.%
      replicate-wild-do-table=roma_fdi_prod.%
      replicate-wild-do-table=roma_quartz.%
      replicate-wild-do-table=roma_web.%
      replicate-wild-do-table=roma_config. log-slave-updates #经过1日志写操作就把日志文件写入硬盘一次(对日志信息进行一次同步)。n=1是最安全的做法,但效率最低。默认设置是n=0。
      sync_binlog = 1 #auto_increment_offset=1设置步长,这里设置为1,这样Master的auto_increment字段产生的数值是:1, 3, 5, 7, …等奇数ID
      auto_increment_offset = 1 #auto_increment_increment=n有多少台服务器,n就设置为多少
      auto_increment_increment = 2 #忽略所有复制产生的错误
      slave-skip-errors = all
      说明:

      replicate-wild-do-table参数的配置请参考表9

    3. 修改完成后,执行:wq! 保存退出。
    4. 重启MySQL。

      # cd /opt/mysql/support-files

      # mysql.server stop

      # mysql.server start

    5. 查看MySQL状态。

      # mysql.server status

  3. 以root用户登录MySQL server2。
  4. 配置MySQL server2的my.cnf文件。
    1. 执行以下命令,编辑配置文件。

      # vi /etc/my.cnf

    2. 在[mysqld]部分添加下面加黑参数。其中,“bind-address”参数请修改为MySQL服务器的地址。
      说明:

      本步骤中的参数为新增,请保留3.b.i步骤中的其他配置参数。

      #主标服务标识号,必需唯一(区别于server11)
      server-id = 2 # the bind ip
      bind-address = 10.10.10.31 #log_bin日志名称格式:${datadir}/mysql-bin.0000*
      log_bin = mysql-bin
      log_bin_trust_function_creators=1 #日志内容记录格式
      binlog_format = mixed #不建议适用这种配置,如果跨域操作会出现同步异常。
      # binlog_do_db = dbname
      # binlog_ignore_db = dbname #设置需要同步的数据库名,多个数据库时配置多次该语句。
      replicate-wild-do-table=apigwdb.%
      replicate-wild-do-table=apimarkdb.%
      replicate-wild-do-table=livedata.%
      replicate-wild-do-table=mqs_web.%
      replicate-wild-do-table=iot_web.%
      replicate-wild-do-table=roma_fdi_prod.%
      replicate-wild-do-table=roma_quartz.%
      replicate-wild-do-table=roma_web.%
      replicate-wild-do-table=roma_config.% log-slave-updates #经过1日志写操作就把日志文件写入硬盘一次(对日志信息进行一次同步)。n=1是最安全的做法,但效率最低。默认设置是n=0。
      sync_binlog = 1 #auto_increment_offset=1设置步长,这里设置为2,这样Master的auto_increment字段产生的数值是:2,4,6,8 …等偶数ID
      auto_increment_offset = 2 #auto_increment_increment=n有多少台服务器,n就设置为多少,
      auto_increment_increment = 2 #忽略所有复制产生的错误
      slave-skip-errors = all
    3. 修改完成后,执行:wq! 保存退出。
    4. 重启MySQL。

      # cd /opt/mysql/support-files

      # mysql.server stop

      # mysql.server start

    5. 查看MySQL状态。

      # mysql.server status

  5. 设置MySQL server2同步更新MySQL server1。
    1. 以root用户登录MySQL server1。
    2. 进入MySQL控制台。

      # cd /opt/mysql/bin

      # mysql -u root -p

      按照提示信息输入待连接的MySQL服务器的数据库root用户的密码:

      Enter Password:

      登录成功后系统显示如下类似信息:

      Enter password:
      Welcome to the MySQL monitor. Commands end with ; or \g.
      Your MySQL connection id is 4381
      Server version: 5.7.24-enterprise-commercial-advanced MySQL Enterprise Server - Advanced Edition (Commercial) Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its
      affiliates. Other names may be trademarks of their respective
      owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
      mysql>
    3. 锁MySQL server1表。

      mysql> flush tables with read lock;

    4. 查看MySQL server1状态。

      mysql> show master status;

      系统显示如下类似信息:

      +---------------+----------+--------------+------------------+------------------------------------------------+
      | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
      +---------------+----------+--------------+------------------+------------------------------------------------+
      | binlog.000004 | 194 | test | mysql | 39380c8b-aa71-11e8-8dc6-286ed488ec36:1-3319087 |
      +---------------+----------+--------------+------------------+------------------------------------------------+
      1 row in set (0.00 sec)
    5. 以root用户登录MySQL server2。
    6. 进入MySQL控制台。

      # cd /opt/mysql/bin

      # mysql -u root -p

      按照提示信息输入待连接的MySQL服务器的数据库root用户的密码:

      Enter Password:
    7. 停止slave同步进程。

      mysql> stop slave;

    8. 执行同步语句。

      mysql> change master to master_host='10.10.10.31',master_user='root',master_password='Password',master_log_file='binlog.000004' ,master_log_pos=194;

      其中,

      • master_host设置为MySQL Server1的地址。
      • master_user设置为同步用户名,此处使用root用户。
      • master_password设置为同步用户密码。
      • master_log_file设置为MySQL Server1的show master status;命令执行结果File列的值。
      • master_log_pos设置为MySQL Server1的show master status;命令执行结果Position列的值。
    9. 开启slave同步进程。

      mysql> start slave;

    10. 查看slave同步信息

      mysql> show slave status\G;

      ...
      Slave_IO_Running:Yes
      Slave_SQL_Running:Yes
      ...

      若显示信息中以上两个参数为yes,即说明配置成功。

  6. 设置server1同步更新server2,步骤与5类似。
  7. 分别在MySQL Server1和MySQL Server2的控制台执行以下命令,解锁数据库表。

    mysql> unlock tables;

  8. 检测数据库主主同步是否设置成功。

    在任意MySQL创建数据库并创建表,插入数据,在另一MySQL查看是否同步成功。

Linux下MySQL主主同步的更多相关文章

  1. Linux下MySQL数据库主从同步配置

    说明: 操作系统:CentOS 5.x 64位 MySQL数据库版本:mysql-5.5.35 MySQL主服务器:192.168.21.128 MySQL从服务器:192.168.21.129 准备 ...

  2. Linux下 MYSQL 主从复制、同步

    mysql从3.23.15版本以后提供数据库复制功能.利用该功能可以实现两个数据库同步,主从模式(A->B),互相备份模式(A<=>B)的功能. 主从模式(A->B)的配置过程 ...

  3. linux下MySQL安装登录及操作

    linux下MySQL安装登录及操作 二.安装Mysql 1.下载MySQL的安装文件 安装MySQL需要下面两个文件: MySQL-server-4.0.16-0.i386.rpm MySQL-cl ...

  4. Linux下MySQL/MariaDB Galera集群搭建过程【转】

    MariaDB介绍 MariaDB是开源社区维护的一个MySQL分支,由MySQL的创始人Michael Widenius主导开发,采用GPL授权许可证. MariaDB的目的是完全兼容MySQL,包 ...

  5. linux下mysql设置主从

    一  主服务器修改 mysql的主从设置主要原理是 主数据库开启日志,并且创建从服务器专属账户,从服务器用该账户,读取到日志进行同步 准备两个mysql数据库(如何安装请查看,linux下mysql安 ...

  6. linux下mysql基于mycat做主从复制和读写分离之基础篇

    Linux下mysql基于mycat实现主从复制和读写分离1.基础设施 两台虚拟机:172.20.79.232(主) 172.20.79.233(从) 1.1软件设施 mysql5.6.39 , my ...

  7. .Neter玩转Linux系列之六:Linux下MySQL的安装、配置、使用

    一.Linux安装MySQL (1)下载安装包:https://dev.mysql.com/downloads/mysql/ (2)解压并安装 命令:tar zxvf 文件名 解压完成之后,重名一下文 ...

  8. Linux下mysql的常用操作

    Linux下mysql的常用操作: 显示数据库 show databases; 选择数据库 use 数据库名; 显示数据库中的表 show tables; 显示数据表的结构 describe 表名; ...

  9. Linux下MySQL的简单操作

    Linux下MySQL的简单操作 更改mysql数据库root的密码 首次进入数据库是不用密码的: [root@localhost ~]# /usr/local/mysql/bin/mysql -ur ...

  10. windows下mysql和linux下mysql主从配置

    1. linux下mysql安装版本5.6   windows下mysql版本5.7  不要问我为什么版本不一致  就是想这么搞 2. linux为主服务器   windows为从服务器 3.找到li ...

随机推荐

  1. Java ERROR JDWP Unable to get JNI 1.2 environment, jvm

    Java: ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2 DWP exit erro ...

  2. redis命令学习(二) · THIS SPACE

    列表(Lists)操作命令 Redis列表是简单的字符串列表,按照插入顺序排序. 你可以添加一个元素导列表的头部(左边)或者尾部(右边)LPUSH命令插入一个新的元素导头部,而RPUSH插入一个新元素 ...

  3. BeWhatever

    Hadoop Distributed File System:分布式文件系统. HDFS基于流数据模式访问和处理超大文件需求开发,具有高容错性,高可靠性,高可扩展性,多部署在低成本的硬件上.HDFS提 ...

  4. zabbix监控mysql数据库信息脚本

    ---恢复内容开始--- 在/usr/local/zabbix/etc/zabbix_agentd.conf增加 # 获取mysql性能指标 UserParameter=mysql.status[*] ...

  5. drbd配置

    DRBD就是网络RAID1,可以通过网络同步两个主机上的硬盘,drbd每次只允许对一个节点进行读写访问. 一.安装DRBD CentOS 6.x rpm -ivh http://www.elrepo. ...

  6. 安卓权威编程指南 挑战练习:实现高效RecyclerView刷新

    Adapter的notifyDataSetChanged方法会通知RecyclerView刷新全部的可见列表项. 在CriminalIntent应用里,这个方法不够高效,我们知道,返回CrimeLis ...

  7. 用pyqt5简单实现Mqtt调试助手-初学python

    最近在学习pyqt5,因为我们是做远程物联网设备的,所以就做个mqtt调试助手来练手.第一次做这种程序,没有加异常处理,会有很多不足,欢迎留言拍砖,直接上代码了 这个是程序入口, # 使用前先安装py ...

  8. 量化投资学习笔记29——《Python机器学习应用》课程笔记03

    聚类的实际应用,图像分割. 利用图像的特征将图像分割为多个不相重叠的区域. 常用的方法有阈值分割,边缘分割,直方图法,特定理论(基于聚类,小波分析等). 实例:利用k-means聚类算法对图像像素点颜 ...

  9. 记php封装app 广告植入问题

    <meta http-equiv="X-Frame-Options" content="DENY"> <script type="t ...

  10. STL标准库中的容器

    容器:顾名思义,我的理解就是把同一种数据类型括起来,作为一捆.如vector<int> ,vector就是个容器,里面全是一个个的int型数据. 容器包括三大块: 顺序型容器: (1)ve ...