mysql-cluster 安装配置
mysql-cluster免编译包下载:https://dev.mysql.com/downloads/file/?id=469881
新版本支持只把索引和用到的数据加载到内存,而不是老版本的整个数据库都得加到内存中
wget https://cdn.mysql.com//Downloads/MySQL-Cluster-7.5/mysql-cluster-gpl-7.5.6-linux-glibc2.5-x86_64.tar.gz
解压:
# tar xvf mysql-cluster-gpl-7.5.6-linux-glibc2.5-x86_64.tar.gz
# mv xvf mysql-cluster-gpl-7.5.6-linux-glibc2.5-x86_64 /soft/mysql
给mysql-cluster目录授权
#useradd -s mysql /sbin/nologin
# mkdir /soft/mysql/data
# chown -R mysql:mysql /soft/mysql/*
# chmod +x /soft/mysql/bin/ndb_mem*
# cd /soft/mysql/
# ln -s /soft/mysql/bin/ndb_mgmd /sbin/ndb_mgmd #方便在shell直接调用ndb_mgmd命令
# ln -s /soft/mysql/bin/ndb_mgm /sbin/ndb_mgm #方便在shell直接调用ndb_mgm命令
建立config.ini文件
# vim config.ini #内容如下,一定要注意格式。从windows复制过来的话记得用uft8编码
[NDBD DEFAULT]
NoOfReplicas=2 #每个数据节点的镜像数量
DataMemory=500M #每个数据节点中给数据分配的内存
IndexMemory=300M #每个数据节点中给索引分配的内存
[NDB_MGMD] #配置管理节点,[]后面不能有空格,也不能有注释
hostname=192.168.240.130
datadir=/soft/mysql/data #管理节点数据(日志)目录
[NDBD] #数据节点配置,[]后面不能有空格,也不能有注释
hostname=192.168.240.129
datadir=/soft/mysql/data
[NDBD]
hostname=192.168.240.127
datadir=/soft/mysql/data
[MYSQLD] #SQL节点目录,[]后面不能有空格,也不能有注释
hostname=192.168.240.129
[MYSQLD]
hostname=192.168.240.128
-------------------------------------------------------------------------------------------------------------------
[root@amoebe mysql]# ./bin/ndb_mgmd -f config.ini #启动服务
MySQL Cluster Management Server mysql-5.7.18 ndb-7.5.6 #启动成功
[root@amoebe mysql]# ./bin/ndb_mgm #进入管理程序,可以看到配置文件生效了,但因为没配置节点上的mysql,所以这里显示未连接
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)]2 node(s)
id=2 (not connected, accepting connect from 192.168.240.129)
id=3 (not connected, accepting connect from 192.168.240.127)
[ndb_mgmd(MGM)]1 node(s)
id=1@192.168.240.130 (mysql-5.7.18 ndb-7.5.6)
[mysqld(API)]2 node(s)
id=4 (not connected, accepting connect from 192.168.240.129)
id=5 (not connected, accepting connect from 192.168.240.128)
-------------------------------------------------------------------------------------------------------------------------------
配置节点: 192.168.240.128/192.168.240.129
[root@localhost]# useradd -s /sbin/nologin mysql
[root@localhost]# mkdir /soft/mysql
[root@localhost]# tar xf mysql-cluster-gpl-7.5.6-linux-glibc2.5-x86_64.tar.gz
[root@localhost]# mkdir /soft/mysql/data
[root@localhost]# chown -R mysql:mysql /soft/mysql
[root@localhost]# cd /soft/mysql
[root@localhost mysql]# yum install -y libaio*
vim support-files/mysql.server #修改服务文件
basedir=/soft/mysql
datadir=/soft/mysql/data
[root@yaho mysql]# bin/mysqld --initialize --user=mysql --basedir=/soft/mysql --datadir=/soft/mysql/data
./bin/mysqld --initialize --user=mysql --datadir=/soft/mysql/data --注意自动生成的临时密码
[Note] A temporary password is generated for root@localhost: pByj>rz95OhV
----------------------------------------------------------------------------------------------------------------------------------
先更改密码:
[root@yaho mysql]# bin/mysql -u root -p'pByj>rz95OhV' --登录mysql,有特殊符号,要用''括起来,在这里踏坑了
mysql> use mysql; --必须先更改密码才可以操作
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
mysql> alter user 'root'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
[root@mysql]# vim /etc/my.cnf
[mysqld]
datadir=/soft/mysql/data
user=mysql
ndbcluster
lc_messages-dir=/soft/mysql/share/
ndb-connectstring=192.168.240.130
[mysql_cluster]
ndb-connectstring=192.168.240.130
[root@mysql]# bin/ndbd --initial #第一次使用要初始化数据,下次不能加--initial,否则会清空数据库
[root@mysql]# ln -s /soft/mysql/bin /sbin/mysql
[root@mysql]# ln -s /soft/mysql/support-files/mysql.server /sbin/mysqld
----------------------------------------------------------------------------------------------------------------------------
回到130控制台:
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)]2 node(s)
id=2@192.168.61.128 (mysql-5.7.18 ndb-7.5.6, starting, Nodegroup: 0) --节点ndbd已连接
id=3@192.168.61.129 (mysql-5.7.18 ndb-7.5.6, starting, Nodegroup: 0) --节点ndbd已连接
[ndb_mgmd(MGM)]1 node(s)
id=1@192.168.61.130 (mysql-5.7.18 ndb-7.5.6)
[mysqld(API)]2 node(s)
[mysqld(API)]2 node(s)
id=4@192.168.61.128 (mysql-5.7.18 ndb-7.5.6) #小心防火墙
id=5@192.168.61.129 (mysql-5.7.18 ndb-7.5.6) #小心防火墙
-----------------------------------------------------------------------------------------------------------------------------
测试:
建库/建表
在192.168.61.128上登录mysql:
mysql>create databases abc charset=gbk;
Query OK, 0 rows affected (0.72 sec)
mysql>create table name(id int(5) not null primary key auto_increment,name varchar(10) not null ) engine=ndb;
Query OK, 0 rows affected (0.72 sec)
mysql>insert into name(name) values ('张三'),('李四');
-----------------------------------------------------------------------------------------------------------------------------
在192.168.240.128/192.168.240.129 进行查询
mysql>select * from tp.name;
+----+---------+
| id | name |
+----+----------+
| 1 | 张三 |
| 2 | 李四 |
+----+---------+
-----------------------------------------------------------------------------------------------------------------------------
模拟192.168.240.128/192.168.240.129故障之一失效,再查询
mysql>select * from tp.name;
+----+---------+
| id | name |
+----+----------+
| 1 | 张三 |
| 2 | 李四 |
+----+---------+
mysql>insert into name(name) values ('长江'),('黄河');
Query OK, 0 rows affected (0.72 sec)
mysql> select * from tp.name group by id;
+----+--------+
| id | name |
+----+--------+
| 1 | 长江 |
| 2 | 黄河 |
| 3 | 张三 |
| 4 | 李四 |
+----+--------+
4 rows in set (0.01 sec)
经过测试总结大致有几点:
当cluster挂了后,两个数据节点的mysql都不能访问数据库;
当cluster挂了时,两个mysql还是可以正常工作的,更新数据也会同步,但不能重启mysql服务;
2.只要不是两个mysql服务同时挂了,数据还是安全的。
3.当cluster挂掉,节点A挂掉,这时往节点B上更新数据;cluster和节点A恢复上线后会造成节点A和节点B的数据不一致。
4.当两个mysql数据不一致时,先启动cluster,再启动数据更新的数据节点和SQL节点,确保已经成功连上cluster,最后再启动另一个节点,后一个节点会自动更新最新的数据。!!启动顺序很重要!!!
5.只要cluster和ndbd还存活,mysql暂时的失效,数据也不会丢失。
7.必须有一个ndbd存活,mysql才能正常工作。
-----------------------------------------------------------------------------------------------------------------------------
启动顺序:
管理节点 ndb_megd -> 数据节点 ndbd -> SQL节点 指定ndbcluster 参数的专用mysqld
ndb_mgmd -f config.ini -> ndbd -> mysqld start
关闭顺序:
SQL节点 指定ndbcluster 参数的专用mysqld -> 管理节点 ndb_mem
mysqld stop --> ndb_mgm -e shutdown --> 完成
附配置过程中碰到的几个错误:
1. mysqld --initialize-insecure自动生成无密码的root用户,mysqld --initialize自动生成带随机密码的root用户
2.用mysql帐号设置的话需要在 /etc/security/limits.conf 中追加下面信息,不然会提示limite限制错误:
mysql hard nofile 65535
3.[ERROR] Can't find error-message file '/usr/local/mysql/share/zh-cn/errmsg.sys'. Check error-message file location and 'lc-messages-dir' configuration directive.
在my.cnf里添加行:
lc_messages-dir=/soft/mysql/share/
4.启动mysql时,可能会提示:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)
ln -s /soft/mysql/mysql.sock /tmp/mysql.sock #要用绝对路径
5.ndb_mgm> showNode 2: Forced node shutdown completed. Occured during startphase 4. Caused by error 2353: 'Insuffice. ndbd服务自动断开,可能是时差的问题:
cluser端 kill掉 ndb_mgmd 再重新启动。数据节点再重新启动ndbd 和mysqld 即可。
NDB引擎和Innodb 引擎的区别:摘自http://www.oschina.net/question/565065_79802
N NDB 和 Innodb 的使用基本是一样的,ACID (原子性、一致性、隔离性、持久性)实现方式也基本相同,但是他们之间有一个很重要的区别:在同一个 transaction 中,如果某一部的执行出错,Innodb 会继续的往下执行,而 NDB 则会马上回滚到最初状态(类似于 SqlServer 中的 SET XACT_ABORT ON 的状态),如果不注意这一点的话,在一些极端情况下,系统将出现数据不一致的情况,所以还是需要大家多多注意哦!
测试用例如下(在 test 库中进行测试):
[Innodb 用例]
mysql> create table test_innodb (i int not null primary key) engine innodb;
mysql> begin;
mysql> insert into test_innodb values(1);
mysql> insert into test_innodb values(1); # 主键重复出错
mysql> commit;
mysql> select * from test_innodb;
+---+
| i |
+---+
| 1 |
+---+
1 row in set (0.00 sec)
[NDB 用例]
mysql> create table test_ndb (i int not null primary key) engine ndbcluster;
mysql> begin;
mysql> insert into test_ndb values(1);
mysql> insert into test_ndb values(1); # 主键重复出错
mysql> commit;
mysql> select * from test_ndb;
Empty set (0.00 sec)
转载于:https://blog.51cto.com/752030200/1931917
相关文章:

ExtJs学习笔记(5)_Ajax示例
ExtJs对于Ajax的使用非常简单,看下面的代码: 1.Html页: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns"http://www.w3.o…
Matlab与线性代数 -- 稀疏矩阵的图形显示
本文详细说明了Matlab中稀疏矩阵可视化的过程。

浏览器及时感知服务端数据变化的方式
需求 在公司,有一个需求,是浏览器实时获取服务端数据变化,然后根据变化做相应的动作。需求场景如下:手机端扫描二维码,然后获取待取件订单列表,点击取件,进行取件,同时远端打印机打…

拥抱Node.js 8.0,N-API入门极简例子
本文摘录自《Nodejs学习笔记》,更多章节及更新,请访问 github主页地址。欢迎加群交流,群号 197339705。 N-API简介 Node.js 8.0 在2017年6月份发布,升级的特性中,包含了N-API。编写过或者使用过 node扩展的同学&#x…
什么是标记符控制的分水岭算法
本文首先指出传统分水岭算法的不足,然后介绍了标记符控制的分水岭算法,最后通过实例演示了该算法在图像分割中的应用。该微信图文由安晟提供。

.NE 后退刷新验证码
Response.Buffer true; Response.Expires -1; Response.ExpiresAbsolute DateTime.Now.AddDays(-1); Response.Expires0; Response.CacheControl "no-cache"; 转载于:https://www.cnblogs.com/lmjob/archive/2008/09/01/128096…
intellij打开工程在每个java文件上有个红色的无效符的解决办法
说明该类不是可编译文件。在project Structure中(快捷键ctrlaltshifts)选Modules将你带红圈的文件添加上,将你带红圈的文件夹设为Sources。一般是src文件夹,点Sources文件夹,然后点击OK。设置为可编译文件再去工程中看…

[zt] petshop4.0 详解之三
三、PetShop数据访问层之消息处理在进行系统设计时,除了对安全、事务等问题给与足够的重视外,性能也是一个不可避免的问题所在,尤其是一个B/S结构的软件系统,必须充分地考虑访问量、数据流量、服务器负荷的问题。解决性能的瓶颈&a…

windows下Bullet 2.82编译安装(Bullet Physics开发环境配置)
平台:Win7,VS2010 1. Bullet库的组织 下图是Bullet_User_Manual中的截图: 从中可见,Bullet的LinearMath(线性数学模块),其上是BulletCollision(碰撞检测模块),…
Matlab与线性代数 -- 寻找矩阵的非零元素
本微信图文详细介绍了Matlab中find函数的用法。

java重新回顾
很不幸,自己的移动硬盘坏掉了,之前自己所做的学习笔记都没了,大概有300多篇,是大学学习java的时候整理复习的,这样的损失是巨大的,这将花费我更多的时间重新去整理,但是事实已经是这样的了。 基…

BestCoder 1st Anniversary ($) 1002.Hidden String
Hidden String Accepts: 437 Submissions: 2174 Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 262144/262144 K (Java/Others)问题描写叙述今天是BestCoder一周年纪念日. 比赛管理员Soda有一个长度为n的字符串s. 他想要知道是否能找到s的三个互不相交的子串s[l1..r1],…

动态生成GridView时,加入DataKeyNames属性,回调时出错解决方法
早上看到有位同学问关于自动生成GridVie并且添加DataKeyNames属性后 回调页面时,出现错误异常.下面是我实现的方法。注意一点。就是数据绑定的时间。 要是先绑定,再添加到div1中,回调页面时,就会出错。 页面代码: <…
如何制作风格迁移图?
本微信图文介绍了实现风格迁移图的基本原理并在此基础上制作了效果展示图。

leetcode--链表的设计--python
leetcode--链表的设计--python题目题目详情示例提示解题代码代码运行结果体会题目 设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向…

从空间数据库中删除所有拓扑对象
/// <summary> /// //从空间数据库中删除所有拓扑对象 /// </summary> /// <returns></returns> public bool DeleteALLTopolgyFromGISDB() { bool rbc true; try { …
Altium Desgner软件,PCB设计中铺铜的作用
PS原文出自http://mp.weixin.qq.com/s/5mLNXzCDm1hGOXiKNE8Ddg 问1:为何要铺铜? 答:一般铺铜有几个方面原因。 1、EMC.对于大面积的地或电源铺铜,会起到屏蔽作用,有些特殊地,如PGND起到防护作用。ÿ…
如何利用自组织竞争网络进行患者癌症发病预测
如何利用自组织竞争网络进行患者癌症发病预测 数据下载: http://download.csdn.net/detail/lsgo_myp/9711473

leetcode--反转链表--python
文章目录题目题目详情示例提示解题代码代码运行结果体会题目 题目详情 反转一个单链表。 示例 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL提示 你可以迭代或递归地反转链表。你能否用两种方法解决这道题? 解题代码 …

非递归一次性加载分类数据到TreeViw
不是经常用,发现再次用到时又要再写一遍,这次花点时间记录一下 代码:------------------------------------- private void InitView() { DataView dv CommodityClassBLL.Query().Tables[0].DefaultView; if (dv.Count > 1) { dv.Sort …
什么是SESSION?(二)
本篇图文讨论了SESSION多服务器共享问题以及SESSION操作的效率问题。本篇微信图文由钟锦提供。

leetcode--两数之和--python
文章目录题目题目详情示例解题代码代码运行结果体会题目 题目详情 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复…

关于 OpenIdConnect 认证启用 HTTPS 回调 RedirectUri 不生效问题
在搭建 IdentityServer 服务端后,我们尝试使用了 OIDC(OpenID Connect) 的中间件来代替了原先的 Session 系统认证方式,起初采用的是 HTTP 协议,一切都没有什么问题,最近启用全站 HTTPS 后,发现登陆会跳转到 HTTP的页面…

C#中使用GUID
GUID(全局统一标识符)是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成GUID的API。生成算法很有意思,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。GUID的唯一缺陷在于生…
Matlab与线性代数 -- 对角矩阵
本微信图文详细介绍了Matlab中diag()函数的应用。

leetcode--对称二叉树--python
文章目录题目题目详情示例说明解题代码代码运行结果体会题目 题目详情 给定一个二叉树,检查它是否是镜像对称的。 示例 例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1/ \2 2/ \ / \ 3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1…

IPV6的设置问题!
最近一段在研究IPV6,在网上搜了好多资料,但是感觉大部分都不实在,都是泛泛而谈,实用性不强,故决定做点什么!正所谓该出手时就出手,风风火火闯九州哦~~ IPV6设置步骤: 1.首先查看你时…
Matlab与线性代数 -- 数组与矩阵的乘幂
本微信图文详细介绍了数组的乘幂运算power()与矩阵的乘幂运算mpower()。

Docker 公司是如何做社区的?
今天看了一个Docker公司是如何做社区的PPT,演讲者是Docker公司的市场部老大。Docker从发布之初就受到了开发者的关注,1.0版本发布的时候Docker就收到了超过460位贡献者的8741条改进建议,Docker也承认是社区帮助他们迅速达到了这一新的里程碑。…

leetcode--整数反转--python
文章目录题目题目详情示例注意解题代码小知识代码运行结果体会题目 题目详情 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 示例 输入: 123 输出: 321输入: -123 输出: -321输入: 120 输出: 21注意 假设我们的环境只能存储得下 32 位…