Ubuntu Desktop 22.04 LTS ノウハウ
Ubuntu から
Raspberry Pi の Mariadb にアクセスする
Ubuntu から
Raspberry Pi の Mariadb にアクセスする
Raspberry Pi の Mariadb に蓄積されているデータを、Ubuntu から Pythonを使ってアクセルしてみる。
通常 Mariadb にはポート番号「3306」が使用される。
以下、Ubuntu から Raspberry Pi の Mariadb を読んで、「CSV」に書き出した記録。
スポンサー リンク
1. Raspberry Piでのファイアウォール(ufw)の設定
通常 Mariadb にはポート番号「3306」が使用される。
ポート番号を調べるコマンド。
sudo mariadb
MariaDB[(none)]> show variables like 'port';
MariaDB[(none)]> show variables like 'port';
ポート番号を変更するには、MariaDBの設定ファイルを編集する。。
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
ファイアウォールで3306ポートを解放する。
sudo ufw allow 3306
変更内容を確認する。
sudo ufw status
2. Raspberry Pi側 Mariadb の設定
①.bind-addressを変更する
MariaDBの設定ファイルを編集し、bind-addressを変更する。
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
この設定がされていない場合に表示されるエラー。
mysql.connector.errors.DatabaseError: 2003 (HY000): Can't connect to MySQL server on '192.168.11.112:3306' (111)
②.使用するユーザーに、外部からのアクセス権を設定する
ユーザー一覧で、user カラムと host カラムの情報を確認してみる。
sudo mariadb
MariaDB[(none)]> select user, host from mysql.user;
MariaDB[(none)]> select user, host from mysql.user;
+-------------+-----------+
| User | Host |
+-------------+-----------+
| flaskpy | localhost |
| mariadb.sys | localhost |
| mysql | localhost |
| root | localhost |
+-------------+-----------+
使用するユーザー「flaskpy」の、Host が localhost のみになっている。
使用するユーザーに外部アクセスを許可する権限を設定する。
CREATE USER 'flaskpy' IDENTIFIED BY '';
GRANT ALL PRIVILEGES ON *.* TO 'flaskpy'@'%' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'flaskpy'@'%' WITH GRANT OPTION;
+-------------+-----------+
| User | Host |
+-------------+-----------+
| flaskpy | % |
| flaskpy | localhost |
| mariadb.sys | localhost |
| mysql | localhost |
| root | localhost |
+-------------+-----------+
これで flaskpy に対して、ホスト側のアプリケーションからのアクセスが可能となる。
この設定がされていない場合に表示されるエラー。
mysql.connector.errors.DatabaseError: 1130 (HY000): Host '192.168.11.121' is not allowed to connect to this MariaDB server
③.Hostを外部から接続できる%にしてユーザーを作り直す
使用するユーザー flaskpy の Host に「localhost」 が残っていると、
+-------------+-----------+
| User | Host |
+-------------+-----------+
| flaskpy | % |
| flaskpy | localhost |
+-------------+-----------+
次のエラーが表示される。
mysql.connector.errors.ProgrammingError: 1045 (28000): Access denied for user 'flaskpy'@'192.168.11.121' (using password: YES)
Hostを外部から接続できる「%」にしてユーザーを作り直す。
drop user flaskpy@localhost;
grant all privileges on ondodb.* to 'flaskpy'@'%' identified by 'password' with grant option;
grant all privileges on ondodb.* to 'flaskpy'@'%' identified by 'password' with grant option;
+-------------+-----------+
| User | Host |
+-------------+-----------+
| flaskpy | % |
| mariadb.sys | localhost |
| mysql | localhost |
| root | localhost |
+-------------+-----------+
3. Ubuntu からアクセスする Python スクリプト
Raspberry Pi側の Mariadb を読んで、 Ubuntu 側で「CSV」に書き出すスクリプト。
# -*- coding: utf-8 -*-
import csv
import mysql.connector
# データベースに接続
connection = mysql.connector.connect(
user="flaskpy",
password="password",
host="192.168.11.112",
port="3306",
database="ondodb"
)
# CSVファイルに書き出す際のファイルパス
csv_file_path = 'work/ondo_situdo_31.csv'
# カーソルの作成
cursor = connection.cursor()
try:
# データの取得クエリ
query = 'SELECT * FROM ondo_situdo'
cursor.execute(query)
# 取得したデータをCSVファイルに書き出す
with open(csv_file_path, 'w', newline='', encoding='utf-8') as csv_file:
csv_writer = csv.writer(csv_file)
# ヘッダーを書き込む
csv_writer.writerow([i[0] for i in cursor.description])
# データを書き込む
csv_writer.writerows(cursor.fetchall())
print(f'Data exported to {csv_file_path}')
except Exception as e:
print(f'Error: {e}')
finally:
# 接続を閉じる
cursor.close()
connection.close()
「host=」で、Raspberry PiのIPアドレスを指定する。
host="192.168.11.112",
port="3306",
以上。
(2024.03.02)
スポンサー リンク