Mysql avec crontab

Résolu/Fermé
MrSlave - 25 avril 2008 à 14:31
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 25 avril 2008 à 15:16
Bonjour,

Je suis en stage de fin d'étude en entreprise et je dois réaliser un site extranet pour les clients. Jusque là pas de prolèmes. Je devais récupérer les données du CRM et les transférer dans la DMZ et à partir de là vider ma table et charger le fichier texte dans ma bd toutes les nuit.

Le côté mysql donnera quelque chose du genre :

delete from nomtable;
load data infile 'cheminfichier.txt' ignore into table nomtable fields terminated by ';'

Le problème c'est que je ne vois pas trop quoi mettre dans le fichier que mon crontab executera.
Je ne dois pas mettre que les requetes ?

4 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
25 avril 2008 à 14:50
Salut,

pas besoin de script shell

voici un exemple

j'écrit un fichier .sql

et je le lance avec la commande mysql -u root -p'mot de passe' < fichier.sql
Dans mon cas je n'ai pas le mot de passe donc il suffit
mysql -u root -p < fichier.sql
Et je fait entrer à la demande de mot de passe

Le fichier db_abc.sql
lami20j@debian:~$ cat db_abc.sql
CREATE DATABASE abc;
USE abc;
create table personne(id int NOT NULL auto_increment,nom varchar(30),prenom varchar(50),age int,primary key(id));


Le résultat des tests
lami20j@debian:~$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.0.32-Debian_7etch5-log Debian etch distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| Personne           |
| aaa                |
| c_linux_perl       |
| joomla             |
| logs_apache        |
| mysql              |
+--------------------+
7 rows in set (0.00 sec)

mysql> exit
Bye
lami20j@debian:~$ mysql -u root -p < db_abc.sql
Enter password:
lami20j@debian:~$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.0.32-Debian_7etch5-log Debian etch distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| Personne           |
| aaa                |
| abc                |
| c_linux_perl       |
| joomla             |
| logs_apache        |
| mysql              |
+--------------------+
8 rows in set (0.00 sec)

mysql> use abc;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+---------------+
| Tables_in_abc |
+---------------+
| personne      |
+---------------+
1 row in set (0.00 sec)

mysql> desc personne;
+--------+-------------+------+-----+---------+----------------+
| Field  | Type        | Null | Key | Default | Extra          |
+--------+-------------+------+-----+---------+----------------+
| id     | int(11)     | NO   | PRI | NULL    | auto_increment |
| nom    | varchar(30) | YES  |     | NULL    |                |
| prenom | varchar(50) | YES  |     | NULL    |                |
| age    | int(11)     | YES  |     | NULL    |                |
+--------+-------------+------+-----+---------+----------------+
4 rows in set (0.04 sec)

mysql> exit
Bye
lami20j@debian:~
La commande en gras tu la mets dans crontab.
2
HostOfSeraphim Messages postés 6750 Date d'inscription jeudi 2 février 2006 Statut Contributeur Dernière intervention 31 juillet 2016 1 608
25 avril 2008 à 14:52
Certes, mais un mot de passe qui apparaît dans une crontab, bof bof (si on considère que sa connexion nécessite un mot de passe).
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567 > HostOfSeraphim Messages postés 6750 Date d'inscription jeudi 2 février 2006 Statut Contributeur Dernière intervention 31 juillet 2016
25 avril 2008 à 14:59
Ca sera pareil pour le script shell ;-))
Que ça soit dans le cron ou dans le script shell c'est pareil, c'est toujours un fichier.
0
HostOfSeraphim Messages postés 6750 Date d'inscription jeudi 2 février 2006 Statut Contributeur Dernière intervention 31 juillet 2016 1 608 > lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019
25 avril 2008 à 15:05
Un petit exemple...

Je travaille sur un programme informatique dont la maintenance et le développement est assuré par une entreprise sous-traitante. Les données du programme sont confidentielles, le sous-traitant ne doit pas voir certaines infos, notamment les mots de passe des bases de données.

Régulièrement, quand il y a un problème, ils viennent me voir pour savoir dans quel ordre les taches sont lancées le matin (il s'agit d'une application lourde qui met un moment à démarrer). Si le mot de passe apparaît dans la crontab... ils ne sont pas aveugles et voient le mot de passe. Tandis qu'en planquant tout ça dans un script, ils ne voient rien dans la crontab...

Ils peuvent regarder le fichier lancé, ça oui... mais ils ne peuvent pas le faire sans mon accord, et si je veux bien, je prends soin de dégager le mot de passe avant.

Le problème de la crontab, c'est que si j'y avais des mots de passe en clair, je n'oserais plus trop y toucher de peur que quelqu'un soit derrière mon dos et lise mon écran... si y'a des mots de passe affichés, c'est ballot.

0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567 > HostOfSeraphim Messages postés 6750 Date d'inscription jeudi 2 février 2006 Statut Contributeur Dernière intervention 31 juillet 2016
25 avril 2008 à 15:09
Tandis qu'en planquant tout ça dans un script, ils ne voient rien dans la crontab...
je suis d'accord avec toi, dans ce cas, sans doute qu'il vaut mieux écrire un script

0
HostOfSeraphim Messages postés 6750 Date d'inscription jeudi 2 février 2006 Statut Contributeur Dernière intervention 31 juillet 2016 1 608 > lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019
25 avril 2008 à 15:10
Après tout dépend, peut-être que dans son cas, afficher le mot de passe n'est pas très important, des fois que tout le monde autour le connaisse.
0
HostOfSeraphim Messages postés 6750 Date d'inscription jeudi 2 février 2006 Statut Contributeur Dernière intervention 31 juillet 2016 1 608
25 avril 2008 à 14:34
Tu peux faire un script shell qui se connecte à la base et passe les requêtes. Dans la crontab, tu n'as plus qu'à appeler le script en question.
0
Le problème c'est que je suis un gros noob en linux et c'est justement dans mon script que je ne vois pas quoi mettre. :s
Quelque chose comme :

mysql --user=monuser --password=monpass
delete from nomtable;
load data infile 'cheminfichier.txt' ignore into table nomtable fields terminated by ';'

?
0
HostOfSeraphim Messages postés 6750 Date d'inscription jeudi 2 février 2006 Statut Contributeur Dernière intervention 31 juillet 2016 1 608
25 avril 2008 à 14:43
Fais-toi un fichier script.sql avec tes requêtes à passer.

Puis, dans un script shell :

/usr/local/mysql/bin/mysql -u root -pmotdepasse -D nombase < script.sql

A adapter au besoin.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567 > HostOfSeraphim Messages postés 6750 Date d'inscription jeudi 2 février 2006 Statut Contributeur Dernière intervention 31 juillet 2016
25 avril 2008 à 14:51
Salut,

plus rapide que moi ;-))
0
Merci de ton aide.
J'éssaye ça tout de suite. ;)
0