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

Était-ce utile?

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:

  1. Avant de faire un INSERT, toujours délivrer une déclaration de BEGIN;. Cela désactivera autocommits. Vous aurez besoin de faire une COMMIT; une fois que vous voulez que vos données soient persistaient dans la base de données.

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

  3. Pour un paramètre global, ajoutez une variable autocommit=0 dans votre fichier de configuration my.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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top