Comment puis-je désactiver l'auto-validation pour un client MySQL?
-
21-09-2019 - |
Question
J'ai une application web qui a été écrit avec l'hypothèse que la validation automatique est activée sur la base de données, donc je ne veux pas y effectuer des modifications. Cependant, tous les documents que je peux trouver ne semble parler de l'utilisation init_connect sur la base de données, à savoir un paramètre global pour toutes les connexions client.
Y at-il un moyen de définir autocommit = 0 juste lors de l'exécution de MySQL sur une ligne de commande Linux (sans avoir à saisir à chaque fois)?
La solution
Peut-être la meilleure façon est d'écrire un script qui démarre le client de ligne de commande mysql et exécute automatiquement tout ce que vous voulez sql avant de passer le contrôle de vous.
linux est livré avec une application appelée 'attendre'. elle interagit avec la coque de telle manière à mimer vos coups clés. il peut être configuré pour démarrer mysql, attendez-vous d'entrer votre mot de passe. exécuter d'autres commandes telles que SET autocommit = 0;
passent alors en mode interactif afin que vous puissiez exécuter une commande que vous voulez.
pour voir plus sur la commande SET autocommit = 0;
.. http : //dev.mysql.com/doc/refman/5.0/en/innodb-transaction-model.html
J'utilise attendre pour se connecter à une ligne de commande utilitaire dans mon cas, il commence ssh, se connecte au serveur distant, démarre l'application entre mon nom d'utilisateur et mot de passe tourne alors le contrôle pour moi. sauve-moi des tas de taper:)
http://linux.die.net/man/1/expect
DC
Attendez-script fourni par Michael Hinds
spawn /usr/local/mysql/bin/mysql
expect "mysql>"
send "set autocommit=0;\r"
expect "mysql>" interact
Expect est assez puissant et peut rendre la vie beaucoup plus facile que dans ce cas.
si vous voulez faire fonctionner le script sans appeler expect utiliser la ligne de tralala
insérer ce que la première ligne de votre script (indice: utilisation which expect
pour trouver l'emplacement de votre attendre exécutable)
#! /usr/bin/expect
puis modifiez les autorisations de votre script avec ..
chmod 0744 myscript
puis appelez le script
./myscript
DC
Autres conseils
Vous faites cela de 3 manières différentes:
-
Avant de faire un
INSERT
, toujours délivrer une déclaration deBEGIN;
. Cela désactivera autocommits. Vous aurez besoin de faire uneCOMMIT;
une fois que vous voulez que vos données soient persistaient dans la base de données. -
Utilisez
autocommit=0;
chaque fois que vous instancier une connexion de base de données. -
Pour un paramètre global, ajoutez une variable
autocommit=0
dans votre fichier de configurationmy.cnf
dans MySQL.
Il semble que vous pouvez l'ajouter à votre ~ / .my.cnf, mais il doit être ajouté en tant que section argument de l'indicateur-commande init dans votre [client], comme suit:
[client]
init-command='set autocommit=0'
Voulez-vous dire la console texte mysql? Puis:
START TRANSACTION;
...
your queries.
...
COMMIT;
Est-ce que je recommande.
Toutefois, si vous voulez éviter de taper chaque fois que vous devez exécuter ce type de requête, ajoutez ce qui suit à la section [mysqld] de votre fichier my.cnf.
init_connect='set autocommit=0'
Ceci mis autocommit
être hors pour chaque client bien.
Il est utile de vérifier l'état de validation automatique;
select @@autocommit;
Pour auto engager hors puis utilisez la commande ci-dessous pour vous. Réglez ci-dessous dans le fichier my.cnf
:
[mysqld]
autocommit=0
Au lieu de passer manuellement auto-validation lors de la restauration, vous pouvez déjà jeter vos données MySQL d'une manière qui inclut toutes les déclarations nécessaires directement dans votre fichier SQL.
Le paramètre de ligne de commande pour mysqldump est --no-autocommit
. Vous pouvez également envisager d'ajouter --opt
qui définit une combinaison d'autres paramètres pour accélérer les opérations de restauration.
Voici un exemple pour une ligne de commande mysqldump complète que je l'utilise, contenant --no-autocommit
et --opt
:
mysqldump -hlocalhost -uMyUser -p'MyPassword' --no-autocommit --opt --default-character-set=utf8 --quote-names MyDbName > dump.sql
Pour plus de détails sur ces paramètres voir la de mysqldump