LoginSignup
3
2

More than 5 years have passed since last update.

CentOS7のdockerでMySQL Cluster環境を構築する(ついでにPythonから接続確認する)

Posted at

dockerをインストールする

dockerがインストールされていないときは、インストールします。

$ sudo yum install docker
$ sudo systemctl start docker
$ sudo systemctl enable docker
$ sudo systemctl status docker
~~
Active: active (running)

dockerイメージの取得

hubから公式のイメージを取得します。

$ sudo docker pull mysql/mysql-cluster
$ sudo docker images

MySQL Cluster クラスタの構築

ドキュメント通りでできました。

$ sudo docker network create cluster --subnet=192.168.0.0/16
$ sudo docker run -d --net=cluster --name=management1 --ip=192.168.0.2 mysql/mysql-cluster ndb_mgmd
$ sudo docker run -d --net=cluster --name=ndb1 --ip=192.168.0.3 mysql/mysql-cluster ndbd
$ sudo docker run -d --net=cluster --name=ndb2 --ip=192.168.0.4 mysql/mysql-cluster ndbd
$ sudo docker run -d --net=cluster --name=mysql1 --ip=192.168.0.10 -e MYSQL_RANDOM_ROOT_PASSWORD=true mysql/mysql-cluster mysqld

$ sudo docker logs mysql1 2>&1 | grep PASSWORD
$ sudo docker exec -it mysql1 mysql -uroot -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';

ndbdがクラスタのDB本体、ndb_mgmdがndbを管理するサービスです。
基本的にクライアントはSQLサーバに接続すれば良いようです。

確認する

確認のためのユーザとデータベースを作っておきます。

CREATE USER hoge;
SET PASSWORD FOR hoge = PASSWORD('hoge');
CREATE DATABASE mydb;
GRANT ALL ON mydb.* TO hoge;

作成したユーザでテーブルとテストデータを用意します。

CREATE TABLE person (
   id int AUTO_INCREMENT NOT NULL PRIMARY KEY,
   name varchar(256)
) engine=ndbcluster;
INSERT INTO person (name) VALUES ('Shibuya Rin');
INSERT INTO person (name) VALUES ('Futaba Anzu');
INSERT INTO person (name) VALUES ('Mimura Kanako');

ストレージエンジン「ndbcluster」がMySQL Clusterですが、特にInnoDBと構文的な違いはありませんね。

接続確認はホストのPythonから確認することにしました。
Pythonからの接続に使用するMySQLのドライバは複数あるようなのですが、特にこだわりもないので、公式のものを使用することにします。

$ sudo pip3.6 install --egg mysql-connector-python-rf

チュートリアルを参考にテストコードを作成します。

mysql-python.py
import mysql.connector

cnx = mysql.connector.connect(
    host='192.168.0.10',
    user='hoge',
    password='hoge',
    database='mydb'
)
cursor = cnx.cursor();

cursor.execute("SELECT * FROM person");
for (id, name) in cursor:
    print("{}, {}".format(id, name))

cursor.close()
cnx.close()

実行してみます。

$ python3.6 mysql-python.py
1, Shibuya Rin
2, Futaba Anzu
3, Mimura Kanako

問題なさそうです。
終わりです。

参考

https://hub.docker.com/r/mysql/mysql-cluster/
https://dev.mysql.com/doc/connector-python/en/
http://blog.amedama.jp/entry/2015/09/24/222040
http://qiita.com/h-imaoka/items/5702d51d8447da1c045f

3
2
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
3
2