web-dev-qa-db-fra.com

Comment faire un fichier exécutable pour mettre à jour la base de données mysql?

J'ai un serveur Ubuntu qui héberge mon application Web.

Mais pour des raisons de sécurité, il n’est pas visible sur Internet. Le client doit mettre à jour la base de données et y mettre à jour certaines valeurs. Toutefois, pour des raisons de sécurité identiques, je ne suis plus autorisé à y accéder. Ils m'ont donc demandé de créer un fichier exécutable les expliquer aux autorités afin qu’elles puissent mettre à jour la base de données.

Disons que j'ai une base de données nommée myDb avec un utilisateur dis myUser et myPassword, et j'ai besoin d'exécuter cette requête:

UPDATE myDb.member SET member_creditDueDate='2025-09-21 12:00:00';

Comment puis-je faire ceci?

3
MoienGK

Faire un script de commande

Si le script que vous devez créer doit simplement être exécuté tel quel par des personnes ayant accès au serveur et si les données à mettre dans la base de données vous sont livrées (il n'y a donc rien de dynamique), vous devrez créer un script bash. comme ça :

#!/bin/bash

if [ "x$1" == "x" ]; then
   echo "Usage: $0 <SQL commands file>"
   exit 1
fi

if [ ! -f "$1" ]; then
   echo "The file specified in parameter ($1) does not exist or is not readable"
   exit 2
fi

USER=myUser
PASS=myPassword
DB=myDB
SERVER=ipMysql

mysql -u$USER -p$PASS -h$ipMysql $DB < $1    

Copiez tout ce qui précède dans un fichier de test que vous pouvez appeler dataUpload.sh puis rendez-le exécutable: Sudo chmod +x dataUpload.sh.

Que fait ce script?

  1. Vérifiez que vous fournissez un paramètre obligatoire: le chemin d'accès à un fichier texte contenant une commande SQL pour mettre à jour les données dans la base de données (voir ci-dessous).
  2. Vérifier que le fichier donné en paramètre est accessible par le script
  3. Définissez une variable avec les informations d'identification pour vous connecter à la base de données (attention, il s'agit d'une approche rapide ne prenant pas en compte certains aspects de la sécurité: par exemple, le mot de passe sera visible en texte clair dans le script et dans la liste des processus - ps -ef ou ps auxwww lorsque le script sera exécuté (vous pouvez rechercher une approche plus sécurisée)
  4. Chargez les commandes SQL du fichier SQL dans la base de données à l'aide de la ligne de commande mysql client.

Un fichier de commande SQL

Ce fichier de commandes SQL est simplement un fichier texte contenant toutes les commandes SQL permettant de transférer les données INSERT ou UPDATE vous-même si vous pouviez accéder au serveur. Une commande par ligne, comme dans cet exemple:

UPDATE myDb.member SET member_creditDueDate='2025-09-21 12:00:00';
UPDATE myDb.member SET member_credutDueDate='2025-10-11 00:00:00';

etc.

Si vous écrivez un fichier appelé 20140620_dbupdate.sql, la personne ayant accès à la base de données devra simplement exécuter dataUpload.sh 20140620_dbupdate.sql à l'invite de la ligne de commande.

En scindant les commandes Shell et SQL, vous pouvez:

  1. tester facilement la logique qui charge les données dans la base de données
  2. ne passe qu'une fois le script exécutable
  3. pour une mise à jour ultérieure, concentrez-vous sur la création d'un fichier de commandes SQL

Plus à faire

Ceci est une première approche rapide pour résoudre votre problème, pour être exhaustif, je devrais couvrir:

  • Sécuriser le mot de passe
  • Utiliser les transactions SQL
  • Plus de détection d'erreur et de rapports dans le script
6
Benoit

Avez-vous essayé le script shell pour cela, il est identique au script batch sous windows (mais plus puissant)

0
Gtr_py