Aider un novice à créer un script ssh

  • Auteur de la discussion Auteur de la discussion thierry8
  • Date de début Date de début
WRInaute accro
Hug !

Alors voila, j'ai un petit problème:
Je dois créer un script en ssh qui pourra être appellé par un cron et qui me permettra de modifier deux variables mysql et relancer le service mysql.
Seulement, le problème est que je n'y connais pas grand chose encore en commande ssh, donc si quelqu'un pouvait m'aider.
Peut être que pour vous ce sera super simple, ça n'a pas l'air complexe comme ça, mais lorsque l'on ne connait pas, c'est moins évident....

Donc voila les deux variables à modifier:

max_user_connections = 15
max_connections = 200


+ relancer le service mysql.

En espérant qu'une âme charitable veuille bien m'aider.

Merci.

Thierry
 
WRInaute accro
:?

Bon pour ce que j'en sais, normalement en ligne de commande il faut un truc comme cela:

set variable = max_user_connections = 15
set variable = max_connections = 200


Et pour arrêter et redémarrer le service mysql:

/etc/ini.d/mysql stop (puis start)

Je pense qu'avant les set variable il faut se connecter à mysql...
soit:
mysql -h localhost -u login -p password

personne ne peut m'aider ?

:?
 
WRInaute accro
Non en php je n'ai a vrai dire pas trop de problème !

C'est ssh, et là je crain effectivement qu'il n'y a pas grande monde pour du soutien..

m'enfin.
 
WRInaute passionné
tu as l'air vraiment désespéré, je vais voir si je peux t'aider un peu.

Forum => Essaye sur www.developez.com
http://www.developpez.net/forums/viewforum.php?f=5

Ce que je ne sais pas faire :
- créer un tunnel ssh pour exécuter des ordres mysql et modifier les valeurs de tes 2 variables.

Pour redémarrer le serveur mysql :
il te faut exécuter la commande ( il manque le path devant, qui dépend de ton système ) :
mysqld restart
ou
safe_mysqld restart

Cette commande peut s'éxécuter dans un cron, sans avoir besoin d'un script shell.

Si tu veux passer par un cron tu pourrais faire :
Code:
Tout les jours à 23H30, tu redémarre mysql :
$shell> crontab -e
30 23 * * * safe_mysqld restart >>/tmp/log.txt

Ce simple cron pourrait résoudre ton pb pour redémarrer le serveur mysql.

Toi ce que tu veux écrire c'est un script shell. Et modifier des variables avant de faire le reboot.
Come je ne sais pas faire, et que je n'ai pas de tuto sous la main, je vais juste te donner quelques notions.

ssh : c'est un protocole de communication, c'est aussi le nom d'un programme.

Il existe +sieurs sortes de shell : sh, bash, bourne shell.
Chaque shell peut avoir ses spécificités.

Que signifie :
1 > /dev/null 2>&1 ?

1 => correspond à la sortie standard => stdin => ce que ton prg écrit
2 => correspond à la sortie d'erreur
/dev/null => c'est l'équivalent de la poubelle sous windows

1 > /dev/null 2>&1 signifie :
Je re-dirige la sortie standard vers la poubelle. Et je redirige la sortie d'erreur vers la sortie standard.
Dans ton cas tout part à la poubelle

Tu aurais pu écrire :
Code:
1>log.txt 2>err.txt
à la fin de l'éxécution de ton script tu aurais eu 2 fichier : log.txt et err.txt
log.txt => le log d'éxécution de ton script
err.txt => les erreurs de ton script

Voici un exemple de script :
Code:
#!/bin/sh
# La première ligne sert à spécifier quel shell tu veux excéuter. ici sh

# if no args specified, show usage
# $# correspond aux nbr d'argument de la ligne de cmd
# le if sert à tester le nbr d'argument 
if [ $# = 0 ]; then
  echo "man de ton script shell"
  echo "La comande echo sert à écrire sur la sortie standard"
  echo "bla bla"
  echo "bla bla"
  exit 1     # Tu quitte ton script
fi   # fin du if

# get arguments
# kes arguments se nomment $1, $2, $3, etc. Tu peux donc les récupérer
COMMAND=$1
TOTO=$2
DIR=$3
etc....

# Tu peux affecter des cmd unix à des variables
THIS_DIR=`dirname "$THIS"`
TOTO_HOME=`cd "$THIS_DIR/.." ; pwd`

# Tester l'existence de certains répertoire ( -d )
# Si le rép TOTO_HOME/build/classes existe, alors je modifie ma variable
# CLASSPATH
if [ -d "$TOTO_HOME/build/classes" ]; then
  CLASSPATH=${CLASSPATH}:$TOTO_HOME/build/classes
fi

# faire des boucles sur des patterns de fichiers dans des rep
for f in $TOTO_HOME/toto-*.jar; do
  CLASSPATH=${CLASSPATH}:$f;
done # finde la boucle for

# ET CE QUI EST LE PLUS INTERESSANT POUR TOI
#EXECUTER DES COMMANDES
# run it
exec "$JAVA" $JAVA_HEAP_MAX $TOTO_OPTS -classpath "$CLASSPATH" $CLASS toto"


Pour ton pb précis tu aurais un truc du style :


Code:
#/bin/sh
# récupérer les params de la ligne de cmd, si tu en as besoin ( le #password par exemple
# get the command line param
if [ $# < 3 ]; then
  echo "usage : il faut rentrer un password max_user_connection max_connection"
   exit 1     # Tu quitte ton script
fi   # fin du if

PASSWD = $1
MAX_USER_CONNECTION = $2
MAX_CONNECTION = $3
exec "mysql -h localhost -u login -p password"

Le pb c'est après le exec. Je ne sais pas ce qu'il faut faire pour passer les params à mysql ?
Voilà une première piste, en espérant que tu puisse trouver une aide plus utile.
 
WRInaute accro
Merci beaucoup de ton aide.

Pour redémarrer mysql c'est donc bon.

Ton dernier petit script est (je crois) ce que je recherche.
un script en .sh que je puisse appeller.

En revanche le exec c'est en sh ? (ce n'est pas du php ?)

Pour modifier une variable en ssh en étant connecté à mysql il faut faire cela:
set global max_user_connexion=10;

L'autre variable je n'en ai finallement pas besoin.

En revanche lorsque je veux mettre max_user_connexion = 0 (pas de limite), ça ne fonctionne pas, il me le met à 1. 8O

Merci beaucoup de ton aide.
 
WRInaute accro
J'ai trouvé une alternative en php.

En revanche si quelqu'un peut m'aider sur un truc:

lorsque je met max_user_connections=0 (pas de limite)
comme indiqué dans la doc.

Est bien il me le fou à 1...et la pb !

Avez vous une idée ? Savez vous comment faire please ?
 
WRInaute accro
:? :? :(

J'ai ce dernier problème avec la modificaiton de max_user_connections = 0.

Savez vous ou je peux trouver de l'aide sur un forum spécialisé la dedans, parce qu'apparemment, c'est plus suptile que ça...
 
WRInaute discret
C'est simple: ile ne faut pas le faire !
Le nombre max d'utilisateurs mysql est une donnée critique, si ce parametre est trop haut tu vas surcharger ton serveur et cela va t'apporter un grand nombre de problemes ...
Jette un coup d'oeil à la doc MySql, ils donnent pas mal de conseils pour calculer la valeux max.

Mais attention, augmenter max_user_connections ne sert à rien si tu ne modifies pas les limites systeme de ton noyau (nombre de fichiers ouverts, etc etc)


MADdanny
 
WRInaute accro
maddanny a dit:
C'est simple: ile ne faut pas le faire !
Le nombre max d'utilisateurs mysql est une donnée critique, si ce parametre est trop haut tu vas surcharger ton serveur et cela va t'apporter un grand nombre de problemes ...
Non, à ce niveau là, je maîtrise la chose.
Il me faut juste ouvrir plus de droit à un moment donné, puis je referme.
Là, n'est pas le problème.

maddanny a dit:
Jette un coup d'oeil à la doc MySql, ils donnent pas mal de conseils pour calculer la valeux max.
Ben, je veux bien, as-tu le lien ?
(même si j'ai déjà parcourue la doc, peut être, est-ce une autre page...)

maddanny a dit:
Mais attention, augmenter max_user_connections ne sert à rien si tu ne modifies pas les limites systeme de ton noyau (nombre de fichiers ouverts, etc etc)
A ce niveau, c'est bon également.
Le système permet de grérer par défaut plusieurs milliers de fichiers ! ;)
 
Discussions similaires
Haut