Progetto

Generale

Profilo

MySQLMulti » Cronologia » Versione 3

Versione 2 (Simone Piccardi, 07-12-2013 13:42) → Versione 3/7 (Simone Piccardi, 07-12-2013 14:15)

h1. Configurare istanze multiple di MySQL 

 In alcuni casi, ad esempio se si devono gestire una serie di repliche di database diversi su una singola macchina, può essere necessario lanciare più istanze di MySQL. Benché sia possibile duplicare gli script di avvio e la configurazione dell'istanza principale (quella installata e configurata direttamente dal pacchetto), questo comporta anche l'uso di diverse directory e file di configurazione. Ma con MySQL viene distribuito il programma @mysqld_multi@ @mysql_multi@ il cui scopo è proprio quello di lanciare e gestire istanze multiple, utilizzando un solo file di configurazione. 

 Di default il programma usa come configurazione direttamente @/etc/mysql/my.cnf@, ma se si vuole mantenere separata la gestione dell'istanza principale rispetto a quelle gestite tramite @mysqld_multi@ @mysql_multi@ si può fare ricorso ad un file qualunque, da indicare con l'opzione @--defaults-file@, nel nostro caso useremo @/etc/mysql-multi/my.cnf@. Per evitare errori, e semplificarsi la vita nello scrivere i comandi, abbiamo provveduto a definire un alias di shell in @.bashrc@ nella forma: 

 <pre> 
 alias mysqld_multi='mysqld_multi --defaults-file=/etc/mysql-multi/my.cnf' 
 </pre> 

 Per poter lanciare istanze multiple queste devono essere identificate nel file di configurazione con un numero (denominato GNR), da configurare in altrettante sezioni distinte del file di configurazione, introdotte da una voce nella forma @[mysqldN]@. Inoltre devono essere indicate le configurazioni specifiche di @mysqld_multi@ stesso in una sezione @[mysqld_multi]@, nel nostro caso il contenuto di questa sezione è: 

 <pre> 
 [mysqld_multi] 
 mysqld = /usr/bin/mysqld_safe 
 mysqladmin = /usr/bin/mysqladmin 
 log = /var/log/multi_mysql.log 
 </pre> 

 Le configurazioni da applicare alle varie istanze aggiuntive sono identiche a quelle della sezione @[mysqld]@ di una installazione ordinaria, si tratta però di evitare l'uso degli stessi file e delle stesse directory, inoltre ogni istanza dovrà mettersi in ascolto su un indirizzo IP o su una porta diversa. Questo significa che si dovrà o usare la direttiva @port@ per indicare una diversa porta ad ogni istanza, o usare la direttiva @bind-address@ per specificare un indirizzo IP diverso (nel qual caso ovviamente si saranno dovuti assegnare indirizzi multipli alla propria scheda di rete). In quest'ultimo caso si deve tenere presente che non sarà più possibile per nessuna istanza usare l'indirizzo generico @0.0.0.0@ e che per ascoltare su @localhost@ occorrerà usare specificamente @bind-address=127.0.0.1@ e che questo sarà possibile per una sola istanza. 

 Un esempio di configurazione di una istanza aggiuntiva lanciata con @mysqld_multi@ è il seguente, si not come si sia usata la convenzione di aggiungere ai vari file e directory utilizzati il numero che identifica l'istanza stessa: 

 <pre> 
 [mysqld1] 
 user              = mysql 
 pid-file          = /var/run/mysqld/mysqld1.pid 
 socket            = /var/run/mysqld/mysqld1.sock 
 basedir           = /usr 
 datadir           = /var/lib/mysql1 
 tmpdir            = /tmp 
 lc-messages-dir = /usr/share/mysql 
 log-error=/var/log/mysqld1.log 
 skip-external-locking 
 bind-address      = istanza1.miodominio.it 
 key_buffer                = 16M 
 max_allowed_packet        = 16M 
 thread_stack              = 192K 
 thread_cache_size         = 8 
 myisam-recover           = BACKUP 
 query_cache_limit         = 1M 
 query_cache_size          = 16M 
 expire_logs_days          = 10 
 max_binlog_size           = 100M 
 </pre> 

 Una volta installata l'istanza occorre creare il database iniziale di MySQL (@mysql@) per quell'istanza, questo nel caso precedente potrà essere effettuato con il comando: 

 <pre> 
 /usr/bin/mysql_install_db --user=mysql --datadir=/var/lib/mysql1 
 </pre> 

 ripetendo eventualmente il comando per tutte le istanze successive. 

 A questo punto si potranno lanciare manualmente le istanze (si da per assunto che si stato creato l'alias descritto in precedenza) con: 

 <pre> 
 mysqld_multi start 
 </pre> 

 A questo punto, come richiesto nelle istruzioni stampate da @mysql_install_db@, occorrerà impostare una password di accesso per l'utente @root@ dei database appena creati. Questo si fa con il comando: