目录
mysql各版本比较
mysqlcluster优点
mysqlcluster缺点
mysqlcluster和mycat对比
innoDB和NDB数据库引擎对比
MySQL簇基本概念
ubuntu 16.04下安装Mysql Cluster
mysql各版本比较
mysql各版本的区别:
MySQL Community Server 社区版本,开源免费,但不提供官方技术支持。
MySQL Enterprise Edition 企业版本,需付费,可以试用30天。
MySQL Cluster 集群版,开源免费。可将几个MySQL Server封装成一个Server。
MySQL Cluster CGE 高级集群版,需付费。
MySQL Workbench(GUI TOOL)一款专为MySQL设计的ER/数据库建模工具。MySQL Workbench又分为两个版本,分别是社区版(MySQL Workbench OSS)、商用版(MySQL Workbench SE)。
☆☆MySQL企业版和社区版之间有何不同?
2006年底,MySQL开始发行MySQL Enterprise,这个产品包含了一系列更健全的提高MySQL server可靠性、安全性和性能的服务。
如果您业务符合右侧任何一个需求特征,那么推荐采用
Mysql企业版解决方案:
MySQL社区版是开源的GPL许可,可以免费获取。
MySQL网络版是通过MySQL认证的许可,需要花钱购买。
MySQL网络版在网络和企业部署功能、排错功能、技术和产品支持、升级更新、享有MySQL知识库、直接得到MySQL开发人员指导等方面,都是MySQL社区版所没有的。
第一个 MySQL Community Server,这个不要钱!
第二个 MySQL Enterprise 这个要掏钱,不过可以打电话咨询问题,也就是电话技术支持。
第三个 MySQL Cluster,这个单独是没法用的,要在1或2的基础上用。当然用来平衡多台数据库的。

mysqlcluster优点
1)通过自动分片实现高水平的写入扩展能力--扩展性强,在线扩容MySQL Cluster 自动将表分片(或分区)到不同节点上,使数据库可以在低成本的商用硬件上横向扩展,同时保持对应用程序完全应用透明。
2)99.999% 的可用性---高可用
凭借其分布式、无共享架构,MySQL Cluster 可提供 99.999% 的可用性,确保了较强的故障恢复能力和在不停机的情况下执行预定维护的能力。
3)SQL 和NoSQL API
MySQL Cluster 让用户可以在解决方案中整合关系数据库技术和NoSQL技术
中的最佳部分,从而降低成本、风险和复杂性。
4)实时功能
MySQL Cluster 提供实时的响应时间和吞吐量,能满足最苛刻的 Web、电信及企业应用程序的需求。
5)具有跨地域复制功能的多站点集群--容灾能力、没有单点故障
跨地域复制使多个集群可以分布在不同的地点,从而提高了灾难恢复能力和全球 Web 服务的扩展能力。
6)联机扩展和模式升级
为支持持续运营,MySQL Cluster 允许向正在运行的数据库模式中联机添加节点和更新内容,因而能支持快速变化和高度动态的负载。
mysqlcluster缺点
对需要进行分片的表需要修改引擎Innodb为NDB,不需要分片的可以不修改。NDB的事务隔离级别只支持Read Committed,即一个事务在提交前,查询不到在事务内所做的修改;而Innodb支持所有的事务隔离级别,默认使用Repeatable Read,不存在这个问题。外键支持:虽然最新的Cluster版本已经支持外键,但性能有问题(因为外键所关联的记录可能在别的分片节点中),所以建议去掉所有外键。
Data Node节点数据会被尽量放在内存中,对内存要求大。 数据库系统提供了四种事务隔离级别:
A.Serializable(串行化):一个事务在执行过程中完全看不到其他事务对数据库所做的更新
(事务执行的时候不允许别的事务并发执行。事务串行化执行,事务只能一个接着一个地执行,而不能并发执行。)。
B.Repeatable Read(可重复读):一个事务在执行过程中可以看到其他事务已经提交的新插入的记录,但是不能看到其他其他事务对已有记录的更新。
C.Read Commited(读已提交数据):一个事务在执行过程中可以看到其他事务已经提交的新插入的记录,而且能看到其他事务已经提交的对已有记录的更新。
D.Read Uncommitted(读未提交数据):一个事务在执行过程中可以看到其他事务没有提交的新插入的记录,而且能看到其他事务没有提交的对已有记录的更新。
E.存在很多限制,比如:不支持外键,数据行不能超过8K(不包括BLOB和text中的数据)。虽然最新的Cluster版本已经支持外键,但性能有问题(因为外键所关联的记录可能在别的分片节点中),所以建议去掉所有外键。Data Node节点数据会被尽量放在内存中,对内存要求大。
F.部署、管理、配置很复杂。G.占用磁盘空间大,内存大。
详细可参照:InnoDB和NDB引擎对比
mysqlcluster和mycat对比
mysqlcluster是MYSQL的官方集群方案,直接在数据库级别支持ndb网络节点,自动分片,自动join,单机故障不影响集群;
mysqlcluster数据都是放在内存里的,有数据都得放到内存,再能读取,所以数据大了,内存不够用会严重影响性能,硬件只怕不便宜,而且实时同步依靠的是超大的网络带宽。当然他的功能是很有特色的。生产环境目前没听说过用这个案例。
mysql cluster新版已经可以做成物理表了,但缺点也存在,除非了带宽,磁盘容量也是个头疼问题。
mycat这个是基于阿里巴巴的Cobar方案优化而来,其支持团队也挺卖力的,支持半自动化分片、join。因为需要DBA对每个表的分片策略进行配置和干涉。个人感觉没有方案1的傻瓜式分片简单。而阿里的本质上就是分库、分表,水平拆分垂直拆分,业务拆分数据拆分 之类的技术,通过代码来减少手工的工作量。
所以,具体选哪个,还需要考虑实际项目需求,根据严密的实际数据测试才能给出最精准的答案。
第四个 MySQL Workbench,这是个好东西,用来设计数据库的。
innoDB和NDB数据库引擎对比
特点 | innoDB | NDB | ||||||||
存储限制 | 64TB | 3TB,NDB:基于48个数据节点的实用上限,每个节点64GB内存;可增加基于磁盘的数据和BLOBS(二进制大文件) | ||||||||
外键支持 | 支持 | MySQL Cluster NDB 7.3之前不支持外键、7.3和7.3之后支持 | ||||||||
事务 | 支持所有事务 | 只支持Read Committed | ||||||||
MVCC | 支持 | 不支持 | ||||||||
数据压缩 | 支持 | 不支持,mysqlcluster的检查点和备份文件能压缩 | ||||||||
数据行最大支持(>14k) | 支持VARBINARY,VARCHAR,BLOB和TEXTcolumns | 仅支持BLOB和TEXTcolumns | ||||||||
数据备份 | 使用mysql复制的异步和半同步备份 | 在mysql集群中自动同步复制 | ||||||||
读操作扩展 | 支持 | 支持,mysql集群中的自动分区;mysql备份 | ||||||||
写操作扩展 | 需要应用程序级别进行区分(做分片) | 支持,自动分区对mysqlcluster来说是透明的 | ||||||||
高可用(HA) | 需要其它软件支持才能实现高可用 | 支持(99.9%的高可用) | ||||||||
故障恢复和故障转移 | 需要其它软件支持才能实现 | 支持,mysqlcluster中的主要特性 | ||||||||
节点故障恢复时间 | 30秒或更久 | 通常都小于1秒 | ||||||||
实时性能 | 不支持 | 支持 | ||||||||
是否存储在内存 | 不存在内存 | 有些数据可以选择性地存储在磁盘上;内存和磁盘数据存储都是持久的 | ||||||||
存储引擎的NoSQL访问 | 不支持。正在丰富的本地缓存接口 | 支持,多个API,包括:Memcached, Node.js/JavaScript, Java, JPA, C++,and HTTP/REST | ||||||||
并发、并行写入 | 不支持 | 最多48个写入,对并发写入进行了优化 | ||||||||
冲突检测解决(多个复制主机) | 不支持 | 支持 | ||||||||
HashIndexes哈希索引 | 不支持 | 支持 | ||||||||
在线添加节点 | 只能用于只读备份 | 支持所有节点类型 | ||||||||
在线升级 | 不支持 | 支持 | ||||||||
联机架构修改 | 5.6以后版本 | 支持 | ||||||||
MySQL簇基本概念


NDB 是一种“内存中”存储引擎,它具有可用性高和数据一致性好的特点。能够使用多种故障切换和负载平衡选项配置NDB存储引擎,但以簇层面上的存储引擎开始最简单。MySQL簇的NDB存储引擎包含完整的数据集,仅取决于簇本身内的其他数据。下面名,我们将介绍设置由NDB存储引擎和一些MySQL服务器构成的MySQL簇的设置方法。目前,MySQL簇的部分可以独立于MySQL服务器进行配置。在MySQL簇中,簇的每个部分被视为一个节点。
注释:在很多情况下,术语“节点”用于指计算机,但在讨论MySQL簇时,它表示的是进程。在单台计算机上可以有任意数目的节点,所以我们才有可能将多个不同功能的节点配置在同一台计算机上,为此,我们采用术语簇主机。
有三类簇节点,在最低的MySQL簇配置中,至少有三个节点,这三类节点分别是:
管理节点(MGM):这类节点的作用是管理MySQL簇内的其他节点,如提供配置数据,启动并停止节点,运行备份等。由于这类节点负责管理其他节点的配置,所以管理节点应在其他节点之前先启动。MGM节点是用命令ndb_mgm启动的。数据存储节点(NDB):这类节点用于保存簇的数据。数据集点的数目与副本的数目相关,是片段的倍数。例如,对于两个副本,每个副本又两个片段,那么就有4个数据节点。没有必要有一个以上的副本。。数据节点是用命令ndbd来启动的。(本次实验data保存位置/usr/local/mysql/data)
SQL节点:这类节点是用来访问簇数据的节点。对于MySQL簇,客户端节点是使用NDB 簇存储引擎的传统MySQL服务器。典型情况下,SQL节点是使用命令mysql -ndbcluster来启动的,或将ndbcluster添加到my.cnf后面使用mysqld启动。簇配置包括对簇中单独节点的配置,以及设置节点之间的单独通信链路。对于目前设计的MySQL簇,其意图在于,从处理器的能力,内存空间和宽带来讲,存储节点是同质的,此外,为了提供单一的配置点,作为整体,簇的所有配置均位于一个文件中。管理服务器(MGM节点)负责管理簇配置文件和簇日志。簇中的每个节点从管理服务器检索配置数据,并请求确定管理服务器所在的位置的方式。当数据节点内出现有趣的事件时,节点将关于这类事件的信息传输到管理服务器,然后,这类信息写入簇日志。管理节点、数据存储节点、SQL节点三部分可看做三个进程。
ubuntu 16.04下安装Mysql Cluster
五台计算机设定方案:一台管理节点,四台数据节点四台SQL节点
卸载程序:
卸载程序和所有配置文件。在终端中输入以下命令,把<programname>替换成你希望完全移除的程序:
sudo apt-get --purge remove <programname>
查找mysql安装目录:find / -name mysql
Ubuntu中卸载mysql:①sudo apt-get autoremove --purge mysql-* ②sudo apt purge mysql-*
清楚残留数据:dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P
卸载mysql:
sudo apt-get autoremove --purge mysql-server
sudo apt-get remove mysql-server
sudo apt-get autoremove mysql-server
sudo apt-get remove mysql-common (非常重要)
find / -name mysql ---查看有没有mysql相关文件
目前5台机器,为了达到故障转移和负载均衡,5台均装配管理节点、数据节点、SQL节点。
五台计算机分别创建用户组和用户名:mysql,mysql----------groupadd mysql,useradd -g mysql mysql
检查是否添加成功:验证用户组添加:cat /etc/group,验证用户添加成功:cat /etc/passwd
安装之前:
安装之前,如果之前安装过mysql,那么需要删除相应的各种mysql文件,删除之前请停止mysql服务。并且不要忘记删除my.cnf这些配置文件。确保删除干净。不然可能会和后面的安装有冲突。如果是实验,关闭防火墙,实际中,防火墙打开对应端口。保证服务器之前能互相访问,能ping通。保证固定的ip地址。保证没有别的程序占用需要使用的端口。如3306等。这些都确认完毕后再进行安装。
iptables -I INPUT -p tcp --dport 3306 -j ACCEPT 添加3306端口规则
ufw status 查看防火墙状态
在实际情况中最好将数据节点和mysql节点分开。在实际中负载均衡服务还需要做备份,因为万一负载均衡服务器宕机将会导致所有数据节点都无法访问,所以需要对负载均衡服务器备份,有条件的话,分开管理节点和负载均衡器。
安装配置mysql-cluster
1)安装mysql-cluster
下载mysql-cluster-gpl-7.5.5-linux-glibc2.5-x86_64.tar.gz
将下载后的压缩包放在/usr/local下
mv /home/hadoop01/mysql-cluster-gpl-7.5.5-linux-glibc2.5-x86_64.tar.gz /usr/local
解压:
tar xvf mysql-cluster-gpl-7.5.5-linux-glibc2.5-x86_64.tar.gz
ln -s /usr/local/mysql-cluster-gpl-7.5.5-linux-glibc2.5-x86_64 /usr/local/mysql
将需要的文件取出:
cd mysql-cluster-gpl-7.5.4-linux-glibc2.5-x86_64
cp bin/ndb_mgm* /usr/local/bin
cd /usr/local/bin
chmod +x ndb_mgm*,加入执行权限
2)新建配置文件并且初始化管理节点
mkdir /var/lib/mysql-cluster
创建/var/lib/mysql-cluster/config.ini(管理节点配置文件)
touch config.ini

vim config.ini
[ndbd default] | | #数据结点,配置数据结点的行为 | | |
NoOfReplicas=2 | | #集群中每个表保存的拷贝数,定义在Cluster环境中相同数据的分数 | | |
| | #节点组数=节点数/NoOfReplicas,经过试验,当数据节点数为5, | | |
| | #NoOfReplicas为2时,不整除有余数时候不允许☆ | | |
DataMemory=1024M | | #指定数据内存,默认值为 80MB,最小值 1MB,无大小限制。每个数据节点中给数据分配的内存 | | |
IndexMemory=128M | | #指定索引内存,默认值为 18MB,最小值 1MB,无大小限制。每个数据节点中给索引分配的内存 | | |
| | 当太大时候有可能mysql登陆不了,出现下列情况 | | |
| | | | |
[ndb_mgmd] | | #集群中结点的唯一标识,取值 1~63。 | | |
nodeid=1 | | | | |
HostName=10.10.100.19 | | #保存管理服务器输出文件的位置,包括日志,进程输出文件,以及程序的pid文件。 | | #保存管理服务器输出文件的位置,包括日志,进程输出文件,以及程序的pid文件。 |
DataDir=/var/lib/mysql-cluster | | #管理节点log所在路径:ndb_1_cluster.log | | #管理节点log所在路径:ndb_1_cluster.log |
| | | | |
[ndbd] | | | | |
nodeid=6 | | #指定存放跟踪文件,日志文件,pid文件以及错误日志的目录。 | | |
HostName=10.10.100.19 | | | | |
DataDir=/usr/local/mysql/data | | | | |
| | | | |
[ndbd] | | | | |
nodeid=7 | | | | |
HostName=10.10.100.18 | | | | |
DataDir=/usr/local/mysql/data | | | | |
| | | | |
[ndbd] | | | | |
nodeid=8 | | | | |
HostName=10.10.100.17 | | | | |
DataDir=/usr/local/mysql/data | | | | |
| | | | |
[ndbd] | | | | |
nodeid=9 | | | | |
HostName=10.10.100.16 | | | | |
DataDir=/usr/local/mysql/data | | | | |
| | | | |
[ndbd] | | | | |
nodeid=10 | | | | |
HostName=10.10.100.15 | | | | |
DataDir=/usr/local/mysql/data | | | | |
| | | | |
[mysqld] | | | | |
nodeid=21 | | | | |
HostName=10.10.100.19 | | | | |
| | | | |
[mysqld] | | | | |
nodeid=22 | | | | |
HostName=10.10.100.18 | | | | |
| | | | |
[mysqld] | | | | |
nodeid=23 | | | | |
HostName=10.10.100.17 | | | | |
| | | | |
[mysqld] | | | | |
nodeid=24 | | | | |
HostName=10.10.100.16 | | | | |
| | | | |
[mysqld] | | | | |
nodeid=25 | | | | |
HostName=10.10.100.15 | | | | |
注释:簇管理节点的默认端口是1186,数据节点的默认端后是2202。
NoOfReplicas解读:
定义在Cluster环境中相同数据的分数,通俗一点来说就是每一份数据存放NoOfReplicas份。如果希望能够冗余,那么至少设置为2(一般情况来说此参数值设置为2就够了),最大只能设置为4。另外,NoOfReplicas值得大小,实际上也就是node group大小的定义(也就是说node group最大只能是4)。NoOfReplicas参数没有系统默认值,所以必须设定,而且只能设置在[NDBD DEFAULT]中,因为此数值在整个Cluster集群中一个node group中所有的NDBD节点都需要一样。另外NoOfReplicas的数目对整个Cluster环境中NDB节点数量有较大的影响,因为NDB节点总数量是NoOfReplicas * 2 * node_group_num;
mysql目录下创建data目录:mkdir /usr/local/mysql/data
使用配置文件初始化管理节点
/usr/local/bin/ndb_mgmd --ndb_nodeid=1 -f /var/lib/mysql-cluster/config.ini --initial
cd /usr/local/bin目录下(ndb_mgmd和ndb_mgm存在于此目录下)
查看状态:./ndb_mgm -e show
进入ndb_mgm格式:./ndb_mgm,输入完进入:ndb_mgm>模式,输入ndb_mgm>show,
正确显示哪个是管理节点,哪个是SQL节点,哪个是数据存储节点

管理节点关闭:ndb_mgm -e shutdown
到此为止管理节点配置完毕,接下去配置数据和sql节点
3)安装配置数据和mysql节点
groupadd mysql
useradd -g mysql mysql
添加用户组和用户
验证用户组添加:cat /etc/group,验证用户添加成功:cat /etc/passwd
为/var/lib/mysql-cluster文件夹赋予权限
chown root:mysql /var/lib/mysql-cluster
进入:cd /usr/local/mysql/bin/
./mysqld --initialize
./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
初始化数据库(这里要注意,如果你安装的版本和我的不同,数据库初始化的命令使不同的,
很多之前的版本会使用:scripts/mysql_install_db --user=mysql来初始化,这个
已经被mysql在新的版本中废弃了,所以需要使用下面的命令安装,如果你需要安装别的版本请参考
mysql官网的对应版本的安装命令。)
apt-get install libaio-dev
装完再次执行:./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
(官方文档:mysql_install_db:because its functionality has been integrated into mysqld)
scripts/mysql_install_db --user=mysql
记住初始密码:
hadoop01:SSfdRA9Yf6:p
hadoop02:-c_ec-yk8swA,UUID: a974c1dc-28d2-11e8-a5c0-2cfda157ba9b
hadoop03:>*=N,p2*RQ;v
hadoop04:wI<QYpE,(7w!
hadoop05:fmagpNtFU9..

chown -R root .
chown -R mysql data
chgrp -R mysql .
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld : 把mysql.server重命名为mysqld
chmod +x /etc/init.d/mysqld
这个应该是ubuntu的一个bug,,/sbin/下面没有insserv这个文件,一般这个文件在/usr/lib/insserv/insserv中,
我们可以建个链接。解决方法如下:sudo ln -s /usr/lib/insserv/insserv /sbin/insserv
chkconfig --add mysqld --mysql注册为开机启动的服务
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
vim /etc/my.cnf
[client] | | | | | | |
port = 3306 | | | | | | |
socket=/tmp/mysql.sock | | | | | | |
default-character-set=utf8 | | | #解决数据内中文乱码问题 | | | |
[mysql] | | | | | | |
default-character-set=utf8 | | | #解决数据内中文乱码问题 | | | |
[mysqld] | | | | | | |
ndbcluster | | | | | | |
ndb-connectstring=10.10.100.19 | | | | | | |
#default-storage-engine=NDBCLUSTER | | | | | | |
user=mysql | | | | | | |
max_allowed_packet=1024M | | | | | | |
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER | | | | | | |
basedir=/usr/local/mysql/ | | | | | | |
datadir=/usr/local/mysql/data | | | | | | |
socket=/tmp/mysql.sock | | | | | | |
port=3306 | | | | | | |
server-id=1 | | | #管理端配置文件中对应的 noteId | | | |
explicit_defaults_for_timestamp=true | | | | | | |
log_timestamps=SYSTEM | | | | | | |
character-set-server=utf8 | | | | | | |
collation-server=utf8_general_ci | | | | | | |
skip-character-set-client-handshake | | | | | | |
#skip-grant-tables | | | | | | |
| | | | | | |
[ndbd] | | | | | | |
connect-string=10.10.100.19 | | | | | | |
| | | | | | |
[ndb_mgm] | | | | | | |
connect-string=10.10.100.19:1186 | | | | | | |
| | | | | | |
[ndb_mgmd] | | | | | | |
config-file=/var/lib/mysql-cluster/config.ini | | | | | | |
| | | | | | |
[mysql_cluster] | | | | | | |
ndb-connectstring=10.10.100.19 | | | | | | |
4)启动数据存储节点:
cd /usr/local/mysql/bin
./ndbd --ndb_nodeid=7 --initial ----首次,或更改后
./ndbd --ndb_nodeid=7 ---二次
☆☆☆注意:应仅在首次启动ndbd时,或者在备份/恢复或者配置变化后重启ndbd时使用
“–initial”参数,这很重要,因为该参数会使数据节点删除由早期ndbd实例创建的,用于恢复
的任何文件,包括恢复用日志文件。
5)启动SQL节点
./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
以上执行之后,添加chkconfig --del mysqld,重启机器,再执行:/etc/init.d/mysqld start
再添加chkconfig --add mysqld
以下命令都在/etc/init.d目录下执行
systemctl start mysqld
①/usr/local/mysql/bin路径下执行:./mysqld start
②cd /usr/local/mysql/bin,执行./mysqld_safe --user=mysql &
(如果用./mysqld --initialize命令执行,需要用安全模式./mysqld_safe --user=mysql & 启动,但是本安装包存在缺陷需要修复)
执行:cd /usr/local/mysql/bin 目录./mysql_upgrade ☆☆☆☆需要调研如何修复
③/etc/init.d/mysqld start
/etc/init.d/mysqld start --disable-partition-engine-check
设定root新密码:hjhmysql
查看mysql进程:ps -aux | grep mysql
对应的PID:ps ax|grep mysql
编辑profile文件,vim /etc/profile,在文件最后添加如下两行:
PATH=$PATH:/usr/local/mysql/bin
export PATH
执行:source profile
cd /usr/local/mysql/bin目录,mysql -u root -p,输入初始密码,或者直接./mysql -u root -p
用初始密码登陆后,会被告知重置密码:set password = password('hjhmysql');
把登陆密码改成hjhmysql
进入mysql模式:mysql>
输入exit即是退出mysql模式
查看mysql状态:
service mysqld status
service mysqld start
service mysqld stop
/bin/sh /etc/init.d/mysqld start
bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data
/usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
解决:Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)问题
mkdir /var/run/mysqld
chmod 777 /var/run/mysqld/
service mysqld restart
查看管理节点 /usr/local/bin/ndb_mgm -e show
停止管理节点 /usr/local/bin/ndb_mgm -e shutdown
启动管理节点 /usr/local/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini
初始化管理节点启动 /usr/local/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial
启动数据节点 /usr/local/mysql/bin/ndbd
初始化mysql ./mysqld --initialize
启动sql节点 /etc/init.d/mysqld start
管理节点机器:(关闭顺序:先关闭sql节点:/etc/init.d/mysqld stop,再关闭管理节点)
ndb_mgm> shutdown #关闭所有cluster进程

chkconfig --del mysqld
chkconfig --add mysqld
☆☆☆☆☆注意:
mysql-cluster节点是按顺序启动的,即:1->6->7->21->22

数据节点与SQL节点分组原理:当NoOfReplicas=1时不启动SQL节点,只启动数据节点时,数据节点均分到0组;当启动SQL节点后,则分配相应SQL相应的数据节点0,1,2组。
问题记录:
当SQL服务启动正常,但是管理节点检测状态为not connected,则表示SQL服务和管理节点没连接上
原因在于,之前先装apt install mysql-client-core-5.7等组件,影响到mysql-cluster的
初始化安装。虽然能够登陆>mysql,但是是mysql-server-5.7的mysql而不是mysql-cluster的
数据库,所以无法连接·
启动mysqlserver时:/etc/init.d/mysqld start时,出现以下错误
参照/usr/local/mysql/data/hadoop01-System-Product-Name.err路径下log
问题1:
TIMESTAMP with implicit DEFAULT value is deprecated.
Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
my.cnf中:[mysqld]下加入explicit_defaults_for_timestamp=true,去除log中的警告。
问题2:
[Warning] 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO'
sql modes should be used with strict mode. They will be merged with strict mode in
a future release.
[Warning] 'NO_AUTO_CREATE_USER' sql mode was not set.
sql_mode是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,
比如允许一些非法数据的插入。在生产环境必须将这个值设置为严格模式,所以开发、测试环境的
数据库也必须要设置,这样在开发测试阶段就可以发现问题。
所以在my.cnf配置文件[mysqld]下加入:
[mysqld]
sql_mode='ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,PIPES_AS_CONCAT,ANSI_QUOTES'
问题3:
mysqld: Table 'mysql.plugin' doesn't exist
[ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
解决方法一
执行:进入目录cd /usr/local/mysql/bin
./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
再次执行:/etc/init.d/mysqld start

搞定!!
问题4:
输入初始密码错误,可进行初始密码跳过配置:
vim /etc/my.cnf在[mysqld]后面任意一行添加“skip-grant-tables”用来跳过密码验证的过程
保存my.cnf后重启mysql当添加skip-grant-tables后,输入完mysql -u root -p 出现password直接回车即可
set password for 'username'@'host' = password('hjhmysql');
在之前的版本中,密码字段的字段名是 password,5.7版本改为了 authentication_string
use mysql; #使用mysql数据库
update user set authentication_string = password('hjhmysql'), password_expired = 'N', password_last_changed = now() where user = 'root';
注意nodeid启动顺序基础上,在hadoop01配置的管理节点+数据节点+SQL节点,在hadoop02配置的数据节点+SQL节点完成如下为正确情况:/usr/local/mysql/bin目录下,./ndb_mgm -e show查看所有节点连接情况

问题5:
2018-03-20T11:24:54.004571+08:00 0 [Note] Event Scheduler: Loaded 0 events
2018-03-20T11:24:54.004743+08:00 0 [Note] /usr/local/mysql/bin/mysqld: ready for connections.
Version: '5.7.17-ndb-7.5.5-cluster-gpl' socket: '/tmp/mysql.sock' port: 3306 MySQL Cluster Community Server (GPL)
2018-03-20T11:24:54.004795+08:00 0 [Note] NDB Index Stat: Wait for cluster to start
2018-03-20T11:24:54.004832+08:00 2 [Note] NDB Util: Wait for cluster to start
2018-03-20T11:24:54.004838+08:00 1 [Note] NDB Binlog: Check for incidents
2018-03-20T11:24:54.004851+08:00 1 [Note] NDB Binlog: Wait for cluster to start
2018-03-20T11:25:24.008048+08:00 0 [Warning] NDB : Tables not available after 30 seconds. Consider increasing --ndb-wait-setup value
2018-03-20T11:25:24.008101+08:00 0 [Note] Executing 'SELECT * FROM INFORMATION_SCHEMA.TABLES;' to get a list of tables using the deprecated partition engine. You may use the startup option '--disable-partition-engine-check' to skip this check.
2018-03-20T11:25:24.008114+08:00 0 [Note] Beginning of list of non-natively partitioned tables
2018-03-20T11:25:24.014317+08:00 4 [Warning] NDB: Failed to acquire global schema lock, error: (4009)Cluster Failure
2018-03-20T11:25:24.014957+08:00 4 [Warning] NDB: Failed to acquire global schema lock, error: (4009)Cluster Failure
2018-03-20T11:25:24.016930+08:00 4 [Warning] NDB: Failed to acquire global schema lock, error: (4009)Cluster Failure
2018-03-20T11:25:24.017563+08:00 4 [Warning] NDB: Failed to acquire global schema lock, error: (4009)Cluster Failure
2018-03-20T11:25:24.019886+08:00 4 [Warning] NDB: Failed to acquire global schema lock, error: (4009)Cluster Failure
2018-03-20T11:25:24.020228+08:00 0 [Note] End of list of non-natively partitioned tables
ndb_waiter — Wait for NDB Cluster to Reach a Given Status:等待NDB集群达到一个给定的状态
出现这种情况,在配置文件没有问题情况下,其实是NDB集群等待时间不够,解决办法:
https://stackoverflow.com/questions/46216448/mysql-ndb-cluster-sql-node-connect-failure 在启动选项中:/etc/init.d/mysqld start --disable-partition-engine-check
问题6:mysql的log日志时间与系统时间不符
在MySQL 5.7.2 新增了 log_timestamps 这个参数,该参数主要是控制 error log、genera log,等等记录日志的显示时间参数且默认安装后error_log,slow_log 日志时间戳默认为UTC,因此会造成与系统时间不一致,与北京时间相差8个小时
SHOW GLOBAL VARIABLES LIKE 'log_timestamps';
+---------------------+-------------------+
|Variable_name | Value |
+---------------------+-------------------+
|log_timestamps | UTC |
+---------------------+-------------------+
因为log_timestamps 是一个GLOBAL的全局参数,所以直接在登录后去set全局参数,重启后就会直接失效
因此需要在mysql的配置文件中[mysqld]中增加一条log_timestamps的配置
log_timestamps=SYSTEM
问题7:mysql cluster集群停掉一台数据节点后整个集群挂掉,包括其他数据节点和sql节点全部和管理节点断开
问题:管理节点参数设置以及数据节点内存过小导致的
问题8:排查问题技巧
MySQL Cluster 自带了一个错误代码的查看的小程序。通过这个小东西我们可以方便的定位问题的原因。
这个程序就是 perror 在MYSQL安装目录的bin下面。
例:如报错:ERROR 1005 (HY000) at line 474868: Can't create table 'Table Name'(errno: 136)
#/usr/local/mysql/bin/perror --ndb 136
MySQL error code 136: No more room in index file
通过它的解释 我们把 index的相关选项改高一些。如下: (依实际情况决定数值大小)
MaxNoOfTables: 1024
MaxNoOfOrderedIndexes: 1024
MaxNoOfUniqueHashIndexes: 1024
这样问题就能解决了。
问题9:当数据节点、SQL节点超过3个节点☆☆☆时,启动时出现以下错误?????????????(没有时间继续探索)
2018-03-21T10:57:12.603042+08:00 0 [Note] Beginning of list of non-natively partitioned tables
2018-03-21T10:57:13.042641+08:00 0 [Note] NDB Index Stat: execute index stats listener failed: error 701 line 2546
2018-03-21T10:57:23.701884+08:00 0 [Note] NDB Index Stat: execute index stats listener failed: error 701 line 2546
2018-03-21T10:57:34.100379+08:00 0 [Note] NDB Index Stat: execute index stats listener failed: error 701 line 2546
2018-03-21T10:57:44.537059+08:00 0 [Note] NDB Index Stat: execute index stats listener failed: error 701 line 2546
2018-03-21T10:57:54.754540+08:00 0 [Note] NDB Index Stat: execute index stats listener failed: error 701 line 2546
2018-03-21T10:58:05.120320+08:00 0 [Note] NDB Index Stat: execute index stats listener failed: error 701 line 2546
2018-03-21T10:58:15.807656+08:00 0 [Note] NDB Index Stat: execute index stats listener failed: error 701 line 2546
可能是某个管理节点的config.ini配置文件[NDBD DEFAULT]中配置参数设置问题
















