howto Base de données

Mise en place des outils

  • Installer MySqlWorkbench sur Windows depuis le NAS

mtic-wifi

  • Installer SQLiteStudio sur Windows depuis le NAS ou depuis sa page d’accueil link

  • Installer SQLite et driver Qt associé sur LUbuntu/Raspberry Pi:

    sudo apt install sqlite3 sqlite3-doc libqt5sql5-sqlite

mtic-lora

  • Installer MySQL Server sur LUbuntu/Raspberry Pi:

    sudo apt install mysql-server
  • Configurer MYSQL

    • configurer mot de passe root

      $ sudo mysql
      mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqladmin';
      Query OK, 0 rows affected (0,02 sec)
      
      mysql> FLUSH PRIVILEGES;
      Query OK, 0 rows affected (0,01 sec)
      
      mysql> SELECT user, plugin FROM mysql.user;
      +------------------+-----------------------+
      | user             | plugin                |
      +------------------+-----------------------+
      | debian-sys-maint | caching_sha2_password |
      | mysql.infoschema | caching_sha2_password |
      | mysql.session    | caching_sha2_password |
      | mysql.sys        | caching_sha2_password |
      | root             | mysql_native_password |
      +------------------+-----------------------+
      5 rows in set (0,00 sec)
      
      mysql> exit
    • Créer un nouvel utilisateur MySQL

      $ mysql -u root -p
      
      mysql> SHOW VARIABLES LIKE 'validate_password%'; (1)
      +-------------------------------------------------+--------+
      | Variable_name                                   | Value  |
      +-------------------------------------------------+--------+
      | validate_password.changed_characters_percentage | 0      |
      | validate_password.check_user_name               | ON     |
      | validate_password.dictionary_file               |        |
      | validate_password.length                        | 8      |
      | validate_password.mixed_case_count              | 1      |
      | validate_password.number_count                  | 1      |
      | validate_password.policy                        | MEDIUM |
      | validate_password.special_char_count            | 1      |
      +-------------------------------------------------+--------+
      8 rows in set (0,01 sec)
      
      mysql> CREATE USER 'mtic-lora'@'%' IDENTIFIED WITH mysql_native_password BY 'MTIC-LoRa-2024'; (2)
      Query OK, 0 rows affected (0,01 sec)
      
      mysql> exit
      Bye
      1 Affichage politique de mot de passe ⇒ 8+ caractères ET majuscules/minuscules ET chiffres ET caractères spéciaux
      2 Cration utilisateur “mtic-lora” avec mot de passe en accord avec la politique de sécurité
    • Créer une BDD accessible à l’utilisateur “mtic-lora”

      $ mysql -u root -p
      
      mysql> CREATE DATABASE dbMticLora; (1)
      Query OK, 1 row affected (0,03 sec)
      
      mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, INDEX, DROP, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON dbMticLora.* TO 'mtic-lora'@'%'; (2)
      Query OK, 0 rows affected (0,01 sec)
      
      mysql>
      1 Création BDD
      2 Attribution des droits SELECT, UPDATE …​ à l’utilisateur “mtic-lora” connecté depuis n’importe quelle IP (→ '%')
    • Autoriser un accès distant à MySQL en modifiant /etc/mysql/mysql.conf.d/mysql.cnf

      # If MySQL is running as a replication slave, this should be
      # changed. Ref https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_tmpdir
      # tmpdir                = /tmp
      #
      # Instead of skip-networking the default is now to listen only on
      # localhost which is more compatible and is not less secure.
      bind-address            = #192.168.5.12(1)
      mysqlx-bind-address     = 127.0.0.1
      1 Mettre IP de la VM LUbuntu ou de la Raspberry Pi
    • Redémarrer le service avec :

      sudo systemctl restart mysql.service
    • Autoriser l’accès à MySQL dans le firewall

      $ sudo ufw allow mysql
      La règle a été ajoutée
      La règle a été ajoutée (v6)

[Ressources consultées] :

Utilisation de MySqlWorkbench

Prise en main

Exporter un modèle au format SQLite

MySqlWorkbench est un outil dédié aux BDD MySQL. Cependant, il est possible — via l’ajout d’un plugin — d’exporter un modèle sous forme SQL dans un format compatible avec SQLite.

Le fichier de plugin se résume au script Python suivant : export_sqlite_grt.py

Procédure pour télécharger le script depuis Github

Ci-dessous figure — pour information — la procédure pour télécharger le script depuis son dépôt Github. Bien veiller à télécharger la version proposée (→ pull request) par l’utilisateur “sstain” à son auteur pour prendre en charge la version 3 de Python :

  1. Se rendre sur le dépôt Github mysql-wb-exportsqlitelink

  2. Se placer dans l’onglet Pull Requests puis sélectionner “Workbench 8.0.26 (Python 3.7.7) compatibility”

  3. Se placer ensuite dans l’onglet Commits et ouvrir le commit “Workbench 8.0.26 (Python 3.7.7) compatibility”

  4. Sélectionner l’option “View file” dans le menu …​ situé à droite du nom de fichier (→ export_sqlite_grt.py)

  5. Sélectionner enfin l’icône pour télécharger le fichier en local

Ajout du plugin

Pour ajouter le plugin à MySqlWorkbench, il suffit alors de :

  1. Aller dans le menu Scripting  Install Plugin/Module…​

  2. Sélectionner le fichier export_sqlite_grt.py

  3. Valider l’importation

  4. Redémarrer MySqlWorkbench

⇒ la fonctionnalité supplémentaire ajoutée est alors accessible depuis le menu Tools  Catalog  Export SQLite CREATE Script

Export du modèle au format SQLite

  1. Sélectionner le menu Tools  Catalog  Export SQLite CREATE Script

  2. Le code SQL compatible avec la syntaxe SQLite est alors proposé dans la fenêtre qui s’ouvre

    export sqlite from mwb
  3. Sauver le fichier dans, par exemple, c:\tmp\export-sqlite-from-mwb.sql

Importation dans SQLiteStudio

sqlitestudio import

🞄  🞄  🞄