Comment désactiver autocommit pour un client MySQL?
j'ai une application web qui a été écrite avec l'hypothèse qu'autocommit est activé sur la base de données, donc je ne veux pas y faire de changements. Cependant, toute la documentation que je peux trouver ne semble parler que d'utiliser init_connect sur la base de données, c'est-à-dire un paramètre global pour toutes les connexions client.
y a-t-il un moyen de définir autocommit=0 juste en exécutant mysql sur une ligne de commande Linux (sans avoir à le taper à chaque fois)?
7 réponses
peut-être que la meilleure façon est d'écrire un script qui démarre le client en ligne de commande mysql et qui exécute automatiquement le sql que vous voulez avant qu'il ne vous passe le contrôle.
linux est livré avec une application appelée 'attendre'. il interagit avec la coque de manière à imiter vos coups de clés. il peut être configuré pour démarrer mysql, attendez-vous à entrer votre mot de passe. exécuter d'autres commandes telles que SET autocommit = 0;
puis passez en mode interactif pour que vous puissiez exécuter n'importe quelle commande vouloir.
pour en savoir plus sur la commande SET autocommit = 0;
le voir.. http://dev.mysql.com/doc/refman/5.0/en/innodb-transaction-model.html
j'utilise attendre pour se connecter à un utilitaire de ligne de commande dans mon cas, il commence ssh, se connecte au serveur distant, l'application démarre entre mon nom d'utilisateur et mot de passe, puis active sur le contrôle de moi. sauve-moi des tas de taper :)
http://linux.die.net/man/1/expect
DC
prévu script fourni par Michael Hinds
spawn /usr/local/mysql/bin/mysql
expect "mysql>"
send "set autocommit=0;\r"
expect "mysql>" interact
attendre est assez puissant et peut rendre la vie beaucoup plus facile que dans ce cas.
si vous voulez faire tourner le script sans l'appeler, utilisez la ligne shebang
insérez ceci comme première ligne dans votre script (CONSEIL: Utilisez which expect
pour trouver l'emplacement de votre attendre exécutable)
#! /usr/bin/expect
alors changez les permissions de votre script avec..
chmod 0744 myscript
alors appelez le script
./myscript
DC
Vous le faire de 3 façons différentes:
Avant de faire un
INSERT
, toujours question d'unBEGIN;
déclaration. Cela éteindra les autocommits. Vous aurez besoin de faire unCOMMIT;
une fois que vous voulez que vos données persistent dans la base de données.Utiliser
autocommit=0;
chaque fois que vous instanciez une connexion de base de données.Pour un paramètre global, ajouter un
autocommit=0
variablemy.cnf
fichier de configuration dans MySQL.
il semble que vous pouvez l'ajouter à votre ~/.mon Dieu.cnf, mais il doit être ajouté comme argument au drapeau init-command dans votre section [client], comme ceci:
[client]
init-command='set autocommit=0'
voulez-vous dire la console texte mysql? Alors:
START TRANSACTION;
...
your queries.
...
COMMIT;
Est ce que je recommande.
cependant si vous voulez éviter de taper ceci à chaque fois que vous avez besoin d'exécuter ce genre de requête, ajoutez ce qui suit à la section [mysqld] de votre my.cnf de fichier.
init_connect='set autocommit=0'
Ce serait autocommit
arrêt pour chaque client.
ceci est utile pour vérifier l'état d'autocommit;
select @@autocommit;
au lieu de désactiver autocommit manuellement au moment de la restauration, vous pouvez déjà vider vos données MySQL d'une manière qui inclut toutes les instructions 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 complet de la commande mysqldump ligne 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 le référence de mysqldump
Pour la validation automatique hors tension, puis utilisez la commande ci-dessous pour vous. Jeu ci-dessous dans my.cnf
fichier:
[mysqld]
autocommit=0