Differences between revisions 5 and 6
Revision 5 as of 2021-08-25 12:27:16
Size: 5337
Editor: Kurgan
Comment:
Revision 6 as of 2023-01-14 16:27:50
Size: 6194
Editor: Kurgan
Comment:
Deletions are marked like this. Additions are marked like this.
Line 60: Line 60:
== Mysqldump e restore ==

 * Per fare un backup:
 {{{
mysqldump databasename > filedidump.sql
}}}

 * Per fare un restore: (occorre avere già creato il database)
 {{{
mysql -u USERNAME -p DATABASENAME < filedidump.sql
}}}

----

== 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`:

 {{{
mysqldump --max-allowed-packet=1024M databasename > filedidump.sql
}}}

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:
 {{{
max_allowed_packet=1G
}}}

----

Mysql / MariaDB

Note varie su mysql e dintorni

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:

  • Dal prompt di root, entriamo in mysql
    mysql
  • Dentro mysql creiamo un utente che possa connettersi da localhost usando una password e abbia tutti i privilegi:
    CREATE USER 'admin'@'localhost' IDENTIFIED BY 'password-di-admin';
    GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
    flush privileges;
    \q
  • Ora vediamo se funziona: (inserire la password quando richiesta)
     mysql -u admin -p


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):

  • Dal prompt di root, entriamo in mysql
    mysql mysql
  • Dentro mysql creiamo un database (occhio al nome, niente spazi o "-", solo underscore), creiamo un utente e contestualmente gli diamo i permessi sul db (occhio al fatto che nome_database è seguito da punto asterisco nella grant)

    CREATE DATABASE nome_database;
    GRANT ALL PRIVILEGES ON nome_database.* TO 'nome-utente'@'localhost' identified by 'password-dell-utente';
    flush privileges;
    \q
  • Ora vediamo se funziona: (inserire la password quando richiesta)
     mysql -u nome-utente -p  nome_database


Mysqldump e restore

  • Per fare un backup:
    mysqldump databasename  > filedidump.sql
  • Per fare un restore: (occorre avere già creato il database)
    mysql -u USERNAME -p DATABASENAME < filedidump.sql


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`:

  • mysqldump --max-allowed-packet=1024M databasename  > filedidump.sql

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:

  • max_allowed_packet=1G


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:

  • togliere il commento dalle righe che riguardano il server-id e log_bin (sono una di fianco all'altra). Il server-id puo` essere qualsiasi numero che non sia duplicato negli slave e non sia zero.
  • consentire la connessione a mysql via lan, quindi in Debian commentare la riga che dice bind-address = 127.0.0.1.

  • impostare il campo binlog_ignore_db o il campo binlog_do_db in modo da replicare solo i database che ci servono (e da non replicare quelli che farebbero danni se fosser replicati). Una impostazione decente per replicare tutto potrebbe essere:

    binlog_ignore_db        = information_schema,mysql,phpmyadmin

Sul server slave (o sui server slave) occorre:

  • togliere il commento dalla riga che riguarda il server-id. Il server-id puo` essere qualsiasi numero che non sia duplicato nell'insieme master ed eventuali altri slave e non sia zero.
  • Facoltativamente (ma e` consigliato per il recovery da crash o corruzioni) scommentare la riga del log_bin (come sul master).
  • consentire la connessione a mysql via lan, quindi in Debian commentare la riga che dice bind-address = 127.0.0.1.

  • IMPORTANTE: cambiare percorso alla tmpdir, impostandola a un path dove un riavvio della macchina NON cancelli i dati, quindi non su /tmp. Potrebbe per esempio essere messa a /var/spool/mysql (che va creata a chownata a mysql.)

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-02-02 09:55:05 by Kurgan)