it-swarm-eu.dev

Měl by být replikační slave MySQL nastaven pouze na čtení?

Mám replikaci spuštěnou na Percona Server 5.5 podle tato příručka a přemýšlel, jestli bych měl přidat read-only=1 k mému otrokovi my.cnf, aby to bylo jen pro čtení?

Průvodce nastavuje replikaci pro tabulku mysql, takže uživatelé jsou replikováni, ale primárně používám otrok, aby převzal mysqldumps, a v nouzové konfiguraci jej znovu nastavil jako master, takže nevěřím, že potřebujeme (nebo měli bychom) povolit zápis na to neustále?

22
xref

Když je Slave pouze pro čtení , není 100% chráněn před světem.

Podle dokumentace MySQL na read-only

Tato proměnná je ve výchozím nastavení vypnutá. Je-li povoleno, server nepovoluje žádné aktualizace, s výjimkou uživatelů, kteří mají oprávnění SUPER nebo (na slave serveru) z aktualizací prováděných podřízenými vlákny. V nastavení replikace může být užitečné povolit read_only na slave serverech, aby se zajistilo, že slave přijímají aktualizace pouze z hlavního serveru a ne od klientů.

Každý, kdo má SUPER privilegium , tak může číst a psát takovým slave ...

Ujistěte se, že všichni uživatelé, kteří nemají oprávnění, nemají oprávnění SUPER.

Pokud chcete zrušit všechna SUPER oprávnění jednorázově, spusťte to na Master a Slave:

UPDATE mysql.user SET super_priv='N' WHERE user<>'root';
FLUSH PRIVILEGES;

S odkazem na Slave si to vyhrazuje SUPER privilegium pouze na root a zabrání tomu, aby neprivilegovaní dělali zápisy, od kterých by jinak byli omezeni.

AKTUALIZACE 2015-08-28 17:39 EDT

Nedávno jsem se dozvěděl, že MySQL 5.7 představí super_read_only .

To zastaví SUPER uživatelé v jejich stopách, protože dokumenty 5.7

Pokud je povolena systémová proměnná read_only, server povoluje aktualizace klienta pouze od uživatelů, kteří mají oprávnění SUPER. Pokud je také povolena systémová proměnná super_read_only, server zakáže aktualizace klientů i od uživatelů, kteří mají SUPER. V popisu systémové proměnné read_only najdete popis režimu jen pro čtení a informace o tom, jak interně read_only a super_read_only interagují.

Změny super_read_only na hlavním serveru nejsou replikovány na slave servery. Hodnota může být nastavena na slave serveru nezávisle na nastavení na masteru.

super_read_only byl přidán do MySQL 5.7.8.

32
RolandoMySQLDBA

Měl by být replikační slave MySQL nastaven pouze na čtení?

Ano, raději byste měli spustit slave servery s dostupnými R/O režimy. Dříve privilegovaní uživatelé mohli data takového otroka stejně upravovat, ale později dostali také knoflík pro omezení R/O.

Proč je to důležité - je lepší selhat při zápisu než lítost s nesprávnými zápisy, které by mohly efektivně učinit nepoužitelné otroky kvůli jednoduchému zasunutí dat nebo konfliktům klíčů, které by přerušily replikaci (už žádné další skutečné otrokyně).

K dispozici je také software používaný pro rozdělení orchestrací a zatížení, který by zohledňoval stav R/O serverů v fondech, které nakonfigurovali pro správné směrování požadavků mezi těmito servery.

To je bezpečnost. Použij to.

3
poige

Problém, včetně MySQL 8.0, spočívá v tom, že MySQL vás nenutí k nastavení read_only = ON, Když provedete příkaz start slave. Proč je problém? Protože téměř všechny MySQL DBA používají své otroky na RO, aby se zabránilo poškození dat, a vždy existuje jeden dba, který omylem spouští chybně SQL, který modifikuje data na otroka, nebo aplikaci, která nezmění jeho conf. Pokud chci psát na otroky, protože má několik schémat a musím psát na tomto schématu, musí být příkaz read_only Inteligentnější a nechte nás udělat read_only for schema. To by mohlo být velmi užitečné na serverech s více Master a slave, kteří dělají Replicate_Ignore_DB. Takže prozatím musíte ovládat ručně a být velmi opatrní.

Užívat si.

1
Cepxio