文档章节

14-4/5 MySQL 主主同步

阿想
 阿想
发布于 2017/09/02 21:44
字数 784
阅读 16
收藏 1

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
0
MySQL 5.6 一主多从的 半同步复制搭建

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

xiaocao13140
05/24
0
0
MySQL-Proxy实现MySQL读写分离提高并发负载

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

技术小阿哥
2017/11/26
0
0
MySQL主备复制数据不一致的情况

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

技术小阿哥
2017/11/27
0
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
0

没有更多内容

加载失败,请刷新页面

加载更多

LinkedList基本用法

LinkedList类是双向列表,列表中的每个节点都包含了对前一个和后一个元素的引用. LinkedList的构造函数如下 1. public LinkedList(): ——生成空的链表 2. public LinkedList(Collection col)...

whoisliang
1分钟前
0
0
Andrew Ng教你如何引领公司进入AI时代

摘要: 人工智能时代,企业转型遇到困难?看看Andrew Ng的建议吧! AI(人工智能)技术就像100年前的电力一样,正准备改变每个行业。从现在到2030年,它将创造约13万亿美元的GDP增长。虽然它...

阿里云官方博客
19分钟前
1
0
斗图咖(www.doutuka.com)上线纪念

网站名称:斗图咖 网站描述:是一款年轻人都在玩的斗图网站,来斗图咖一起斗图装逼交朋友吧。站长每天上传收集的最新最火斗图,供大家娱乐聊天发表情;后期也会开发表情自主设计,自己设计表...

focusone
40分钟前
4
0
Spring AOP 切面编程记录日志和接口执行时间

最近客户现在提出系统访问非常慢,需要优化提升访问速度,在排查了nginx、tomcat内存和服务器负载之后,判断是数据库查询速度慢,进一步排查发现是因为部分视图和表查询特别慢导致了整个系统...

编程SHA
51分钟前
8
0
15个Spring的核心注释示例

众所周知,Spring DI和Spring IOC是Spring Framework的核心概念。让我们从org.springframework.beans.factory.annotation和org.springframework.context.annotation包中探索一些Spring核心注......

java菜分享
56分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部