ネットワーク上の ubuntu の mysql の情報を見る

ネットワーク上にある ubuntu の mysql に linux mint からアクセスしてデータを閲覧します。

そのためにはまず ubuntu 側の設定が必要です。

ubuntu の mysql 設定

ubuntu に ssh ログインして、mysql に入ります。


mysql -u root -p

ユーザー名 heno を登録。


mysql> CREATE USER heno@'192.168.0.8' IDENTIFIED BY 'moheno';

pacsdb と arrdb に対して select 権限を与えます。


mysql> GRANT SELECT ON pacsdb.* TO 'heno'@'192.168.0.8';
mysql> GRANT SELECT ON arrdb.* TO 'heno'@'192.168.0.8';

確認。


mysql> select Host, User from mysql.user;
+--------------+------------------+
| Host         | User             |
+--------------+------------------+
| 192.168.0.8  | heno             |
| localhost    | arr              |
| localhost    | debian-sys-maint |
| localhost    | mysql.session    |
| localhost    | mysql.sys        |
| localhost    | pacs             |
| localhost    | phpmyadmin       |
| localhost    | root             |
+--------------+------------------+
11 rows in set (0.00 se

linux mint から ubuntu の mysql に入る

ssh をログアウトして、linux mint のコマンドラインに戻り ubuntu の mysql にログインします。


mysql -h 192.168.0.99 -u heno -p

ログインできない場合は、ポートの開放か「mysqld.cnf」の設定をする必要があります。
以下のようにコメントアウト。

/etc/mysql/mysql.conf.d/mysqld.cnf

#bind-address = 127.0.0.1

確認。


mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| arrdb              |
| pacsdb             |
+--------------------+
3 rows in set (0.01 sec)

heno の権限確認。


mysql> show grants for 'heno'@'192.168.0.8';
+----------------------------------------------------+
| Grants for heno@192.168.0.8                        |
+----------------------------------------------------+
| GRANT USAGE ON *.* TO 'heno'@'192.168.0.8'         |
| GRANT SELECT ON `pacsdb`.* TO 'heno'@'192.168.0.8' |
| GRANT SELECT ON `arrdb`.* TO 'heno'@'192.168.0.8'  |
+----------------------------------------------------+
4 rows in set (0.00 sec)

試しに以下のようなクエリを実行して、抽出結果を確認。


use pacsdb;

mysql> SELECT * FROM study INNER JOIN patient ON study.patient_fk = patient.pk WHERE DATE_FORMAT(study_datetime,
'%Y-%m-%d') > '2018-09-13' ORDER BY study_datetime DESC;

各ファイルの設定

dcm01.py

from flask import Flask, render_template
import pymysql

app = Flask(__name__)

@app.route('/')
def hello():
    db = pymysql.connect(
            host='192.168.0.99',
            user='heno',
            password='moheno',
            db='pacsdb',
            charset='utf8',
            cursorclass=pymysql.cursors.DictCursor,
        )
    cur = db.cursor()
    sql = "SELECT * FROM study INNER JOIN patient ON study.patient_fk = patient.pk WHERE DATE_FORMAT(study_datetime, '%Y-%m-%d') > '2018-09-13' ORDER BY study_datetime DESC";
    cur.execute(sql)
    mbrs = cur.fetchall()
    cur.close()
    db.close()
    return render_template('select.html', title='flask test', mbrs=mbrs) 

if __name__ == "__main__":
    app.run(debug=True)

templates/select.html

{% extends "layout.html" %}
{% block content %}
<h2>dicom 検査一覧</h2>
<table class="datashow">
	<tr><th>pk</th><th>日付</th><th>カルテ番号</th><th>生年月日</th><th>性別</th><th>モダリティ</th><th>部位</th></tr>
	{% for mbr in mbrs %}
		<tr><td>{{ mbr.pk}}</td><td>{{ mbr.study_datetime}}</td><td>{{ mbr.pat_id }}</td><td>{{ mbr.pat_birthdate }}</td><td>{{ mbr.pat_sex }}</td><td>{{ mbr.mods_in_study }}</td><td>{{ mbr.study_desc }}</td></tr>
	{% endfor %}
</table>
{% endblock %}
templates/layout.html

<!doctype html>
<html>
<head>
<title>{{ title }}</title>
<link rel="stylesheet" type="text/css" href="{{ url_for('static',filename='css/mystyle.css') }}">
</head>
<body>
<div id="container">
	<div id="main">
		{% block content %}
		<!-- ここにメインコンテンツを書く -->
		{% endblock %}
	</div>	
</div>
</body>
</html>

flask 起動


cd ~/flask
python dcm01.py

http://localhost:5000/ にアクセス。

結果は以下のようになりました。
氏名は表示しないようにしてあります。