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?
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?
ps -ef
ou ps auxwww
lorsque le script sera exécuté (vous pouvez rechercher une approche plus sécurisée)mysql
client.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:
Ceci est une première approche rapide pour résoudre votre problème, pour être exhaustif, je devrais couvrir:
Avez-vous essayé le script shell pour cela, il est identique au script batch sous windows (mais plus puissant)