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)?

29
demandé sur Michael Hinds 2010-02-17 15:21:20

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

21
répondu DeveloperChris 2010-02-22 22:44:53

Vous le faire de 3 façons différentes:

  1. Avant de faire un INSERT, toujours question d'un BEGIN; déclaration. Cela éteindra les autocommits. Vous aurez besoin de faire un COMMIT; une fois que vous voulez que vos données persistent dans la base de données.

  2. Utiliser autocommit=0; chaque fois que vous instanciez une connexion de base de données.

  3. Pour un paramètre global, ajouter un autocommit=0 variable my.cnf fichier de configuration dans MySQL.

17
répondu nanda 2013-11-20 00:43:10

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'
8
répondu rascalking 2012-07-31 18:44:40

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.

3
répondu e4c5 2016-05-21 05:09:27

ceci est utile pour vérifier l'état d'autocommit;

select @@autocommit;
1
répondu PodTech.io 2016-10-27 17:30:16

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

0
répondu Jpsy 2016-09-30 10:37:41

Pour la validation automatique hors tension, puis utilisez la commande ci-dessous pour vous. Jeu ci-dessous dans my.cnf fichier:

    [mysqld]
    autocommit=0
-1
répondu Ram 2018-03-20 15:27:42