Unser Newsletter rund um technische Themen,
das Unternehmen und eine Karriere bei uns.

3 Minuten Lesezeit (611 Worte)

Kurz und gut – Episode #15 Schön mal wieder „offline“ zu sein …

Ich werde in Seminaren, Workshops oder in Kundenprojekten in Sachen MySQL immer mal wieder mit Dingen konfrontiert, auf die ich ad hoc keine Antwort habe bzw. mit denen ich noch keine Erfahrung gesammelt habe. 

Das Problem

Im Leben eines DBAs gibt es immer wieder mal Situationen, wo er mit seinem Datenbank-Server allein sein möchte … zum Beispiel sollen Änderungen am Applikations-Schema vorgenommen werden, eine Tabelle partitioniert oder defragmentiert werden oder Daten ge- oder entladen werden. Seit der Version 5.7.5 steht uns dazu der Parameter „offline_mode“ zur Verfügung. 

Die Lösung

Die globale Variable „offline_mode“ hilft uns nicht, privilegierte User (z. B. den Applikationsaccount) von der Datenbank zu verbannen, um z. B. die oben erwähnten Wartungen vorzunehmen:

mysql> set global offline_mode=On;
Query OK, 0 rows affected (0.00 sec)

Für ein kleines Beispiel haben wir zwei User-Konten angelegt, die systemweite (also überall auf dem Server) Leserechte haben. Der zweite User („priv“) hat lediglich die zusätzliche Berechtigung „connection_admin“, die auch in anderen höherwertigen Rechten (eine Art Rechtesammlung für Administratoren) enthalten sein kann.

mysql> create user 'ro' identified by 'ro'; 

Query OK, 0 rows affected (0.06 sec) 

mysql> grant select on *.* to 'ro'; 

Query OK, 0 rows affected (0.01 sec) 

Wird der Server während der Verbindung in den „offline_mode“ versetzt, so gibt es beim nächsten Kommando den folgenden Fehlercode: 

# Session 1 (mysql -uro -pro --host=ordix) 

mysql> select * from sakila.actor limit 3; 

+----------+------------+-----------+---------------------+ 

| actor_id | first_name | last_name | last_update         | 

+----------+------------+-----------+---------------------+ 

|        1 | PENELOPE   | GUINESS   | 2006-02-15 04:34:33 | 

|        2 | NICK       | WAHLBERG  | 2006-02-15 04:34:33 | 

|        3 | ED         | CHASE     | 2006-02-15 04:34:33 | 

+----------+------------+-----------+---------------------+ 

3 rows in set (0.00 sec) 

 

# Session 2 

mysql> set global offline_mode=On; 

Query OK, 0 rows affected (0.00 sec) 

 

# Session 1 

mysql> select * from sakila.actor limit 3; 

ERROR 2013 (HY000): Lost connection to MySQL server during query 

No connection. Trying to reconnect... 

ERROR 3032 (HY000): The server is currently in offline mode 

ERROR: 

Can't connect to the server  

Für den untenstehenden User ergibt sich dieses Problem nicht. Er kann trotzdem normal weiterarbeiten:

mysql> create user 'priv' identified by 'priv'; 

Query OK, 0 rows affected (0.02 sec) 

mysql> grant select, connection_admin on *.* to 'priv'; 

Query OK, 0 rows affected (0.01 sec) 

 

# Session 1 (mysql -upriv -ppriv --host=ordix) 

mysql> select * from sakila.actor limit 3; 

+----------+------------+-----------+---------------------+ 

| actor_id | first_name | last_name | last_update         | 

+----------+------------+-----------+---------------------+ 

|        1 | PENELOPE   | GUINESS   | 2006-02-15 04:34:33 | 

|        2 | NICK       | WAHLBERG  | 2006-02-15 04:34:33 | 

|        3 | ED         | CHASE     | 2006-02-15 04:34:33 | 

+----------+------------+-----------+---------------------+ 

3 rows in set (0.00 sec) 

 

# Session 2 

mysql> set global offline_mode=On; 

Query OK, 0 rows affected (0.00 sec) 

 

# Session 1 

mysql> select * from sakila.actor limit 3; 

+----------+------------+-----------+---------------------+ 

| actor_id | first_name | last_name | last_update         | 

+----------+------------+-----------+---------------------+ 

|        1 | PENELOPE   | GUINESS   | 2006-02-15 04:34:33 | 

|        2 | NICK       | WAHLBERG  | 2006-02-15 04:34:33 | 

|        3 | ED         | CHASE     | 2006-02-15 04:34:33 | 

+----------+------------+-----------+---------------------+ 

3 rows in set (0.00 sec) 

Fazit

Kein großes Hexenwerk. Der Parameter tut genau das, was er soll. Wie immer gilt, dass man mit den Rechten umsichtig umgehen sollte (Principle of least privilege). Vergibt man zu großzügig Privilegien (gerade Sammelprivilegien wie „Super“m „Connection_Admin“), so kann einem dies an solchen Stellen, wie in diesem Falle, die Arbeit deutlich erschweren.

Sie haben Fragen rund um den Betrieb von MySQL? Sprechen Sie mit uns! 

Seminarempfehlung

Principal Consultant bei ORDIX

 

Kommentare

Derzeit gibt es keine Kommentare. Schreibe den ersten Kommentar!
Donnerstag, 26. Dezember 2024

Sicherheitscode (Captcha)

×
Informiert bleiben!

Bei Updates im Blog, informieren wir per E-Mail.