mysql-cluster 安装配置

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

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)


经过测试总结大致有几点:

  1. 当cluster挂了后,两个数据节点的mysql都不能访问数据库;

  2. 当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)






      本文转自笔下生辉  51CTO博客,原文链接:http://blog.51cto.com/752030200/1931917,如需转载请自行联系原作者




相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
SQL 关系型数据库 MySQL
mysql主从复制概述和配置
【10月更文挑战第22天】MySQL 主从复制是一种将主服务器的数据复制到一个或多个从服务器的技术,实现读写分离,提高系统性能和可用性。主服务器记录变更日志,从服务器通过 I/O 和 SQL 线程读取并应用这些变更。适用于读写分离、数据备份和恢复、数据分析等场景。配置步骤包括修改配置文件、创建复制用户、配置从服务器连接主服务器并启动复制进程。
|
3月前
|
存储 SQL 关系型数据库
MySQL体系结构与配置
MySQL体系结构与配置
53 0
|
23天前
|
存储 SQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(1)作者——LJS[含MySQL的下载、安装、配置详解步骤及报错对应解决方法]
Mysql And Redis基础与进阶操作系列(1)之[MySQL的下载、安装、配置详解步骤及报错对应解决方法]
|
24天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
72 2
|
28天前
|
SQL 关系型数据库 MySQL
Mysql中搭建主从复制原理和配置
主从复制在数据库管理中广泛应用,主要优点包括提高性能、实现高可用性、数据备份及灾难恢复。通过读写分离、从服务器接管、实时备份和地理分布等机制,有效增强系统的稳定性和数据安全性。主从复制涉及I/O线程和SQL线程,前者负责日志传输,后者负责日志应用,确保数据同步。配置过程中需开启二进制日志、设置唯一服务器ID,并创建复制用户,通过CHANGE MASTER TO命令配置从服务器连接主服务器,实现数据同步。实验部分展示了如何在两台CentOS 7服务器上配置MySQL 5.7主从复制,包括关闭防火墙、配置静态IP、设置域名解析、配置主从服务器、启动复制及验证同步效果。
Mysql中搭建主从复制原理和配置
|
2月前
|
关系型数据库 MySQL 数据安全/隐私保护
docker应用部署---MySQL的部署配置
这篇文章介绍了如何使用Docker部署MySQL数据库,包括搜索和拉取MySQL镜像、创建容器并设置端口映射和目录映射、进入容器操作MySQL,以及如何使用外部机器连接容器中的MySQL。
docker应用部署---MySQL的部署配置
|
1月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
65 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
2月前
|
关系型数据库 MySQL Go
go抽取mysql配置到yaml配置文件
go抽取mysql配置到yaml配置文件
|
3月前
|
弹性计算 关系型数据库 MySQL
centos7 mysql安装及配置
本文详细介绍了在阿里云服务器ECS上通过yum源安装MySQL 8.0.12的过程,包括更新yum源、下载并安装MySQL源、解决安装过程中可能遇到的问题等步骤。此外,还介绍了如何启动MySQL服务、设置开机自启、配置登录密码、添加远程登录用户以及处理远程连接异常等问题。适合初学者参考,帮助快速搭建MySQL环境。
465 8
centos7 mysql安装及配置
|
2月前
|
关系型数据库 MySQL Unix
MySQL配置不区分大小写的方法
结论 通过适当配置 lower_case_table_names参数以及在数据定义和查询中选择合适的校对规则,可以灵活地控制MySQL中的大小写敏感性,以适应不同的应用场景和需求。这样的设置既可以增加数据库的兼容性,又可以在必要时利用大小写敏感性进行精确的数据处理。需要注意的是,修改 lower_case_table_names参数后,最好在数据库初始化时进行,以避免现有表名的大小写问题。
312 3

推荐镜像

更多
下一篇
无影云桌面