it-swarm.com.de

Wie kann ich Autocommit für einen MySQL-Client deaktivieren?

Ich habe eine Web-App, die mit der Annahme geschrieben wurde, dass Autocommit für die Datenbank aktiviert ist. Daher möchte ich dort keine Änderungen vornehmen. Die gesamte Dokumentation, die ich finden kann, scheint jedoch nur über die Verwendung von init_connect in der Datenbank zu sprechen, d. H. Eine globale Einstellung für alle Clientverbindungen.

Gibt es eine Möglichkeit, autocommit = 0 festzulegen, wenn Sie mysql auf einer Linux-Befehlszeile ausführen (ohne es jedes Mal neu eingeben zu müssen)?

29
Michael Hinds

Die beste Möglichkeit ist, ein Skript zu schreiben, das den mysql-Befehlszeilen-Client startet und dann automatisch das gewünschte SQL ausführt, bevor es Ihnen das Steuerelement übergibt.

linux wird mit einer Anwendung namens "Expect" geliefert. Es interagiert mit der Shell so, dass Ihre Tastenanschläge imitiert werden. Sie können mysql starten und warten, bis Sie Ihr Passwort eingeben. Führen Sie weitere Befehle wie SET autocommit = 0; aus, und wechseln Sie in den interaktiven Modus, sodass Sie einen beliebigen Befehl ausführen können.

weitere Informationen zum Befehl SET autocommit = 0; finden Sie unter .. http://dev.mysql.com/doc/refman/5.0/de/innodb-transaction-model.html

Ich benutze Expect, um mich bei einem Kommandozeilen-Dienstprogramm anzumelden. In diesem Fall startet es ssh, verbindet sich mit dem Remote-Server, startet die Anwendung, gibt meinen Benutzernamen und das Kennwort ein und übergibt mir die Kontrolle. erspart mir jede Menge Schreiben :)

http://linux.die.net/man/1/expect

DC

Erwarten Sie ein von Michael Hinds bereitgestelltes Skript

spawn /usr/local/mysql/bin/mysql 
expect "mysql>" 
send "set autocommit=0;\r" 
expect "mysql>" interact

expect ist ziemlich mächtig und kann das Leben viel einfacher machen, als in diesem Fall. 

wenn Sie das Skript ohne Aufruf ausführen möchten, verwenden Sie die Shebang-Zeile

fügen Sie dies als erste Zeile in Ihr Skript ein (Hinweis: Verwenden Sie which expect, um den Speicherort Ihrer erwarteten ausführbaren Datei zu ermitteln.)

#! /usr/bin/expect

dann ändern Sie die Berechtigungen Ihres Skripts mit ..

chmod 0744 myscript

dann rufen Sie das Skript auf

./myscript

DC

24
DeveloperChris

Sie tun dies auf drei verschiedene Arten:

  1. Bevor Sie eine INSERT ausführen, geben Sie immer eine BEGIN;-Anweisung aus. Dadurch werden Autocommits deaktiviert. Sie müssen einen COMMIT; ausführen, wenn Ihre Daten in der Datenbank gespeichert werden sollen.

  2. Verwenden Sie autocommit=0; jedes Mal, wenn Sie eine Datenbankverbindung herstellen.

  3. Fügen Sie für eine globale Einstellung eine autocommit=0-Variable in Ihre my.cnf-Konfigurationsdatei in MySQL ein.

20
nanda

Es sieht so aus, als könnten Sie es zu Ihrer ~/.my.cnf hinzufügen, aber es muss dem Init-command-Flag in Ihrem Abschnitt [client] als Argument hinzugefügt werden.

[client]
init-command='set autocommit=0'
9
rascalking

Meinen Sie die MySQL-Textkonsole? Dann:

START TRANSACTION;
  ...
  your queries.
  ...
COMMIT;

Ist was ich empfehle. 

Wenn Sie dies jedoch nicht jedes Mal wiederholen möchten, wenn Sie diese Art von Abfrage ausführen möchten, fügen Sie Folgendes zum Abschnitt [mysqld] Ihrer my.cnf-Datei hinzu.

init_connect='set autocommit=0'

Dies würde autocommit jedoch für jeden Client deaktivieren. 

4
e4c5

Dies ist nützlich, um den Status der automatischen Übergabe zu überprüfen.

select @@autocommit;
1
PodTech.io

Verwenden Sie für die automatische Abschaltung den folgenden Befehl. Set unten in my.cnf Datei:

    [mysqld]
    autocommit=0
1
Ram

Anstatt Autocommit zum Zeitpunkt der Wiederherstellung manuell auszuschalten, können Sie Ihre MySQL-Daten bereits auf eine Weise sichern, die alle erforderlichen Anweisungen direkt in Ihre SQL-Datei einschließt. 

Der Befehlszeilenparameter für mysqldump lautet --no-autocommit. Sie können auch erwägen, --opt hinzuzufügen, wodurch eine Kombination anderer Parameter festgelegt wird, um Wiederherstellungsvorgänge zu beschleunigen.

Hier ist ein Beispiel für eine vollständige mysqldump-Befehlszeile, die ich verwende, und zwar --no-autocommit und --opt:

mysqldump -hlocalhost -uMyUser -p'MyPassword' --no-autocommit --opt --default-character-set=utf8 --quote-names  MyDbName  >  dump.sql

Einzelheiten zu diesen Parametern finden Sie in der Referenz von mysqldump .

0
Jpsy