2016-07-20 4 views
0

Ich habe ein Bash-Skript, das versucht, bestimmte Tabellen in meiner Datenbank als schreibgeschützt zu sperren. Dies ist der Befehl, den ich auszuführen bin versucht:mysql Sperrtabellen aus Bash-Skript

mysql -u root -p -e "LOCK TABLES db_name.table1 READ, db_name.table2 READ;" 

Dies ist eigentlich nicht die Tabellen Sperren obwohl, wie ich in der Lage ist, die Tabellen zu aktualisieren, die ich bin versucht, oben zu sperren. Wenn ich die folgenden Befehle direkt von der Shell ausgeführt funktioniert es:

mysql -u root -p 

(Dies nimmt mich in mysql, wo ich folgendes eingeben)

LOCK TABLES db_name.table1 READ, db_name.table2 READ; 

Und diese sperrt tatsächlich die Tabellen in der Datenbank, wie ich Ich kann nichts schreiben oder etwas in diesen Tabellen aktualisieren.

Hat jemand eine Idee, was ich falsch mache?

+2

mysql räumt auf, wenn eine Verbindung geschlossen wird. Ihr CLI würde die Tabellen sperren und dann beenden, wodurch mysql aufräumt und die Sperren freigibt. Sie müssten die Verbindung die ganze Zeit aufrechterhalten, wenn die Sperren aktiv sein sollen. –

+2

@MarcB willst du das nur in eine Antwort einfügen, damit wir es einpacken können? Oder Samantha, du machst es. Es * ist * die Antwort. – Drew

+0

@MarcB Danke !! Die Verbindung bleibt die ganze Zeit aktiv. – Samantha

Antwort

0

Per Marc B Kommentar oben:

mysql aufräumt, wenn eine Verbindung geschlossen ist. Ihr CLI würde die Tabellen sperren und dann beenden, wodurch mysql aufräumt und die Sperren freigibt. Sie müssten die Verbindung die ganze Zeit aufrechterhalten, während die Sperren aktiv sein sollen

0

MySQL räumt auf, wenn eine Verbindung geschlossen wird. Das bedeutet, dass Ihre mysql ....-Befehlszeile eine Verbindung herstellen, die Tabellen sperren und dann beenden wird - die Verbindung wird geschlossen, wodurch die Sperren ausgelöst werden.

Sie müssen diese "lock" Verbindung die ganze Zeit, die Sie wollen,/müssen die Sperren gesetzt bleiben.