2019独角兽企业重金招聘Python工程师标准>>>

一、mysql cluster

结构: sql + data + mgm节点

原理

集群由3个概念

1,sql节点  sql node

2,数据节点 data node

3,管理节点 ndb managerment

sql语句发送sql节点sql节点发往数据节点,再由管理节点完成数据节点的之间的同步。

集群技术相对复杂,至少有3种节点,4台服务器才能完成。

二、mysql replication

结构: master + slave

1、主从复制

master负责写,slave负责读,解决了数据库瓶颈问题

原理

1,主服务器运行语句,都产生一个二进制日志 binlog

2,从服务器不断读取主服务器的binlog

3,从主服务读取到的binlog,转换为自身可执行的relaylog

4,执行relaylog

实现步骤

1,首先确保主服务器打开二进制日志功能

主服务器一旦有数据变化,立即产生二进制日志

2,从服务器也需要开启二进制日志和relay日志功能

这样可以从主服务器读取binlog,并产生relaylog

3,在主服务器建立一个从服务器的账号,并授予数得上权限

4,指定从服务对应的主服务器,开启从服务器

具体实施

虚拟机下有两台CentOS-6.7,IP为192.168.1.67(master)和192.168.1.83(slave)

1,67做主服务器

2,83做从服务器

3,保证主从3306端口互通

4,配置主服务器,打开binlog

#给服务器起一个唯一的id,通常以局域网ip最后段命名

server-id=67

#开启二进制日志

log-bin=mysql-bin

#指定日志格式

binlog-format=mixd

注:binlog日志格式选择

主服务器的日志格式用哪种好?

有 statement,row,mixed 3种,其中mixed是指前2种的混合。

1、insert into xxtable values (x,y,z)

影响:1行,且为新增1行,对于其他行没有影响。

这个情况,用row格式,直接复制磁盘上1行的新增变化。

2、update xxtable set age=21 where name='sss'

这个情况,一般也只是影响1行,用row也比较合适。

以过年发红包,全公司的人,都涨薪100元。

3、update xxtable set salary=salary+100

这个语句带来的影响,是针对每一行的,因此磁盘上很多row都发生了变化。

此处,适合就statment格式的日志。

2种日志,各有各的高效的地方,mysql提供了mixed类型。

可以根据语句的不同,而自动选择适合的日志格式。

重启mysql

已经能够充当master服务器

5,配置从服务器打开binlog和relaylog

#给服务器起一个唯一的id,通常以局域网ip最后段命名

server-id=83

#开启二进制日志

log-bin=mysql-bin

#指定日志格式

binlog-format=mixd

#从服务器中继日志

relay-log=mysql-relay

#指定只读

read-only=1

重启从服务器

6,在服务器上创建相应的复制账号

GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repl'@'192.168.1.%' IDENTIFIED BY '111111';

刷新权限

flush privileges;

7,在服务器通过语句指定要复制的主服务器(注意,可以一主多从,不可一从多主)

CHANGE MASTER TO \
MASTER_HOST='192.168.1.67',
MASTER_USER='repl',
MASTER_PASSWORD='111111',
MASTER_LOG_FILE='mysql-bin.000015',
MASTER_LOG_POS=3069;

8,启动服务器功能

start slave;

注:常用语句

show master status ; 查看master的状态, 尤其是当前的日志及位置

show slave stattus; 查看slave的状态.

reset slave ;  重置slave状态.

start slave ; 启动slave 状态(开始监听msater的变化)

stop slave; 暂停slave状态;

配置错误展示

错误分析

1、网络不通
            2、密码不对
            3、pos不对

解决方法:

主服务器防火墙3306端口设置对外访问

/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT

/etc/rc.d/init.d/iptables save

/etc/init.d/iptables restart

/etc/init.d/iptables status

配置完成

9,测试

CREATE DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT '' COMMENT 'name',
  PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;

INSERT INTO test (name) VALUES ('安大厦');

mysql二进制日志

/usr/local/mysql/var/

查看最新的bin-log日志

more mysql-bin.index

查看master使用的bin-log日志

show master status

2、主主复制

互为主从,解决读数据库写压力,不至于一台master宕机,网站不能访问,缺点 同步冲突

大致思路:

1,2台服务器都设置上2进制日志和relay日志

2,都设置上replcation账号

3,都设置对方为自己的master

具体实施:

虚拟机下有两台CentOS-6.7,IP为192.168.1.67和192.168.1.83

1,配置67服务器,配置binlog和relaylog

#给服务器起一个唯一的id,通常以局域网ip最后段命名

server-id=67

#开启二进制日志

log-bin=mysql-bin

#指定日志格式

binlog-format=mixd

重启mysql

67服务器上创建相应的复制账号

GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repl'@'192.168.1.%' IDENTIFIED BY '111111';

67服务器通过语句指定要复制的83服务器

CHANGE MASTER TO \
MASTER_HOST='192.168.1.83',
MASTER_USER='repl',
MASTER_PASSWORD='111111',
MASTER_LOG_FILE='mysql-bin.000016',
MASTER_LOG_POS=1720;

刷新权限

flush privileges;

start slave;

2,配置83服务器,配置binlog和relaylog

#给服务器起一个唯一的id,通常以局域网ip最后段命名

server-id=83

#开启二进制日志

log-bin=mysql-bin

#指定日志格式

binlog-format=mixd

83服务器上创建相应的复制账号

GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repl'@'192.168.1.%' IDENTIFIED BY '111111';

83服务器通过语句指定要复制的67服务器

CHANGE MASTER TO \
MASTER_HOST='192.168.1.67',
MASTER_USER='repl',
MASTER_PASSWORD='111111',
MASTER_LOG_FILE='mysql-bin.000017',
MASTER_LOG_POS=411;

刷新权限

flush privileges;

start slave;

 主主复制下一定要注意避免的问题---------同步冲突

2台mysql地位相等, 假如2个请求同时到达2台服务器,

请求的A节点,  stu 的id为1

请求的B 节点,  stu的id为1 ,

同步--->冲突

如何解决?

让master1  1,3,5,7来增长

另master2  2,4,6,8来增长

master1:

set global auto_increment_increment = 2;#每步增长2

set global auto_increment_offset = 1;#从1开始增长

set session auto_increment_increment = 2;

set session auto_increment_offset = 1;

注:global全局,session当次连接

master2:

set global auto_increment_increment = 2;

set global auto_increment_offset = 2;

set session auto_increment_increment=2;

set session auto_increment_offset = 2;

注:auto-increment-increment 和 auto-increment-offset 要写到配置文件 my.cnf 中,防止下次重启后失效。

master1的my.cnf加入

auto_increment_increment=2

auto_increment_offset=1

master2的my.cnf加入

auto_increment_increment=2

auto_increment_offset=2

查询默认auto_increment_increment 和 auto_increment_offset

SHOW VARIABLES LIKE '%auto_inc%';

操作后得到如下类似效果

如果后期需要加服务器,这个办法就有限制了。

我们可以在业务逻辑上来解决,

比如在racle 有sequnce,序列。

序列每次访问,生成递增/递减的数据。

以redis为例,我们可以专门构建一个 global:userid

每次PHP插入Mysql前,先 incr->global:userid,得到一个不重复的userid。

3、被动主主复制

避免了主主复制的缺点,只是一台服务器写入,另一台读取备份

是指 2台服务器地位一样,但其中一台为只读,并且业务中也只写某1台服务器。

好处: 如果供写入的服务器出了故障,能迅速的切换到从服务器,

或者出于检修等目的,把写入功能切换到另一台服务器也比较方便。

转载于:https://my.oschina.net/u/1422143/blog/672691

mysql集群(一)相关推荐

  1. mysql集群安装(centos)

    永不放弃,一切皆有可能!!! 只为成功找方法,不为失败找借口! mysql集群安装(centos) mysql cluster : 1. 基于NDB Cluster 的分布式数据库系统 2. mysq ...

  2. mysql 集群 增加服务器_MYSQL集群服务配置

    MYSQL集群服务配置 篇文档旨在介绍如何安装配置基于2台服务器的MySQL集群.并且实现任意一台服务器出现问题或宕机时MySQL依然能够继续运行. 注意! 虽然这是基于2台服务器的MySQL集群,但 ...

  3. mysql 集群实践_MySQL Cluster集群探索与实践

    MySQL集群是一种在无共享架构(SNA,Share Nothing Architecture)系统里应用内存数据库集群的技术.这种无共享的架构可以使得系统使用低廉的硬件获取高的可扩展性. MySQL ...

  4. mysql 集群操作系统_高性能MySQL集群详解(二)

    一.通过Keepalived搭建MySQL双主模式的高可用集群系统 1.MySQL Replication介绍: MySQL Replication是MySQL自身提供的一个主从复制功能,其实也就是一 ...

  5. 热烈庆祝“mysql 集群数据库架构成功”

    坚持了两周,终于在linux下把mysql集群数据库给架起来了!下面简单说明下集群数据库原理 第一:集群数据库分MGM,NDBD,SQL 其中MGM是相当于"中央政府",维持NDB ...

  6. spring jpa mysql集群_Spring Boot系列之十四 JPA 连接mycat

    接 本文介绍使用spring-data-jpa连接mycat实现应用的读写分离. 系统环境spring-boot 1.4.3-RELEASE jdk1.8 进入正题application.yml配置文 ...

  7. rancher安装mysql_四、rancher搭建Mysql集群化部署,做到同步备份

    一.Rancher基础镜像查找: 1.基础镜像操作地址:https://hub.docker.com/r/library/mariadb/ 2.选择自己需要的镜像进行搜索,里面有对应版本:也有最新的如 ...

  8. mysql集群的使用与简单测试

    应用场景 当搭建了mysql集群后,现在应当需要使用该mysql集群了,在使用的过程中,和单节点的mysql极为相似. 操作步骤 1. 配置mysql集群 mysql集群已启动完毕,需要给mysql重 ...

  9. MySQL Cluster(MySQL 集群) 初试(转)

    作/译者:叶金荣(imysql#imysql.com>),来源:http://imysql.com,欢迎转载. 作/译者:叶金荣(Email: ),来源:http://imysql.cn,转载请 ...

  10. mysql主主复制+keepalived 打造高可用mysql集群

    为了响应公司需求,打造出更安全的mysql集群,能够实现mysql故障后切换,研究了几天终于有了成果,一起分享一下. 首先介绍一下这套集群方案实现的功能 1.mysql服务器故障后自动转移,修好后自动 ...

最新文章

  1. kettle内存溢出
  2. ORACLE 新建数据库及权限赋予
  3. 阿里巴巴400集python教程_阿里巴巴推荐的400集Python视频合集免费学起来,学完万物皆可爬...
  4. 理论+技术+代码已经准备完毕!2021年啃透花书!
  5. 飞鸽传书不能用?这里列出所有解决方法!
  6. 连接MySQL和连接文件夹区别,对数据库连接问题的一点总结
  7. 地址null一个简单的第三人称汽车驾驶系统
  8. pytorch 中nn.MaxPool1d() 和nn.MaxPool2d()对比
  9. opencv 滑动条创建
  10. mysql/mariadb 安装开启spinx引擎
  11. 调用支付jsapi缺少参数:appid_JAVA实现微信支付功能
  12. linux汇编预处理,Linux程序在预处理、编译、汇编、链接、运行步骤的作用
  13. RocketMQ(十四)RocketMQ消息重试机制
  14. 【Python - wxpython】- 卫星通信系统链路计算软件
  15. servlet请求转发html页面乱码问题
  16. 我与“萝卜坑”的点点滴滴
  17. 车架号校验 php代码,VIN车辆识别代码查询
  18. BLE射频杂散源的由来,以及常见处理办法
  19. query_data函数C语言代码,pandas 查询函数query的用法说明
  20. 一个网站域名价值 1亿人民币,互联网寸土寸金!

热门文章

  1. ASP.NET Core 中间件Diagnostics使用 异常和错误信息
  2. 解决终端SSH连接服务器一段时间不操作之后卡死的问题
  3. selenium:解决页面元素display:none的方法
  4. 2018年1月3日-江苏地税系统无法正常登陆的解决方案
  5. 在MySQL中删除重复的行
  6. java mvc .net mvc_.NET MVC 和 JAVA MVC有什么区别?
  7. Python基础-数据类型转换,默认参数,关键字参数
  8. ppt转html5 带动画_这组PPT设计,真的太漂亮了!
  9. python将csv文件拆分_在python中将一个csv拆分为多个文件
  10. python基本内容讲解_Python命名约定基本内容解析