1

Installare MySQL su Debian 10 e non MariaDB

MySQL e non Maria DB

Installare MySQL e non MariaDB su Debian 10.

Nel 2008 la SUN Microsystem ha acquistato MySQL AB, la società finlandese proprietaria del codice sorgente di MySQL che veniva però distribuito con la licenza GNU GPL oltre che con una licenza commerciale.  Michael “Monty” Widenius è il programmatore finlandese che ha iniziato e guidato per molti anni MySQL. Quando, all’inizio del 2008, la Sun Microsystems ha acquistato MySQL AB, Widenius si è trovato a disagio nella nuova situazione lavorativa, criticando la gestione dello sviluppo della versione 5.1 di MySQL e da vita a MariaDB, ovvero un fork della comunità del progetto MySQL.  Sebbene MariaDB funzioni bene nella maggior parte dei casi, se hai bisogno di funzionalità trovate solo in Oracle MySQL, puoi installare e utilizzare i pacchetti da un repository gestito dagli sviluppatori di MySQL.

Installando il pacchetto mysql attraverso i repository debian verrà proposto in modalità predefinita MariaDB, per questo per utilizzare Oracle MySQL è necessaria una installazione a parte.

LAMP/LEMP e la M di MySQL

MySQL è la M nello stack LAMP, un insieme di software open source comunemente usato che include anche Linux, il server Web Apache e il linguaggio di programmazione PHP.

A differenza di Apache nel LAMP nello stack LEMP troviamo il Web Server NginX.

Installazione Oracle MySQL

Per installare l’ultima versione di MySQL, aggiungeremo questo repository, installeremo il software MySQL stesso, proteggeremo l’installazione e infine verificheremo che MySQL sia in esecuzione e risponda ai comandi.

Iniziamo installando gnupg:

apt-get install gnupg

spostiamoci nella directory temporanea, scarichiamo l’ultimo pacchetto .deb di MySQL e installiamo i repositry

cd /tmp
wget https://dev.mysql.com/get/mysql-apt-config_0.8.19-1_all.deb
dpkg -i mysql-apt-config_0.8.19-1_all.deb

a questo punto avremo il seguente contenuto nel file /etc/apt/sources.list.d/mysql.list

### THIS FILE IS AUTOMATICALLY CONFIGURED ###
# You may comment out entries below, but any other modifications may be lost.
# Use command 'dpkg-reconfigure mysql-apt-config' as root for modifications.
deb http://repo.mysql.com/apt/debian/ buster mysql-apt-config
deb http://repo.mysql.com/apt/debian/ buster mysql-8.0
deb http://repo.mysql.com/apt/debian/ buster mysql-tools
#deb http://repo.mysql.com/apt/debian/ buster mysql-tools-preview
deb-src http://repo.mysql.com/apt/debian/ buster mysql-8.0

 

durante l’installazione verrà proposta una finestra di dialogo con la possibilità di personalizzare l’installazione

procediamo ora con l’aggiornamento del package manager e l’installazione del pacchetto mysql-server:

apt-get update && apt-get install mysql-server -y

Potremmo ricevere l’errore di “importazione della chiave PGP”, in questo caso non ci resta che scaricarla:

apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 467B942D3A79BD29

e ora ripetere il comando per aggiornare la lista dei pacchetti tramite APT e poi l’installazione del nostro RDBMS

ultimo passo per completare l’installazione  è l’inserimento della password dell’utente root del RDBMS Oracle MySQL. Prestiamo attenzione a questa password in quanto ci servirà per la gestione amministrativa del nostro database.

 

 

Verifichiamo che il demone sia attivo:

systemctl status mysql

e ora lanciamo il comando per mettere in sicurezza la nostra installazione di MySQL

mysql_secure_installation

Si conclude l’installazione di MySQL, da questo momento in poi è possibile gestire il nostro database da command line con il seguente comando:

mysql -u root -p

Abilitiamo il demone all’avvio del sistema

systemctl enable mysql

Tutto pronto, possiamo ora inziare a creare i nostri database e i relativi utenti.




Migrare Zabbix 5.0 da CentOS 7 LAMP a Debian 10 LEMP

Migrazione Zabbix 5.0 da un server CentOS 7 a Debian 10 Buster con Nginx e MySQL.

 

Iniziamo con una premessa: seguire questa procedura in produzione senza creare disservizio è possibile solo nel caso in cui si abbia un database esterno al server che ospita Zabbix. In caso contrario, il disservizio si presenterà nel momento in cui verrà spostato il database.

Per ambienti non troppo grandi in cui il server Zabbix è anche server SQL, è bene calcolare i tempi per eseguire il DUMP completo del DB e il relativo import nel nuovo server. In tal modo sarà possibile indicare nella dichiarazione di disservizio il tempo corretto.

Iniziamo subito con la preparazione del server Debian 10 come server stand alone. Durante l’installazione di Debian viene richiesta la scelta dell’ambiente, a quel punto dobbiamo togliere la spunta su “Ambiente Grafico” e metterla su “server ssh” per poter prendere accesso da remoto (se necessario). Dobbiamo selezionare solo “Sistema base” senza altri pacchetti, prestando attenzione a non selezionare “Server web” poiché di default viene installato Apache2.

Primo passo, quindi, installare WGET e il repository ZABBIX 5.0:

# apt update && apt install -y wget vim
# wget https://repo.zabbix.com/zabbix/5.0/debian/pool/main/z/zabbix-release/zabbix-release_5.0-1+buster_all.deb
# dpkg -i zabbix-release_5.0-1+buster_all.deb

Passiamo subito all’installazione di Zabbix 5.0:

# apt-get update && apt install zabbix-server-mysql zabbix-nginx-conf

Ora che abbiamo installato Zabbix 5.0, passiamo a NGINX, PHP 7.3 e MySQL (quest’ultimo se non abbiamo già un server dedicato per i database):

# apt install nginx php-fpm php-mysql

Ora creiamo il classico file info.php:

# vim /var/www/html/info.php

Inseriamo il codice seguente:

<?php phpinfo(); ?>

Ora apriamo il file /etc/nginx/sites-available/default e aggiungiamo le direttive per poter interpretare le pagine scritte in php:

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
}

Inoltre, cambiamo la porta di ascolto di NGINX così quando metteremo il virtualhost per Zabbix non andrà in conflitto con il default.

Sostituiamo queste direttive:

listen 80 default_server;
listen [::]:80 default_server;

con le seguenti:

listen 82 default_server;
listen [::]:82 default_server;

ed ora riavviamo NGINX:

# systemctl restart nginx

Verifichiamo il corretto funzionamento aprendo al url http://<P_SERVER>:82/info.php

Passiamo all’installzione del RDBMS MySQL:

# apt-get install gnupg
# wget https://dev.mysql.com/get/mysql-apt-config_0.8.16-1_all.deb
# dpkg -i mysql-apt-config_0.8.16-1_all.deb
# apt-get update
# apt-get install mysql-community-server
# systemctl status mysql.service

Procediamo con la sicurezza di base del db server con il seguente comando:

# mysql_secure_installation

Ora creiamo database ed utente per Zabbix:

# mysql -u root -p -e "CREATE DATABASE zabbix character set utf8 collate utf8_bin;"
# mysql -u root -p -e "CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'password';"
# mysql -u root -p -e "GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';"

Non ci resta che verificare la connessione al DB tramite il PHP, apriamo il nostro file info.php

# vim /var/www/html/info.php

ed inseriamo queste righe di php prestando attenzione nella valorizzazione delle fariabile alle prime righe:

<?php
$user = "zabbix";
$password = "password";
$database = "zabbix";
$table = "todo_list";
try {
$db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
echo "<h2>CONNESSIONE AL DATABASE AVVENUTA CON SUCCESSO</h2><ol>";
foreach($db->query("SELECT content FROM $table") as $row) {
echo "<li>" . $row['content'] . "</li>";
}
echo "</ol>";
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}

Qualora ci fossero problemi di connessione apriamo il fie mysqld.cnf:

# vim /etc/mysql/mysql.conf.d/mysqld.cnf

aggiungiamo la entry “default_authentication_plugin= mysql_native_password”  subito sotto “[mysqld]“:

[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
log-error = /var/log/mysql/error.log
default_authentication_plugin= mysql_native_password

Verifichiamo il corretto funzionamento aprendo al url http://<P_SERVER>:82/info.php, a questo punto dovremmo vedere il messaggio “CONNESSIONE AL DATABASE AVVENUTA CON SUCCESSO“.

A questo punto abbiamo davanti due possibilità: provare Zabbix 5.0 prima di importare il DB dal server CentOS oppure iniziare la migrazione dei dati. In questo secondo caso, passare direttamente alla connessione al DB (punto successivo).

Scegliendo la prima opzione, invece, importiamo i dati di default di Zabbix:

# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix

Connessione al DB

A questo punto abbiamo NGINX e PHP correttamente funzionanti, non resta che verificare l’installazione di ZABBIX 5.0: il primo passaggio è quello di configurare il file /etc/zabbix/zabbix.conf con gli stessi parametri che avevamo sul server CentOS.

Arrivati al momento dalla configurazione delle credenziali di connessione al DB possiamo scegliere tra le seguenti opzioni:

  • inserire i parametri del DB locale,
  • inserire i dati del DB del server CentOS,
  • inserire i parametri del DB centralizzato.

Dobbiamo inserire i dati di connessione qui:

vim /etc/zabbix/zabbix_server.conf

e sostituire le seguenti entry:

DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=password

Nel caso in cui avessimo scelto la prima opzione, cioè qualora avessimo inserito i parametri del DB locale, potremmo provare la nostra installazione di Zabbix accedendo con nome utente e password di default alla seguente url http://<P_SERVER>. Il nome utente è “Admin” e la password è “zabbix”.

Qualora avessimo scelto la seconda o la terza opzione, cioè nel caso in cui avessimo inserito i dati del DB del server CentOS o del DB centralizzato, vedremmo la GUI lavorare con i dati di esercizio pertanto l’accesso alla url http://<P_SERVER> avvverrebbe con le utenze di produzione. Prestare attenzione: si tratta di dati di esercizio.

SCENARIO RDBMS ESTERNO

La procedura è praticamente terminata, non ci resta che iniziare ad acquisire i dati invertendo gli IP tra Debian 10 e CentOS 7, in questo modo non dovremo modificare nessun proxy o agent.

SCENARIO MYSQL INTERNO

Andiamo sul server CentOS e fermiamo Zabbix in modo da interrompere la scrittura dei dati sul DB:

# systemctl stop zabbix-server

Lanciamo il comando mysqldump per esportare tutto il DB su di un file:

# mysqldump -u user_zabbix -ppassword_zabbix db_zabbix > zabbix_server.sql

Portiamo il file zabbix_server.sql sul nostro server Debianb 10:

# scp zabbix_server.sql utente@IP_Debian:/tmp

Torniamo su Debian 10,  fermiamo Zabbix ed importiamo il DB:

# systemctl stop zabbix-server
# mysql -u user_zabbix -ppassword_zabbix db_zabbix < zabbix_server.sql

Attendiamo il tempo di import del DB, una volta terminato avremo spostato ZABBIX 5.0 da CentOS a Debian 10. Non ci resta ora che iniziare ad acquisire i dati invertendo gli IP tra Debian 10 e CentOS 7 ed eseguire lo start di zabbix-server:

# systemctl start zabbix-server

Finito!

 

Articolo correlato: Upgrade Zabbix 4.4 to Zabbix 5.0 Cenots 7.X




Size of MySQL database

Vogliamo sapere lo spazio occupato da ogni singolo database usando la command line, una semplice query restituisce a video l’informazione richiesta.

Prestate attenzione perché questa query potrebbe richiedere molto tempo per DB di grandi dimensioni.

mysql> SELECT table_schema "DB Name",
Round(Sum(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB"
FROM information_schema.tables
GROUP BY table_schema;

Ecco un esempio dell’output:

+--------------------------------+---------------+
| DB Name | DB Size in MB |
+--------------------------------+---------------+
| monitoraggio | 1505.0 |
| mysql | 0.7 |
| pcparts | 0.4 |
| performance_schema | 0.0 |
| photogulp | 193.3 |
| photogulp_webalbum | 0.5 |
| phplistdb | 33.4 |
| pixellone_artistika | 7.9 |
| pixellone_enter | 0.4 |
| rc-bazar_oc | 4.8 |
| wordpress_9 | 1.1 |
+--------------------------------+---------------+



Visualizzare la struttura di un database mysql da php

Se avete bisogno di “stampare” la struttura di un database mysql esistente e non volete ricorrere a soluzioni come mysql workbench o similari, potete utilizzare un comodissimo script php di David Walsh.

 

Si tratta di un file .php, lo copiate sotto la DocumentRoot del vostro webserver, lo editate con db_name, user e password e lo aprite da web. Il risultato sarà del tipo:

 

admin_roles

Field Type Null Key Default Extra
id int(11) NO PRI auto_increment
nombre varchar(255) NO

 

admin_user

 

Field Type Null Key Default Extra
iduser int(11) NO PRI auto_increment
username varchar(255) NO
password varchar(255) NO
salt varchar(255) NO
nome varchar(50) NO
cognome varchar(50) NO

 

 

Lo script lo potete consultare  in questo post del blog di David Walsh oppure scaricarlo da  questa pagina su Mr.Webmaster




MySQL UDF Perl Regular Expression

Nel realizzare nuovi scraper per g4play.it Emanuele si è reso conto che la nostra istanza MySQL  non supporta le espressioni regolari, a lui non servono solo query di ricerca ma manipolazioni di dati complesse. Con estrema semplicità mi chiede di installare la libreria lib_mysqludf_preg, non è complicato, ma neanche così banale. Iniziamo subito con l’installazione dei pacchetti che ci serviranno:

[root@mysqllbit lib_mysqludf_preg]# yum install pcre pcre-devel
[root@mysqllbit lib_mysqludf_preg]# yum install make gcc gcc-c++
[root@mysqllbit lib_mysqludf_preg]# yum install mysql-devel

 

Questo per evitare tutti gli errori relativi al compilatore, a pcre e mysql. Scarichiamo il paccheto da GitHub:

[root@mysqllbit lib_mysqludf_preg]# wget https://github.com/mysqludf/lib_mysqludf_preg/archive/testing.zip
[root@mysqllbit lib_mysqludf_preg]# unzip testing.zip

 

ora lanciamo il configuratore

[root@mysqllbit lib_mysqludf_preg]# ./configure

 

ci siamo risparmiati gli errori avendo installato preventivamente i pacchetti, l’unico messaggio a video con la parola ERROR è

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

 

Possiamo rilassarci, avendo settato la password di root è normale che non riesca ad accedere. Ora installiamo:

[root@mysqllbit lib_mysqludf_preg]# make
[root@mysqllbit lib_mysqludf_preg]# make install
[root@mysqllbit lib_mysqludf_preg]# make installdb

ERROR 1548 (HY000) at line 5: Cannot load from mysql.proc. The table is probably corrupted
make: *** [uninstalldb] Error 1

 

Sull’ultimo passaggio ho ricevuto errore di tabella corrotta, per questo ho dovuto prima “sistemare” le tabelle MySQL e poi rilanciare il make installdb


[root@mysqllbit lib_mysqludf_preg]# make installdb
/usr/bin/mysql -p <./uninstalldb.sql 
Enter password: 
cat installdb.sql | sed 's/\.so/.dll/g' >installdb_win.sql
if test -f .libs/lib_mysqludf_preg.dll; then  \
                /usr/bin/mysql -p <./installdb_win.sql; \
        else \
                /usr/bin/mysql -p <./installdb.sql;\
        fi
Enter password:
[root@mysqllbit lib_mysqludf_preg]# make test
cd test; make test
make[1]: Entering directory `/usr/local/lib/lib_mysqludf_preg/test'
/usr/bin/mysqltest -p --include=create_testdb.sql  --result-f...
Enter password:
ok
/usr/bin/mysqltest -p --include=create_testdb.sql  --result-f...
Enter password:
ok
/usr/bin/mysqltest -p --include=create_testdb.sql  --result-f...
Enter password:
ok
/usr/bin/mysqltest -p --include=create_testdb.sql  --result-fi...
Enter password:
ok
/usr/bin/mysqltest -p --include=create_testdb.sql  --result-f...
Enter password:
ok
/usr/bin/mysqltest -p --include=create_testdb.sql  --result-f...
Enter password:
ok
make[1]: Leaving directory `/usr/local/lib/lib_mysqludf_preg/test'

Finito, ora Emanuele potrà usare le espressioni regolari per manipolare i dati di g4play.it.




PRIMO POST

Dopo aver maturato esperienza di lunga data spaziando nei vari settori informatici, il team LBiT ha deciso di aprire un blog per condividere questo bagaglio con tutti voi.

 Ci sembra la cosa più giusta da fare trovandoci in team dislocati, poiché la materia informatica continua ad essere la nostra passione e in questo modo potremo documentare le attività che svolgiamo su quello che ci piace chiamare “un diario di appunti”.

OpenSource

Come tutti gli informatici che seguono la filosofia dell’Opensource, crediamo che la condivisione sia alla base della crescita di ogni individuo. Non siamo gelosi del nostro lavoro, non abbiamo paura di mettere a disposizione il nostro sapere. Altri prima di noi hanno condiviso l’esperienza maturata sul campo offrendoci guide, sviluppando software e sistemi operativi dandoci l’opportunità di accedere alla materia fino a diventare dei professionisti, e grazie a loro siamo qui a fare altrettanto oggi.

L’impresa LBit si propone di affiancare e supportare il cliente organizzando al meglio la sua attività con l’utilizzo e l’ottimizzazione degli strumenti informatici