一、概念

在企业中,数据库高可用一直是企业的重中之重,中小企业很多都是使用mysql主从方案,一主多从,读写分离等,但是单主存在单点故障,从库切换成主库需要作改动。因此,如果是双主或者多主,就会增加mysql入口,增加高可用。不过多主需要考虑自增长ID问题,这个需要特别设置配置文件,比如双主,可以使用奇偶,总之,主之间设置自增长ID相互不冲突就能完美解决自增长ID冲突问题。

单点故障解决方案:

主主架构:

互为主备,互相监控对方二进制日志文件进行同步

note:当两个sql语句发生冲突的时候主主架构有可能出现数据不一致的现象;

MHA(master high availability):

HMA可以有多个配置文件,一个配置文件监控一个主从架构

二、主主架构思路

1、两台mysql都可读可写,互为主备,默认只使用一台(masterA)负责数据的写入,另一台(masterB)备用;

2、masterA是masterB的主库,masterB又是masterA的主库,它们互为主从;

3、两台主库之间做高可用,可以采用keepalived等方案(使用VIP对外提供服务);

4、所有提供服务的从服务器与masterB进行主从同步(双主多从);

5、建议采用高可用策略的时候,masterA或masterB均不因宕机恢复后而抢占VIP(非抢占模式);

可以增加这两个参数,使两个主库可以异步写入且能区分

auto_increment_offset=2 <

auto_increment_increment=2 <

三、演示步骤

环境(主1服务器端IP:10.1.1.11;主2服务器端IP:10.0.0.12)

yum源:

[mysql57-community]

name=MySQL 5.7Community Server

baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/

enabled=1gpgcheck=0

yum -y remove mariadb*

yum -y install mysql-community-server

mysql-p`cat /var/log/mysqld.log |grep password |head -1 |awk '{print $NF}'`

alter user'root'@'localhost' identified by 'Ryz0304/1';

vim /root/.my.cnf

[mysql]

user=root

password='Ryz0304/1'

主1(10.0.0.11)

1、修改主1配置文件,配置服务器编号,开启bin-log

vim /etc/my.cnf

##############

server-id=1

log-bin=binlog##############

2、重启主1mysql服务

systemctl restart mysqld

systemctl enable mysqld

firewall-cmd --add-service=mysql

firewall-cmd --add-service=mysql --permanent

3、创建复制用的用户(主1)

mysql> grant replication slave on *.* to 'repl'@'10.0.0.12' identified by'Repl0304/1';

Query OK,0 rows affected, 1 warning (0.00sec)

mysql>flush privileges;

Query OK,0 rows affected (0.00 sec)

4、(若第一次同步可忽略此步骤)这里可以清空两台主机的master和slave日志(若之前有开启过同步的,需要先停止同步:stop slave;)

在mysql命令行中输入:

reset master;

reset slave;

5、查看主1二进制日志文件的位置

mysql>show master status\G*************************** 1. row ***************************File: binlog.000001Position:154Binlog_Do_DB:

Binlog_Ignore_DB:

Executed_Gtid_Set:1 row in set (0.00 sec)

主2(10.0.0.12)

1、修改主2配置文件,配置服务器编号,开启bin-log

[mysqld]

server-id=2log-bin=binlog

2、重启主2mysql服务

systemctl restart mysqld

systemctl enable mysqld

firewall-cmd --add-service=mysql

firewall-cmd --add-service=mysql --permanent

3、(若第一次同步可忽略此步骤)这里可以清空两台主机的master和slave日志(若之前有开启过同步的,需要先停止同步:stop slave;)

在mysql命令行中输入:

reset master;

reset slave;

4、连接到主1服务器上面

mysql> change master to master_host='10.0.0.11',master_user='repl',master_password='Repl0304/1',master_port=3306,master_log_file='binlog.000001',master_log_pos=154;

Query OK,0 rows affected, 2 warnings (0.01sec)

mysql>start slave;

Query OK,0 rows affected (0.01sec)

mysql>show slave status\G*************************** 1. row ***************************Slave_IO_State: Waitingformaster to send event

Master_Host:10.0.0.11Master_User: repl

Master_Port:3306Connect_Retry:60Master_Log_File: binlog.000001Read_Master_Log_Pos:154Relay_Log_File: s2-relay-bin.000002Relay_Log_Pos:317Relay_Master_Log_File: binlog.000001Slave_IO_Running: Yes

Slave_SQL_Running: Yes

5、查看主2二进制日志文件的位置

mysql>show master status\G*************************** 1. row ***************************File: binlog.000001Position:154Binlog_Do_DB:

Binlog_Ignore_DB:

Executed_Gtid_Set:1 row in set (0.00 sec)

6、创建复制用的用户(主2)

mysql> grant replication slave on *.* to 'repl'@'10.0.0.11' identified by'Repl0304/1';

Query OK,0 rows affected, 1 warning (0.00sec)

mysql>flush privileges;

Query OK,0 rows affected (0.00 sec)

主1(10.0.0.11)

连接到主2服务器上

mysql> change master to master_host='10.0.0.12',master_user='repl',masterr_password='Repl0304/1',master_port=3306,master_log_file='binlog.000001',,master_log_pos=154;

Query OK,0 rows affected, 2 warnings (0.01sec)

mysql>start slave;

Query OK,0 rows affected (0.01sec)

mysql>show slave status\G*************************** 1. row ***************************Slave_IO_State: Waitingformaster to send event

Master_Host:10.0.0.12Master_User: repl

Master_Port:3306Connect_Retry:60Master_Log_File: binlog.000001Read_Master_Log_Pos:597Relay_Log_File: s1-relay-bin.000002Relay_Log_Pos:760Relay_Master_Log_File: binlog.000001Slave_IO_Running: Yes <

Slave_SQL_Running: Yes <

测试

1、在主2服务器上创建库,创建表并插入数据

mysql>create database ren;

Query OK,1 row affected (0.00sec)

mysql>use ren;

Database changed

mysql> create table tb1(id int primary key auto_increment,name char(30));

Query OK,0 rows affected (0.01sec)

mysql> insert into tb1(name) values('rr'),('ryz'),('dad');

Query OK,3 rows affected (0.13sec)

Records:3 Duplicates: 0 Warnings: 0mysql> select *from tb1;+----+------+

| id | name |

+----+------+

| 1 | rr |

| 2 | ryz |

| 3 | dad |

+----+------+

3 rows in set (0.00 sec)

2、登录主2服务器并检查是否已经有主1上面的数据

mysql>show databases;+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| performance_schema |

| ren |

| sys |

+--------------------+

5 rows in set (0.07sec)

mysql> select *from ren.tb1;+----+------+

| id | name |

+----+------+

| 1 | rr |

| 2 | ryz |

| 3 | dad |

+----+------+

3 rows in set (0.00 sec)

mysql双主是什么意思_mysql基础之mysql双主(主主)架构相关推荐

  1. mysql双主故障自动切换_MySQL主库高可用 -- 双主单活故障自动切换方案

    前言:(PS:前言是后来修改本文时加的)对于这篇文章,有博友提出了一些疑问和见解, 有了博友的关注,也促使我想把这套东西做的更实用.更安全.后来又经过思考,对脚本中一些条件和行为做了些改变.经过几次修 ...

  2. mysql redo 物理复制 彭立勋_MySQL基础技能与原理——基本原理.ppt

    MySQL基础技能与原理--基本原理.ppt MySQL基础技能与原理基本原理,MySQL DBA Team,彭立勋(),内容概要,1. MySQL体系架构 2. InnoDB特点 3. MySQL高 ...

  3. mysql基础搭建_MySql基础-构建MySql数据库:安装MySql-server、MySql-client

    1 构建MySQL服务器 1.1 问题 本案例要求熟悉MySQL官方安装包的使用,快速构建一台数据库服务器: 安装MySQL-server.MySQl-client软件包 修改数据库用户root的密码 ...

  4. mysql导入三个基本表_mysql 基础导入导出

    导入导出mysqldump 导出:mysqldump -u root -p --databases 数据库1 数据库2 > xxx.sql 导入:系统命令行: MySQL -u用户名 -p密码 ...

  5. mysql 9.0创建数据库_数据库基础学习——MySQL数据库知识小结(9)

    1 MySQL 中的约束 1.1约束类型 • 非空约束(not null) • 唯一性约束(unique) • 主键约束(primary key) PK • 外键约束(foreign key) FK ...

  6. mysql怎么退出时保存导出_Mysql应用使用MySQL MySqldump命令导出数据时的注意事项...

    <Mysql应用使用MySQL MySqldump命令导出数据时的注意事项>要点: 本文介绍了Mysql应用使用MySQL MySqldump命令导出数据时的注意事项,希望对您有用.如果有 ...

  7. mysql新加不了数据库_MySQL数据库之mysql增加新用户无法登陆解决方法

    本文主要向大家介绍了MySQL数据库之mysql增加新用户无法登陆解决方法 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 今天安装openstack folsom版本,安装完m ...

  8. mysql的命令行常用命令_MySQL Command Line[mysql命令行常用命令]

    MySQL Command Line[mysql命令行常用命令] (2012-04-25 16:51:59) 标签: it 第一招.mysql服务的启动和停止 net stop mysql net s ...

  9. mysql 子查询多个字段_MySql基础

    本文章目标 ​ 一.为什么要学习数据库 ​ 二.数据库的相关概念 ​ DBMS.DB.SQL ​ 三.数据库存储数据的特点 ​ 四.初始MySQL ​ MySQL产品的介绍 ​ MySQL产品的安装 ...

最新文章

  1. 特性开关框架 java_关于Mosfet你应当知道的开关特性
  2. MySQL常用维护管理工具
  3. pwn学习总结(四)—— 堆基础知识(持续更新)
  4. 江苏2021年新高考八省联考成绩查询,2021八省联考成绩什么时候出 2021八省联考江苏成绩公布...
  5. 【机器学习】K-Means(非监督学习)学习及实例使用其将图片压缩
  6. python 经纬度计算距离公式_SymPy符号计算-让Python帮我们推公式
  7. 为什么程序必须得会C语言?
  8. 关于SQL语言的优化(Oracle)
  9. java修改.class重新打包jar
  10. Fiddler-弱网测试设置
  11. Jhipster创建微服务【0】——踩坑
  12. AC日记——[HNOI2012]永无乡 bzoj 2733
  13. Java内存解析 程序的执行过程
  14. 更新一些CAD中比较容易混淆的概念
  15. 淘宝京东鞋服板砖线报,秒杀抢购捡漏,兔子仙女宝妈童话镇等之后的寄件价格问题,这个可以帮你sheng下好多快递q,【云杰智慧邀请码:HJDNA5】
  16. 小米手机运行linux,在Linux系统下使用小米刷机工具:XiaoMiTool V2(XMT2)
  17. 如何开发一款棋牌游戏?棋牌游戏平台搭建
  18. 18位身份证校验代码
  19. 现场总线CAN和工业以太网EtherCAT详解
  20. gke google_使用ExternalDNS扩展GKE

热门文章

  1. 基于JSP开发的电影票预订系统 JAVA MySQL
  2. oracle建表的时候同时创建主键,外键,注释,约束,索引
  3. 手机号码与邮箱验证的正则表达式及其常用正则表达式
  4. 大三菜鸡Java面试凉经
  5. leetcode--344. 反转字符串
  6. 欧姆龙 PLC CP1E Modbus RTU通信程序
  7. 自定义字体样式引入使用方法、文本阴影、边框阴影、(边框)圆角、渐变、理解重绘与回流、渐进增强和优雅降级的区别
  8. 指定的服务器标记为删除,如何解决“指定的服务已被标记为删除”错误
  9. js时间戳转化为时间
  10. 条件EK02在定价过程中丢失