Mysql / MariaDB

Note varie su mysql e dintorni

Ottimizzazione

Questo script può aiutare: https://github.com/major/MySQLTuner-perl

Backup

Uno strumento semplice di backup per mysql e` "automysqlbackup", il cui pacchetto e` disponibile in Debian. Dopo averlo installato, modificare /etc/default/automysqlbackup per adattarlo alle proprie esigenze. La configurazione di default salva tutti i database una volta al giorno, tenendo anche una copia alla settimana e una al mese. L'unica cosa da cambiare e` il percorso di salvataggio che e` definito con il parametro "BACKUPDIR", nel caso in cui quello di default non vada bene.


Creazione account utente

MariaDB ha adottato per l'utente "root" una autenticazione "alla postgres" che non prevede una password ma richiedere di essere l'utente "root" in console.

Per creare un utente "amministratore" accessibile con il classico metodo di username e password, usabile per esempio da phpmyadmin, possiamo usare questi comandi:


Creazione di un account utente non admin e di un database con il medesimo nome

Per creare un account utente e un database ad esso associato (come fa per default phpmyadmin):


Mysqldump e restore


Mysqldump con record enormi

Il problema si crea tipicamente con Drupal che crea mostri nel databse.

Se mysqldump esce con un errore come questo mysqldump: Error 2013: Lost connection to server during query when dumping table `batch` at row: 4 mentre fa il dump, si puo` tentare cosi`:

Se reimportando un dump che ha record enormi si incontrano errori, si può tentare impostando nella config (in mariadb è in /etc/mysql/mariadb.conf.d/50-server.cnf) questa riga:


Binary log che riempiono il disco

Se si fanno continue modifiche sostanziali ai dati del db, i binary log (usati dalla replica e anche per recovery) possono diventare enormi, molto più grandi del database stesso. Nelle versioni recenti di Mysql il default per la conservazione è di 30 giorni, e questo può creare problemi di spazio disco notevoli. Se non ci servono (niente replica, per dire) possiamo dire a Mysql di tenerne solo 3 giorni o anche meno. Per farlo dobbiamo modificare la configurazione (sotto la sezione [mysqld]) impostando un valore più ridotto di tempo, così:

[mysqld] 
binlog_expire_logs_seconds = 259200 

Riavviando mysql lui automaticamente ripulisce la roba vecchia e quindi libera disco, e da ora in avanti limita a 3 giorni la conservazione.

Volendo possiamo vedere l'elenco dei log usati e cancellarli (una tantum pero`, poi tornano a crescere) anche "live" senza riavviare nulla, da dentro la console di mysql, in questo modo:

mysql> SHOW BINARY LOGS;
+---------------+------------+-----------+
| Log_name      | File_size  | Encrypted |
+---------------+------------+-----------+
| binlog.000054 | 1073742466 | No        |
| binlog.000055 | 1075367661 | No        |
| binlog.000056 |  338137146 | No        |
| binlog.000057 |   70352785 | No        |
| binlog.000058 |    6424784 | No        |
| binlog.000059 | 1077293478 | No        |
| binlog.000060 |  816381276 | No        |
| binlog.000061 |       7499 | No        |
+---------------+------------+-----------+
8 rows in set (0.00 sec)

Possiamo quindi cancellarli fino ad un certo punto indicando il nome del file (preso dall'elenco di prima) fino al quale vogliamo cancellare i log, così:

mysql> PURGE BINARY LOGS TO 'binlog.000060'; 


OBSOLETO Replicazione OBSOLETO

Qui si spiega come configurare due macchine come master e slave, partendo dalla supposizione che il database master sia vuoto. Se non lo e`, occorre sincronizzare master e slave prima di avviare la replicazione.

Sul server "master", in my.cnf, occorre:

Sul server slave (o sui server slave) occorre:

Dopo aver riavviato i due mysql sul master e sullo slave, procedere SUL MASTER con la creazione dell'utente che verra` usato dagli slave per la replicazione (uno per tutti quanti o anche uno per ogni slave, a discrezione). Questo utente deve disporre del privilegio di replicazione e deve avere accesso ovviamente dall' ip della/delle macchina/e slave. Se usate phpmyadmin esiste una funzione apposta "replicazione" che indica lo stato della replicazione e consente di creare un utente per la replicazione. Di fatto phpmyadmin crea l'utente cosi`:

CREATE USER 'replicazione'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE , REPLICATION CLIENT ON * . * TO 'replicazione'@'%' IDENTIFIED BY 'password';

A questo punto, procedere SULLO SLAVE a configurare il medesimo per l'accesso al master, si puo` sempre fare da phpmyadmin sullo slave alla voce "replicazione", inserendo uno username, una password e un ip per il server master (l'utente e` quello che abbiamo appena creato sul server master, appunto). Oppure si puo` fare a mano con il comando:

mysql> CHANGE MASTER TO
    ->     MASTER_HOST='master_host_name',
    ->     MASTER_USER='replication_user_name',
    ->     MASTER_PASSWORD='replication_password',
    ->     MASTER_LOG_FILE='recorded_log_file_name',
    ->     MASTER_LOG_POS=recorded_log_position;

Fatto questo, occorre riavviare mysql sullo slave e dovremmo essere connessi.

LinuxDebian/MySql (last edited 2024-11-20 13:17:48 by Kurgan)