`Mysql` veritabanını çoğaltmak uygun mudur?


15

Asıl olarak master-master çoğaltmamı kurduğumda,

binlog-ignore-db=mysql

ve kullanıcı hesaplarını ve hibeleri manuel olarak senkronize ediyor. Bu, o zamanlar nasıl kullandığımın nasıl yapıldığıydı . Ama neden bu satırı kaldırmak ve mysqlveritabanı kendisi de çoğalmasına izin olmamalıdır herhangi bir nedeni var mı?

Eğer öyleyse: Değişikliği yapmadan önce, tüm hibelerin her ikisinde de aynı olduğundan emin olmanın yanı sıra (ya da daha iyisi, tüm mysql veritabanının aynı olduğunu belirtmek), iki kez kontrol etmem gereken veya dikkat etmem gereken başka bir şey var mı?


Son 4.5 yılda, küçük yükseltmelerde bile, mysql'i yükseltirken sürekli çoğaltma sorunları ile mücadele ettim. Bunun nedeni apt-get upgrade(aslında, mysql-server .deb postinst komut dosyası) ALTER TABLE userçoğaltılamayan ifadeleri yürütmesidir . Ben bir çalışma çözüm yayınlanmıştır serverfault.com/questions/686025/...
dlo

Yanıtlar:


12

SQL GRANT komutlarını bilmeden kendinize mysql izinleri vermek tamamen mümkündür .

Örnek: İşte, ClarkKent şifresi ile superdba adı verilen herhangi bir yerden SQL GRANT kullanarak tam ayrıcalıklara sahip bir kullanıcı oluşturmak için:

GRANT ALL PRIVILEGES ON *.* TO superdba@'%' IDENTIFIED BY 'ClarkKent' WITH GRANT OPTION; 

GRANT komutu olmadan bunu nasıl yapabileceğiniz aşağıda açıklanmıştır:

Her şeyden önce, MySQL 5.1.51 için mysql.user

mysql> desc mysql.user;
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Field                 | Type                              | Null | Key | Default | Extra |
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Host                  | char(60)                          | NO   | PRI |         |       |
| User                  | char(16)                          | NO   | PRI |         |       |
| Password              | char(41)                          | NO   |     |         |       |
| Select_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Insert_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Update_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Delete_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Create_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Drop_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Reload_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Shutdown_priv         | enum('N','Y')                     | NO   |     | N       |       |
| Process_priv          | enum('N','Y')                     | NO   |     | N       |       |
| File_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Grant_priv            | enum('N','Y')                     | NO   |     | N       |       |
| References_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Index_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Alter_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Show_db_priv          | enum('N','Y')                     | NO   |     | N       |       |
| Super_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Create_tmp_table_priv | enum('N','Y')                     | NO   |     | N       |       |
| Lock_tables_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Execute_priv          | enum('N','Y')                     | NO   |     | N       |       |
| Repl_slave_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Repl_client_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Create_view_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Show_view_priv        | enum('N','Y')                     | NO   |     | N       |       |
| Create_routine_priv   | enum('N','Y')                     | NO   |     | N       |       |
| Alter_routine_priv    | enum('N','Y')                     | NO   |     | N       |       |
| Create_user_priv      | enum('N','Y')                     | NO   |     | N       |       |
| Event_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Trigger_priv          | enum('N','Y')                     | NO   |     | N       |       |
| ssl_type              | enum('','ANY','X509','SPECIFIED') | NO   |     |         |       |
| ssl_cipher            | blob                              | NO   |     | NULL    |       |
| x509_issuer           | blob                              | NO   |     | NULL    |       |
| x509_subject          | blob                              | NO   |     | NULL    |       |
| max_questions         | int(11) unsigned                  | NO   |     | 0       |       |
| max_updates           | int(11) unsigned                  | NO   |     | 0       |       |
| max_connections       | int(11) unsigned                  | NO   |     | 0       |       |
| max_user_connections  | int(11) unsigned                  | NO   |     | 0       |       |
+-----------------------+-----------------------------------+------+-----+---------+-------+
39 rows in set (0.00 sec)

Sadece şu SQL komutlarını yürütün:

INSERT INTO mysql.user SET
Host='%',User='superdba',Password=PASSWORD('ClarkKent'),
Select_priv='Y',Insert_priv='Y',Update_priv='Y',Delete_priv='Y',
Create_priv='Y',Drop_priv='Y',Reload_priv='Y',Shutdown_priv='Y',
Process_priv='Y',File_priv='Y',Grant_priv='Y',References_priv='Y',
Index_priv='Y',Alter_priv='Y',Show_db_priv='Y',Super_priv='Y',
Create_tmp_table_priv='Y',Lock_tables_priv='Y',Execute_priv='Y',
Repl_slave_priv='Y',Repl_client_priv='Y',Create_view_priv='Y',
Show_view_priv='Y',Create_routine_priv='Y',Alter_routine_priv='Y',
Create_user_priv='Y',Event_priv='Y',Trigger_priv='Y';
FLUSH PRIVILEGES;

Bu INSERT, ikili bir günlüğe inebilen yasal bir SQL ifadesidir. Birinin bunu çalıştırmasını ve ağ boyunca görünür bir parola seyahatine sahip olmasını ister misiniz? Master üzerinde ikili bir günlük oturmak için? köle bir geçiş günlüğüne oturmak için?

Bu yönergeye sahip olmak

binlog-ignore-db=mysql       

böyle bir SQL kullanarak mysql izinleri verilmesini önler. Ancak, HİBE bu şekilde durdurulamaz. Bu nedenle, aşağıdaki gibi hibeler yaptığınızdan emin olun:

SET SQL_LOG_BIN=0;
GRANT ...

HİBE'lerin efendiden köleye geçmesini önlemek için.


Oh, bekleyin ... Kafam karıştı: Binlog-ignore-db conf ne diyorsa söyleyin, GRANT ifadelerinin çoğaldığını mı söylüyorsunuz? Bir sunucuda yeni bir kullanıcı olup olmadığımı biliyorum, o kullanıcı diğer sunucuda görünmüyor. Yani belki de HİBE aktarılır ve depolanır ancak köleye uygulanmaz ?
dlo

GRANLAR herhangi bir yol bloğu olmadan uygulanır. Bu nedenle SET SQL_LOG_BIN = 0; herhangi bir GRANT komutunun ikili günlükleri girmesini önlemek için mysql oturumunda.
RolandoMySQLDBA

GRANLAR master ve slave üzerinde herhangi bir yol bloğu olmadan uygulanır. Bu nedenle SET SQL_LOG_BIN = 0; mysql oturumunda herhangi bir GRANT komutunun ikili günlükleri girmesini ve slave'in röle günlüklerine geçmesini önlemek için.
RolandoMySQLDBA

1
Tamam. Sadece diğerleri için açık olmak gerekirse, bana geçişte şifreleri açığa çıkaran GRANTS (Scott'ın SSL önerisiyle ele alınabilir) ve binlog'da açık metin saklandığı konusunda beni uyardığınıza inanıyorum. Bunlar benim için endişe varsa, o zaman binlog-ignore-db = mysql ve SET SQL_LOG_BIN = 0; Ancak bu koşullara uygunsam, binlog-ignore-db satırını kaldırarak GRANT'ları çoğaltma konusunda özel bir sorun yoktur. Bu yanlış bir özetse düzelt.
dlo

@dlo - Olumlu !!!
RolandoMySQLDBA

4

MySQL veritabanını çoğaltma konusunda hiçbir sorun yaşamadım, ancak yine de, altyapım güvenlik duvarları ve proxy cihazları ile ek bir güvenlik seviyesine borç verdi, burada altyapı milletlerinden başka herkesin bile MySQL'in kullandığı bağlantı noktalarına bağlanması imkansız . Yalnızca bir kez izin vermeniz ve çoğaltılmanız gerektiğini bilerek ekstra bir kolaylık düzeyi ekler. Ana bilgisayarı, amaçlanandan başka kimseye maruz bırakmayacak şekilde (örneğin siz, köle, vb ...) doğru şekilde ayarladığınız sürece, kaynadığında, iyi olmalısınız.

Orta kesişmelerdeki adamla aşırı derecede ilgileniyorsanız, her zaman SSL üzerinden çoğaltma gönderme seçeneği vardır .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.