Tworzę skrypt bash, który między innymi gromadzi dane z bazy danych MySQL. Mój użytkownik MySQL ma uprawnienia do zapisu, ale ze względów bezpieczeństwa chciałbym tymczasowo ustawić go na stan tylko do odczytu. Czy można to zrobić z wiersza poleceń?Jak ustawić MySQL tymczasowo na tylko do odczytu za pomocą wiersza poleceń?
Odpowiedz
Aby odpowiedzieć na oryginalne pytanie, które można umieścić całą swoją bazę danych do odczytu w trybie tylko przez to polecenie:
FLUSH TABLES WITH READ LOCK;
SET GLOBAL read_only = 1;
i powrót do normalnego trybu z:
SET GLOBAL read_only = 0;
UNLOCK TABLES;
Pamiętaj, że jest to operacja, która będzie miała głęboki wpływ na zachowanie bazy danych. Dlatego przed wykonaniem tego przeczytaj dostępną dokumentację do powyższych poleceń. O wiele powszechniejszym sposobem jest odwołanie uprawnień DML od określonego użytkownika, a następnie udzielenie ich ponownie.
Najlepsza odpowiedź, jeśli OP naprawdę chce ustawić całą bazę danych w trybie tylko do odczytu. Tytuł i rzeczywiste pytanie są tutaj mylące. W każdym razie +1 dla najprostszego rozwiązania. – fancyPants
Aby zapisać inne wyszukiwania, oto, co przeczytałem przed rozpoczęciem gry: [read_only global] (https://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_read_only) (zawiera wzmiankę o 'TABLETACH FLUSH WITH READ LOCK;') i [używając ich do tworzenia kopii zapasowych] (http://docs.oracle.com/cd/E17952_01/refman-5.5-en/replication-solutions-backups-read-only. html). – sage
Po wykonaniu powyższej metody moja baza danych wciąż działa tylko w trybie odczytu i zapisu. – Phoenix
Dobrze, jeśli użytkownik ma teraz wszystkie przywileje pierwsze, trzeba cofnąć mu
$>mysql -u DB_USER -pDB_PASS --execute="REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'YOUR_USER';"
Potem dasz mu SELECT pozwolenie
$>mysql -u DB_USER -pDB_PASS --execute="GRANT SELECT ON 'YOUR_DATABASE'@.* TO 'YOUR_USER'@'%';FLUSH PRIVILEGES;"
robić swoje rzeczy, a potem nadaj ponownie uprawnienia użytkownikowi User:
A to wszystko ludzie
UWAGA: Przegląd ofertowego, chyba zapomniałem coś
Jeśli używasz MySQL w wersji 5.6 lub nowszej i InnoDB, możesz ustawić sesję jako tylko do odczytu.
SET SESSION TRANSACTION READ ONLY;
https://dev.mysql.com/doc/refman/5.6/en/set-transaction.html
"tylko do odczytu" oferuje również skromny performance benefit.
Zmiana użytkownika, być może? – Strawberry
Istnieje podobne pytanie (z odpowiedzią) na stronie dba.sc: http://dba.stackexchange.com/questions/74670/revoke-write-privileges-vs-setting-database-to-readonly – Bass