1:创建两个docker container

这里我使用给指定 container ip的形式创建:

查看容器网络

docker network ls

创建一个新的bridge网络

docker network create --driver bridge --subnet=172.0.12.0/16 --gateway=172.0.1.1 mytestnet

查看网络详情

docker network inspect mytestnet

  

创建容器,并指定ip

docker run -e TZ="Asia/Shanghai" --privileged -itd -h node1 --name mysqlnode1 --network=mytestnet --ip 172.0.12.1  docker.io/centos
docker run -e TZ="Asia/Shanghai" --privileged -itd -h node2 --name mysqlnode2 --network=mytestnet --ip 172.0.12.2 docker.io/centos

node1 作为一个管理节点 SQL、NDB服务器

node2 作为一个 SQL 、NDB服务器

分别进入 docker 容器

docker attach  <container_id>

2:contianer中安装一些依赖:

yum -y install  make git gcc-c++ cmake bison-devel ncurses-devel perl per-devel ncurses-devel bison libaio-devel java autoconf vim wget net-tools

检查有没有安装过mysql和mariadb,有的话先卸载,关闭防火墙,selinux (该镜像不涉及忽略)

3:下载安装mysqlcluster

3.1:编译准备

下载tar包

wget -c http://mirrors.sohu.com/mysql/MySQL-Cluster-7.4/mysql-cluster-gpl-7.4.25.tar.gz
tar -zxvf mysql-cluster-gpl-7.4.25.tar.gz  

创建数据存放目录

mkdir -p /data/program/mysqlCluster/{bin,ndbdata,tmp}
chown -R mysql:mysql /data/program/mysqlCluster

新建mysql用户及用户组

groupadd mysql
useradd -g mysql -s /usr/sbin/nologin mysql

进入解压文件中,替换文件(原安装包不支持arm)

分别替换

./storage/ndb/memcache/extra/libevent/epoll_sub.c
./storage/ndb/src/kernel/vm/mt-asm.h

https://pan.baidu.com/s/1ZGY8r0crBHLOLaa4DKIgWA  58uu

https://pan.baidu.com/s/1AGjGklu8SF97X5x2wcYEqA   2t48

3.3 编译

执行下列代码:

cmake -DBUILD_CONFIG=mysql_release \
-DCMAKE_BUILD_TYPE=debug \
-DCMAKE_INSTALL_PREFIX=/data/program/mysqlCluster \
-DMYSQL_UNIX_ADDR=/data/program/mysqlCluster/tmp/mysql-cluster.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS:STRING=utf8,gbk \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_DATADIR=/data/program/mysqlCluster/ndbdata \
-DMYSQL_USER=mysql \
-DMYSQL_TCP_PORT=3306
make && make install

添加环境变量:

export  PATH=$PATH:/data/program/mysqlCluster/bin

3.4 安装

cd /data/program/mysqlCluster/
ln -s bin/mysqld-debug bin/mysqld
cp support-files/mysql.server /etc/init.d/mysqld
chmod –R 755 /etc/init.d/mysqld

按理说mysql添加到/etc/init.d目录后就可以启动了,但是要启动集群,还需要配置管理节点和数据节点,mysql暂缓启动。
(启动 mysqlcluster --> Management Node > Data Node > SQL Node)

3.5:管理节点配置(mysqlnode1)

创建配置文件

mkdir  -p /data/program/mysqlCluster/etc
vim /data/program/mysqlCluster/etc/config.ini

写入配置

[ndb_mgmd default]
datadir=/data/program/mysqlCluster/ndbdata
[ndbd default]
NoOfReplicas = 2
DataMemory = 200M
IndexMemory = 20M
datadir=/data/program/mysqlCluster/ndbdata
[ndb_mgmd]
NodeId = 1
HostName=172.0.12.1
datadir=/data/program/mysqlCluster/ndbdata [ndbd]
NodeId = 11
HostName=172.0.12.1
datadir=/data/program/mysqlCluster/ndbdata [ndbd]
NodeId=12
HostName=172.0.12.2
datadir=/data/program/mysqlCluster/ndbdata [mysqld]
NodeId = 21
HostName=172.0.12.1
[mysqld]
NodeId=22
HostName=172.0.12.2
[mysqld]
[mysqld]
[mysqld]

 启动管理节点

ndb_mgmd  -f  /data/program/mysqlCluster/etc/config.ini --initial (--initial 首次加载/data/program/mysqlCluster/etc/config.ini文件有改变,其它时候不要加,除非是在备份、恢复或配置变化后重启时,其他时候不要加,不然数据就清空)

#如果有改动要加上

rm -rf /data/program/mysqlCluster/mysql-cluster/ndb_1_config.bin.1
ndb_mgmd -f /data/program/mysqlCluster/etc/config.ini

查看集群状态:

ndb_mgm
ndb_mgm> show

关闭管理节点
ndb_mgm> shutdown

 

3.6 数据节点配置 (mysqlnode1 mysqlnode2)

配置数据节点

cp  /data/program/mysqlCluster/support-files/ my-default.cnf /etc/my.cnf
vim /etc/my.cnf

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
ndbcluster
ndb-connectstring=172.0.12.1
[mysql_cluster]
ndb-connectstring=172.0.12.1

启动数据节点

ndbd --initial (--initial 首次加载)

  

3.7 sql节点配置(node1 node2)

vim  /etc/my.cnf

[mysqld]
basedir =/data/program/mysqlCluster
datadir =/data/program/mysqlCluster/ndbdata
socket=/data/program/mysqlCluster/tmp/mysql-cluster.sock ndbcluster
ndb-connectstring = 172.0.12.1 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[client]
default-character-set = utf8
[mysqld]
character_set_server=utf8
[mysql_cluster]
ndb-connectstring = 172.0.12.1
[NDB_MGM]
connect-string=172.0.12.1

 启动sql节点(可以启动mysql了)

/etc/init.d/mysqld  {start stop restart }

设置密码

mysql  -u root  -p (登录无密码)
mysql> SET PASSWORD = PASSWORD('123456');
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

至此配置完成!

test

1 从node1数据节点登陆MYSQL

mysql> create database zxztest ;
Query OK, 1 row affected (0.03 sec)

mysql> use zxztest;
Database changed
mysql> create table test1(id int,name varchar(10)) engine=ndb ;
Query OK, 0 rows affected (0.15 sec)

mysql> insert into test1 values(1,'XYT');
Query OK, 1 row affected (0.02 sec)

mysql> select * from test1 ;
+------+------+
| id   | name |
+------+------+
|    1 | XYT  |
+------+------+
1 row in set (0.00 sec)

2 登陆node2数据结点,进行验证

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| ndbinfo            |
| performance_schema |
| test               |
| zxztest            |
+--------------------+
6 rows in set (0.04 sec)

mysql> use zxztest;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from test1 ;
+------+------+
| id   | name |
+------+------+
|    1 | XYT  |
+------+------+
1 row in set (0.00 sec)
————————————————

参考:https://blog.csdn.net/xiayutai1/article/details/51933234

docker 中 安装配置 mysqlcluster(arm)的更多相关文章

  1. 在Docker中安装配置Oracle12c并实现数据持久化

    在Docker中安装配置Oracle12c并实现数据持久化 选定镜像,并pull到系统中,一定要先配置加速,不然超级慢 eric@userver:~$ docker pull sath89/oracl ...

  2. elk系列教程:docker中安装配置elk

    elasticSearch Docker安装elasticsearch: docker pull docker.io/elasticsearch:7.2.0 启动: docker run -p 920 ...

  3. Docker中安装配置Oracle数据库

    本文使用的OS是Ubuntu([16.04.1_server][1])[注:Ubuntu是安装在vmware虚拟机上的]. 其他的Oracle连接工具:[sqldeveloper-4.1.5.21.7 ...

  4. 在Docker中安装配置Oracle11g并实现数据持久化

    1.拉取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g 镜像详情:https://dev.aliyun.com/ ...

  5. docker微服务部署之:四、安装docker、docker中安装mysql和jdk1.8、手动构建镜像、部署项目

    docker微服务部署之:三,搭建Zuul微服务项目 1.Centos7安装Docker 详见:Centos7安装Docker 2.Docker中安装jdk1.8 详见:使用Docker构建jdk1. ...

  6. Windows和Centos下Docker的安装配置

    Windows和Centos下Docker的安装配置 windows环境下的安装(win10) 在Windows系统上需要利用toolbox来安装Docker,现在 Docker 有专门的 Win10 ...

  7. Docker容器安装配置SQLServer服务(Linux)

    一:前言 随着不断的对Docker容器的实践和学习,越来越觉得容器的强大,把 SQL Server 数据库服务放在docker容器中,比你自己在宿主服务器上面安装配置一个SQL Server服务器是要 ...

  8. Linux或Docker里安装minio / Docker中安装h5ai

    此文为单节点搭建操作 Linux中搭建minio 对象存储服务器 下载minio安装包 wget https://dl.minio.io/server/minio/release/linux-amd6 ...

  9. Eclipse中安装配置Tomcat

    Eclipse(4.4.x及以上)中安装配置Tomcat 以下配置说明全部针对免安装版本 基于tomcat的安装目录和运行目录是可以不同的,本文都会进行说明 首先简单介绍一下tomcat的目录结构,一 ...

随机推荐

  1. BZOJ3894/LG4313 文理分科 新建点最小割

    问题描述 BZOJ3894 LG4313 题解 显然一个人只能选文/理 -> 一个人只能属于文(S).理(T)集合中的一个 可以把选择文得到 \(art\) 的收益看做选择文失去 \(scien ...

  2. Python连载54-FTP编程

    一.FTP工作流程 1.客户端链接远程主机上的FTP服务器 2.客户端输入用户名和密码(或者“anonymous”和电子邮件地址) 3.客户端和服务器进行各种文件传输和信息查询操作 4.客户端从远程F ...

  3. Python 分析到底是谁操纵《庆余年》上了热搜?

    庆余年电视剧终于在前两天上了,这两天赶紧爬取数据看一下它的表现. ​ ​ 庆余年 ​ <庆余年>是作家猫腻的小说.这部从2007年就开更的作品拥有固定的书迷群体,也在文学IP价值榜上有名. ...

  4. java中的this、super、static、final、abstract关键字的作用

    this关键字的作用 1.this是对象内部指代自身的引用,同时也是解决成员变量和局部变量同名问题: 2.this可以调用成员变量,不能调用局部变量: 3.this也可以调用成员方法,但在普通方法中可 ...

  5. Redis缓存与数据库一致性解决方案

    背景 缓存是数据库的副本,应用在查询数据时,先从缓存中查询,如果命中直接返回,如果未命中,去数据库查询最新数据并返回,同时写入缓存. 缓存能够有效地加速应用的读写速度,同时也可以降低后端负载.是应用架 ...

  6. Windows10 搭建Kafka集群

    下载Kafka 1.下载Kafka:http://mirror.bit.edu.cn/apache/kafka/2.3.0/kafka_2.12-2.3.0.tgz 2.解压后复制Kafka文件夹,分 ...

  7. 哈希算法原理【Java实现】(十)

    前言 在入学时,学校为我们每位童鞋建立一个档案信息,当然每个档案信息都对应档案编号,还有比如在学校图书馆,图书馆为每本书都编了唯一的一个书籍号,那么问题来了,当我们需要通过档案号快速查到对应档案信息或 ...

  8. SpringBoot整合Thymeleaf表单更新操作

    对于表单值回显并更新的逻辑相比大家都已经很熟悉了, 但是我们操作Thymeleaf的话这里就会有一点小坑了, 在要回显值的表单的所有字段上,我们都要加上 th:field,才可以完成回显值更新 或者这 ...

  9. Python自动发送邮件--smtplib模块

    import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText f ...

  10. java的异常抛出throws和throw的简单使用

    前提: 当在程序测试时,如果你需要定义一个自己的异常,而非现在已经存在的异常,这个时候你需要用到throws和throw,try-catch只是一个简单的捕获异常的过程. 代码如下: package ...