LoginSignup
2
0

More than 3 years have passed since last update.

CentOS7+MySQL8.0.16 環境構築

Last updated at Posted at 2019-05-09

はじめに

 仕事でMySQL Cluster使う事が決まったので最新版で環境構築を行なっていたが8.0がのDMRがリリースされたのでそちらで環境構築をし直し(メモ)

参考URL

 8.0の手順
https://dev.mysql.com/doc/refman/8.0/en/installing.html

環境

 ちょっぱやで作りたかったのでVagrantで環境構築(Vagrantは相性とかあるのでバージョンは以下)
 Vagrant Version:2.2.4
 VertualBox Version:6.0.4

 vagrant box addで困った人がいたので追記。

vagrant box add centos7 https://github.com/holms/vagrant-centos7-box/releases/download/7.1.1503.001/CentOS-7.1.1503-x86_64-netboot.box
vagrant init centos7 

 設定ファイルはこんな感じ。

  ### server1の設定内容
  config.vm.define "d01" do |server|
    server.vm.hostname = config.vm.box + "-d01" + ".vagrant"
    server.vm.network "private_network", ip: "192.168.200.101", host: "52001"
    config.vm.provider "virtualbox" do |vb|
      ### virtualbox上で表示される名前
      vb.name = config.vm.box + "_d01"
      vb.customize ["modifyvm", :id, "--memory", "2048"]
      vb.customize ["modifyvm", :id, "--cpus", "2"]
    end
  end
  ### server2の設定内容
  config.vm.define "d02" do |server|
    server.vm.hostname = config.vm.box + "-d02" + ".vagrant"
    server.vm.network "private_network", ip: "192.168.200.102", host: "52002"
    config.vm.provider "virtualbox" do |vb|
      ### virtualbox上で表示される名前
      vb.name = config.vm.box + "_d02"
      vb.customize ["modifyvm", :id, "--memory", "2048"]
      vb.customize ["modifyvm", :id, "--cpus", "2"]
    end
  end
  ### serverMの設定内容
  config.vm.define "sM" do |server|
    server.vm.hostname = config.vm.box + "-sM" + ".vagrant"
    server.vm.network "private_network", ip: "192.168.200.100", host: "52000"
    config.vm.provider "virtualbox" do |vb|
      ### virtualbox上で表示される名前
      vb.name = config.vm.box + "_sM"
      vb.customize ["modifyvm", :id, "--memory", "2048"]
      vb.customize ["modifyvm", :id, "--cpus", "1"]
    end
  end

構成

 サイトで推奨している最小構成で構築(こんな想定)
 sM:192.168.200.100:管理サーバ(MGMノード)
 d01:192.168.200.101:SQLノード+データノードA(NDBDノード)
 d02:192.168.200.102:SQLノード+データノードB(NDBDノード)

インストールパッケージ

 今回はRPMパッケージでインストール(パッケージはこれ(RPMのバンドル):wgetとかで持ってくる。)
https://cdn.mysql.com//Downloads/MySQL-Cluster-8.0/mysql-cluster-community-8.0.16-0.1.dmr.el7.x86_64.rpm-bundle.tar

確認

SSHの疎通確認

ssh 192.168.200.100 -l root
ssh 192.168.200.101 -l root
ssh 192.168.200.102 -l root
※passwordは全てvagrant

SCPでコピー

・管理サーバ(MGMノード)
 MySQL-Cluster-management-server-XXXXXX.rpm
・SQLノード
 MySQL-Cluster-server-XXXXXX.rpm
 → MySQL-Cluster-client-XXXXXX.rpm
   → MySQL-Cluster-common-XXXXXX.rpm
   → MySQL-Cluster-lib-XXXXXX.rpm
・データノード
 MySQL-Cluster-data-node-XXXXXX.rpm

RPMインストール

 rpm -Uhv XXX.rpm

注意

 SQLノードでclientのRPMが入らない。。(client)

警告: mysql-cluster-community-client-8.0.16-0.1.dmr.el7.x86_64.rpm: ヘッダー V3 DSA/SHA1 Signature、鍵 ID 5072e1f5: NOKEY
エラー: 依存性の欠如:
    perl(Class::MethodMaker) は mysql-cluster-community-client-8.0.16-0.1.dmr.el7.x86_64 に必要とされています
    perl(DBI) は mysql-cluster-community-client-8.0.16-0.1.dmr.el7.x86_64 に必要とされています
    perl(Data::Dumper) は mysql-cluster-community-client-8.0.16-0.1.dmr.el7.x86_64 に必要とされています

 perl-DBIとperl-Class-MethodMakerが必要。
 perl-DBIは、yumで入れた。(yum -y install perl-DBI)
 perl-Class-MethodMakerは、wgetでRPM落としてきてインストール。
 http://repo.openfusion.net/centos7-x86_64//perl-Class-MethodMaker-2.21-1.of.el7.x86_64.rpm

 SQLノードでserverのRPMが入らない。。(client)

警告: mysql-cluster-community-server-8.0.16-0.1.dmr.el7.x86_64.rpm: ヘッダー V3 DSA/SHA1 Signature、鍵 ID 5072e1f5: NOKEY
エラー: 依存性の欠如:
    net-tools は mysql-cluster-community-server-8.0.16-0.1.dmr.el7.x86_64 に必要とされています

 net-toolsは、wgetでRPM落としてきてインストール。
 http://mirror.centos.org/centos/7/os/x86_64/Packages/net-tools-2.0-0.24.20131004git.el7.x86_64.rpm

設定

設定ファイル

 全てのサーバに配布

/etc/my.cnf
[mysqld]
# Options for mysqld process:
ndbcluster                      # run NDB storage engine

[mysql_cluster]
# Options for NDB Cluster processes:
ndb-connectstring=192.168.200.100  # location of management server

ディレクトリ作成(データノード)

mkdir -p /usr/local/mysql/data

ディレクトリ作成(管理ノード)

 管理ノードで設定ファイル作成

% mkdir /var/lib/mysql-cluster
% cd /var/lib/mysql-cluster
% vi config.ini

config.ini
[ndbd default]
# Options affecting ndbd processes on all data nodes:
NoOfReplicas=2    # Number of replicas
DataMemory=80M    # How much memory to allocate for data storage

[ndb_mgmd]
# Management process options:
HostName=192.168.200.100        # Hostname or IP address of MGM node
DataDir=/var/lib/mysql-cluster  # Directory for MGM node log files

[ndbd]
# Options for data node "d01":
                                # (one [ndbd] section per data node)
HostName=192.168.200.101        # Hostname or IP address
NodeId=2                        # Node ID for this data node
DataDir=/usr/local/mysql/data   # Directory for this data node's data files

[ndbd]
# Options for data node "d02":
HostName=192.168.200.102        # Hostname or IP address
NodeId=3                        # Node ID for this data node
DataDir=/usr/local/mysql/data   # Directory for this data node's data files

[mysqld]
# SQL node options:
HostName=192.168.200.101        # Hostname or IP address
                                # (additional mysqld connections can be
                                # specified for this node for various
                                # purposes such as running ndb_restore)
[mysqld]
# SQL node options:
HostName=192.168.200.102        # Hostname or IP address
                                # (additional mysqld connections can be
                                # specified for this node for various
                                # purposes such as running ndb_restore)

起動

管理ノード起動

% ndb_mgmd -f /var/lib/mysql-cluster/config.ini 
MySQL Cluster Management Server mysql-8.0.16 ndb-8.0.16-dmr

データノード起動

% ndbd
2019-05-09 04:05:12 [ndbd] INFO     -- Angel connected to '192.168.200.100:1186'
2019-05-09 04:05:12 [ndbd] INFO     -- Angel allocated nodeid: 2

起動しない時は管理ノードなどのFireWallをOFFにする
CentOS7ならこれでいける。

% systemctl stop firewalld

起動確認

 確認にはndb_mgmが必要。(今回入れたのはSQLノードなのでSQLノードで確認)

% ndb_mgm
ndb_mgm> show
[ndbd(NDB)] 2 node(s)
id=2    @192.168.200.101  (mysql-8.0.16 ndb-8.0.16, Nodegroup: 0, *)
id=3    @192.168.200.102  (mysql-8.0.16 ndb-8.0.16, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @192.168.200.100  (mysql-8.0.16 ndb-8.0.16)

[mysqld(API)]   2 node(s)
id=4 (not connected, accepting connect from 192.168.200.101)
id=5 (not connected, accepting connect from 192.168.200.102)

SQLノード以外は起動できている。

SQLノード起動

まずはmySQLの初期化

% mysqld --initialize --user=mysql

--user=mysqlのオプションをつけないとroot実行となるため、以下エラーが出てハマる。

[ERROR] [MY-010123] [Server] Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!

次に/var/log/mysqld.logを開いて初期パスワードを確認(メモっておく)

[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: [XXXXXXXX]
% mysqld --ndbcluster --user=mysql
% ndb_mgm
ndb_mgm> show
[ndbd(NDB)] 2 node(s)
id=2    @192.168.200.101  (mysql-8.0.16 ndb-8.0.16, Nodegroup: 0, *)
id=3    @192.168.200.102  (mysql-8.0.16 ndb-8.0.16, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @192.168.200.100  (mysql-8.0.16 ndb-8.0.16)

[mysqld(API)]   2 node(s)
id=4    @192.168.200.101  (mysql-8.0.16 ndb-8.0.16)
id=5    @192.168.200.102  (mysql-8.0.16 ndb-8.0.16)

ログイン

各SQLノードで実行が必要っぽい。
メモったroot初期パスワードでログインする

% mysql -uroot -p
Enter password: 

初回ログイン時はパスワード変更を行うまで何もできない。

mysql>XXXXXXXXX
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
mysql>ALTER USER 'root'@'localhost' IDENTIFIED BY 'root'; /*パスワード変更*/
Query OK, 0 rows affected (0.01 sec)

mysql> select * from information_schema.ENGINES; /*エンジンの確認 */
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| ENGINE             | SUPPORT | COMMENT                                                        | TRANSACTIONS | XA   | SAVEPOINTS |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| ndbcluster         | YES     | Clustered, fault-tolerant tables                               | YES          | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| ndbinfo            | YES     | MySQL Cluster system information storage engine                | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
11 rows in set (0.02 sec)


mysql> select * from ndbinfo.nodes; /*NDBDノードの確認*/
+---------+--------+---------+-------------+-------------------+
| node_id | uptime | status  | start_phase | config_generation |
+---------+--------+---------+-------------+-------------------+
|       2 |   2752 | STARTED |           0 |                 1 |
|       3 |   2743 | STARTED |           0 |                 1 |
+---------+--------+---------+-------------+-------------------+
2 rows in set (0.02 sec)

一つのSQLノードで以下実行

mysql> CREATE DATABASE NDB01 default character set utf8mb4;USE NDB01;
Query OK, 1 row affected (0.08 sec)

Database changed
mysql> CREATE TABLE test_poc(id INT NOT NULL AUTO_INCREMENT, jdoc JSON NOT NULL, PRIMARY KEY(id)) ENGINE=NDBCLUSTER;
Query OK, 0 rows affected (0.25 sec)

mysql> show tables;
+-----------------+
| Tables_in_NDB01 |
+-----------------+
| test_poc         |
+-----------------+
1 row in set (0.00 sec)

mysql> desc test_poc;
+-------+---------+------+-----+---------+----------------+
| Field | Type    | Null | Key | Default | Extra          |
+-------+---------+------+-----+---------+----------------+
| id    | int(11) | NO   | PRI | NULL    | auto_increment |
| jdoc  | json    | NO   |     | NULL    |                |
+-------+---------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

もう一方のSQLノードから上記テーブルが参照できれば一先ずOKかな?

外部アクセス用にフルアクセスユーザを作る。

mysql> create user 'test'@'%' identified by 'test';
Query OK, 0 rows affected (0.02 sec)

mysql> grant all privileges on NDB01.* to 'test'@'%';
Query OK, 0 rows affected (0.01 sec)

停止

停止もndb_mgmを使う

% ndb_mgm -e shutdown

とりあえず以上。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0