文档章节

14-4/5 MySQL 主主同步

阿想
 阿想
发布于 2017/09/02 21:44
字数 784
阅读 11
收藏 1
点赞 0
评论 0

MySQL 主主同步

准备工作

设备: 服务器A 10.1.1.7 服务器B 10.1.1.8

环境:CentOS7.3

目标:两台服务器主主同步,实现高可用,

安装MySQL 5.1绿色版: wget~tar~mv~useradd~mkdir~scripts/~cp support x2~vim~chkconfig~start

配置主主同步

关防火墙

systemctl stop firewalld
systemctl disable firewalld

调整my.cnf配置

A:

vim /etc/my.cnf
~
[mysqld]
server-id       = 1
auto_increment_offset = 1
auto_increment_increment = 2

log-bin=mysql-bin
log-slave-updates

B:

vim /etc/my.cnf
~
[mysqld]
server-id       = 2
auto_increment_offset = 2
auto_increment_increment = 2

log-bin=mysql-bin
log-slave-updates

注: server-id 不能一样,可以考虑改为IP末位

auto_increment_offset 为(主键)起始值,两台设备主键相同会导致主主断裂,需要错开

auto_increment_increment 为(主键)增长值,因为起始值已经错开,增加的值为错开值即可保证不会冲突。

举个例子:四台设备a,b,c,d的主键起始值分别为1,2,3,4。增长值为4。a主键则会以1,5,9,13...增长,b主键会以2,6,10,14...增长,c主键以3,7,11,15增长,d我懒得写了。反正结果是不会出现主键冲突。两台设备则呈现主键奇偶增长。

调整数据库

将mysql命令加入PATH

echo "PATH=$PATH:/usr/local/mysql/bin/" >> .bash_profile
source !$

A上操作:A给B开户,查看A主信息

mysql -uroot 
mysql> grant replication slave on *.* to 'repl'@'10.1.1.8' identified by 'axianglinux';
mysql> flush privileges;
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000007 |      106 |              |                  |
+------------------+----------+--------------+------------------+

B上操作:B从A

mysql> change master to master_host='10.1.1.7',master_port=3306,master_user='repl',master_password='axianglinux',master_log_file='mysql-bin.000007',master_log_pos=106;
mysql> start slave;
mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.1.1.7
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000007
          Read_Master_Log_Pos: 106
               Relay_Log_File: axiang-02-relay-bin.000002
                Relay_Log_Pos: 251
        Relay_Master_Log_File: mysql-bin.000007
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
~

反着再来一遍 B上操作:B给A开户,查看B主信息

grant replication slave on *.* to 'repl'@'10.1.1.7' identified by 'axianglinux'
flush privileges;
show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000009 |      462 |              |                  |
+------------------+----------+--------------+------------------+

A上操作:A从B

change master to master_host='10.1.1.8',master_port=3306,master_user='repl',master_password='axianglinux',master_log_file='mysql-bin.000009',master_log_pos=462;
start slave;
show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.1.1.8
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000009
          Read_Master_Log_Pos: 622
               Relay_Log_File: axiang-01-relay-bin.000002
                Relay_Log_Pos: 331
        Relay_Master_Log_File: mysql-bin.000009
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
~

测试

A:

mysql> grant all on *.* to 'usera'@'127.0.0.1';

mysql> create database dbusera;

B:

mysql> select user,host,password from mysql.user;
+-------+-----------+-------------------------------------------+
| user  | host      | password                                  |
+-------+-----------+-------------------------------------------+
| root  | localhost |                                           |
| root  | axiang-02 |                                           |
| root  | 127.0.0.1 |                                           |
|       | localhost |                                           |
|       | axiang-02 |                                           |
| repl  | 10.1.1.7  | *8E1A3402D66F8DDD8D9D19596B706C6D238C0F34 |
| usera | 127.0.0.1 |                                           |
+-------+-----------+-------------------------------------------+
7 rows in set (0.01 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| dbusera            |
| mysql              |
| test               |
+--------------------+
4 rows in set (0.01 sec)

mysql> create database dbuserb
    -> ;
Query OK, 1 row affected (0.00 sec)

A:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| dbusera            |
| dbuserb            |
| mysql              |
| test               |
| wordpress          |
+--------------------+

  • 因为A上有wordpress库,B没有,对wordPress的操作会导致B从A断裂

恢复

A:

mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000008 |      945 |              |                  |
+------------------+----------+--------------+------------------+

B:

mysql> stop slave
    -> ;
Query OK, 0 rows affected (0.02 sec)

mysql> change master to master_host='10.1.1.7',master_port=3306,master_user='repl',master_password='axianglinux',master_log_file='mysql-bin.000008',master_log_pos=945;
Query OK, 0 rows affected (0.01 sec)

mysql> start slave;
Query OK, 0 rows affected (0.02 sec)

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.1.1.7
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000008
          Read_Master_Log_Pos: 945
               Relay_Log_File: axiang-02-relay-bin.000002
                Relay_Log_Pos: 251
        Relay_Master_Log_File: mysql-bin.000008
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
~
  • 以上实验追求简单,实际生产环境有写入的情况需先备份数据
  • mysqldump备份需要锁表,innobackup貌似不用
  • 从的logbin内的Pos点可以断点续传。后面主从逻辑不出错则可以从旧Pos开启

© 著作权归作者所有

共有 人打赏支持
阿想
粉丝 0
博文 72
码字总数 69742
作品 0
MySQL主从架构

MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步的。它基于binlog,主设备上须开启binlog才能进行主从。 主...

技术小美 ⋅ 2017/11/07 ⋅ 0

MySQL 5.6 一主多从的 半同步复制搭建

MySQL 5.6 一主多从的 半同步复制搭建 半同步简介: 在默认情况下,MySQL的复制是异步的,这意味着主服务器及其从服务器是独立的。异步复制可以提供最佳的性能,因为主服务器在将更新的数据写...

xiaocao13140 ⋅ 05/24 ⋅ 0

↑mysql主从复制实现SSL加密和半同步复制↑

MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。这与同步复制可以进行对比,同步复制是MySQL的一个特征。主服务器将更新写入二进制日志文...

vi123456 ⋅ 2013/09/21 ⋅ 0

解决mysql开启GTID主从同步出现1236错误问题

最近遇到mysql开启gtid做复制时,从库出现1236错误,导致同步无法进行,本文就这问题记录下处理步骤,有关gtid知识在这里不做介绍,mysql版本为5.7.16。 一、错误原因分析 错误信息如下: La...

hnr1017 ⋅ 2016/12/16 ⋅ 0

MySQL-Proxy实现MySQL读写分离提高并发负载

工作拓扑: MySQL Proxy有一项强大功能是实现“读写分离”,基本原理是让主数据库处理写方面事务,让从库处理SELECT查询。 Amoeba for MySQL是一款优秀的中间件软件,同样可以实现读写分离,...

技术小阿哥 ⋅ 2017/11/26 ⋅ 0

MySQL主备复制数据不一致的情况

在主备复制架构下,mysql5.6默认的复制的方式是SBR(基于SQL语句的复制),如果主从库的上下文不一致(如时间不一样、主从库发生了延迟),使用了sysdate()函数,UUID()函数,user()函数,将出...

技术小阿哥 ⋅ 2017/11/27 ⋅ 0

rhel6系统中,mysql 5.6复制新特性下主从复制配置[基于GTID]

更多博文请关注:没有伞的孩子必须努力奔跑 (www.xuchanggang.cn) 1.mysql5.6在复制方面的新特性: (1).支持多线程复制:事实上是针对每个database开启相应的独立线程,即每个库有一个单独的(...

xcga_wise ⋅ 2013/11/24 ⋅ 0

mysql-5.6.26 主主复制

环境如下: CentOS6.5_64 MySQL5.6.26 master1:192.168.1.112 master2:192.168.1.114 mysql 安装 这里就忽略了,主要就是一个细心。有时候一个不小心,就会发现安装失败。 配置master1 1.修改...

OpenStack2015 ⋅ 06/13 ⋅ 0

rh6上mysql5.6的主从、半同步、GTID多线程、SSL认证主从复制

原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和本声明。否则将追究法律责任。http://407711169.blog.51cto.com/6616996/1203973 mysql's replication Mysql的 ...

jinmy001 ⋅ 2013/08/08 ⋅ 0

MySQL数据库主从同步与监控

MySQL数据库主从同步 环境描述: 主数据库master ip:192.168.1.205:3306 从数据库slave ip:192.168.1.206:3306 源码安装Mysql-5.5.46请移步:http://linuxzkq.blog.51cto.com/9379412/1700...

lysweb ⋅ 2016/03/08 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mysql in action / alter table

change character set ALTER SCHEMA `employees` DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci ;ALTER TABLE `employees`.`t2` CHARACTER SET = utf8mb4 , COLLAT......

qwfys ⋅ 今天 ⋅ 0

Java 开发者不容错过的 12 种高效工具

Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松。目前,市面上涌现出越来越多的高效编程工具。所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用...

jason_kiss ⋅ 昨天 ⋅ 0

Linux下php访问远程ms sqlserver

1、安装freetds(略,安装在/opt/local/freetds 下) 2、cd /path/to/php-5.6.36/ 进入PHP源码目录 3、cd ext/mssql进入MSSQL模块源码目录 4、/opt/php/bin/phpize生成编译配置文件 5、 . ./...

wangxuwei ⋅ 昨天 ⋅ 0

如何成为技术专家

文章来源于 -- 时间的朋友 拥有良好的心态。首先要有空杯心态,用欣赏的眼光发现并学习别人的长处,包括但不限于工具的使用,工作方法,解决问题以及规划未来的能力等。向别人学习的同时要注...

长安一梦 ⋅ 昨天 ⋅ 0

Linux vmstat命令实战详解

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令...

刘祖鹏 ⋅ 昨天 ⋅ 0

MySQL

查看表相关命令 - 查看表结构    desc 表名- 查看生成表的SQL    show create table 表名- 查看索引    show index from  表名 使用索引和不使用索引 由于索引是专门用于加...

stars永恒 ⋅ 昨天 ⋅ 0

easyui学习笔记

EasyUI常用控件禁用方法 combobox $("#id").combobox({ disabled: true }); ----- $("#id").combobox({ disabled: false}); validatebox $("#id").attr("readonly", true); ----- $("#id").r......

miaojiangmin ⋅ 昨天 ⋅ 0

金山WPS发布了Linux WPS Office

导读 近日,金山WPS发布了Linux WPS Office中文社区版新版本,支持大部分主流Linux系统,功能更加完善,兼容性、稳定性大幅度提升。本次更新WPS将首次在Linux提供专业办公文件云存储服务,实...

问题终结者 ⋅ 昨天 ⋅ 0

springboot2输出metrics到influxdb

序 本文主要研究一下如何将springboot2的metrics输出到influxdb maven <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-bo......

go4it ⋅ 昨天 ⋅ 0

微信小程序 - 选择图片显示操作菜单

之前我分享过选择图片这个文章,但是我在实际开发测试使用中发现一个问题在使用 wx.chooseImage 选择照片显示出第一格是拍照,后面是相册里的图片。这种实现之前说过了,效果如下。 但是你从...

hello_hp ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部