Archivi tag: mysqld

Gentoo e MySQL all’avvio

Per installare un nuovo servizio su una macchina Gentoo è molto conveniente utilizzare il packet manager di cui è dotata, ovvero emerge.

gentoo-logo.jpg

Potrebbe succedere, però, che la versione del servizio richiesta sia più datata rispetto a quella presente nei repository ufficiali di emerge, ergo è necessario scaricare i sorgenti dell’applicativo e successivamente compilarli mediante gcc.

Nella fattispecie, il servizio oggetto del presente post è MySQL, che dovrà essere avviato automaticamente al boot del sistema operativo.

Generalmente MySQL mette a disposizione uno scrip di avvio per le distro più diffuse, da posizionare all’interno della directory /etc/init.d.

Purtroppo la versione di MySQL che ho scaricato non conteneva al suo interno uno scrip di startup per Gentoo e per quindi ho dovuto escogitare una specie di workaround.

Mi spiego meglio: affinchè il comando rc-update add mysqld boot possa funzionare, è necessario che lo scrip in questione (mysqld) contenga del codice specifico da dare in pasto al binario /sbin/runscrip. Infatti, è proprio grazie ad esso che il SO riconosce lo scrip e lo lancia durante lo specifico runlevel.

La cosa fuorviante è che, nonostante mysqld non contenesse all’interno la chiamata al binario /sbin/runscrip (essendo un semplice scrip bash) il comando rc-update non ha restituito alcun errore.

Infatti, un semplice rc-update mi ha mostrato il servizio correttamente assegnato al runlevel:

mysqld | boot

Per capirci qualcosa in più ho deciso di abilitare il logging del demone rc, editando il file /etc/rc.conf:

rc_logger="YES"

Dopo il riavvio della macchina ho quindi analizzato il file /var/log/rc.log, il quale non ha mostrato nessun tentativo di avvio per mysqld. Ed è stato proprio in questo momento che ho capito dove stava il problema: mysqld era uno scrip bash e non runscrip.

Per farla breve, il workaround di cui vi ho accennato precedentemente è il seguente:

1) all’interno della directory /etc/local.d ho creato lo scrip mysqld.start, il cui contenuto è:

#!/bin/sh
 /etc/init.d/mysqld start

2) ho convertito il suddetto scrip in eseguibile, mediante il comando:

server local.d # chmod +x mysqld.start

A questo punto, in virtù del fatto che Gentoo durante la fase di boot esegue tutti gli scrip presenti all’interno di /etc/local.d, ho finalmente ottenuto l’avvio automatico di MySQL.

E’ tutto.

Alla prossima.

Installare MySQL da sorgenti

Chiunque abbia mai avuto a che fare con Linux conoscerà sicuramente i cosiddetti packet manager (yum, aptitude, emerge, ecc.). Utilizzandoli insistentemente si rischia di non sapere più come comportarsi nel caso in cui sia necessario installare una vecchia versione di un pacchetto software, oppure una versione beta dello stesso (non presente nei repositories).

 

My.jpg

La prima scelta, solitamente, ricade sui pacchetti precompilati per una specifica architettura hardware ed un sistema operativo ben determinato. Quando questi pacchetti non sono disponibili (a.k.a. Gentoo), è necessario scaricare i file sorgenti e compilare il tutto a manetta.

Dopo questa breve introduzione, vi mostrerò come installare MySQL 5.0.91 su Gentoo. Tale procedura vale per tutte le versioni di MySQL che necessitano di compilazione manuale. Ma bando alle ciance e veniamo al dunque.

Per prima cosa creiamo la directory in cui verrà installato il pacchetto in questione:

nightfly@nightbox:~$ mkdir /usr/local/mysql

Adesso, dopo aver scaricato mediante wget la tarball contenente i sorgenti di MySQL, possiamo procedere con la loro compilazione ed installazione:

 nightfly@nightbox:~$ tar -xvf mysql-5.0.91.tar.gz
 nightfly@nightbox:~$ cd mysql-5.0.91
 nightfly@nightbox:~$ ./configure --prefix=/usr/local/mysql
 nightfly@nightbox:~$ make
 nightfly@nightbox:~$ make install

Aggiungiamo l’utente mysql che useremo per avviare il demone e modifichiamo l’owner della directory target:

 nightfly@nightbox:~$ chown mysql:mysql /usr/local/mysql
 nightfly@nightbox:~$ cd /usr/local/mysql/bin

Installiamo i DB di default:

nightfly@nightbox:~$ ./mysql_install_db

Copiamo il file di configurazione di MySQL su /etc:

nightfly@nightbox:~$ cp /usr/local/mysql/share/mysql/my-medium.cnf  /etc
 nightfly@nightbox:~$ mv /etc/my-medium.cnf /etc/my.cnf

Copiamo gli eseguibili in /usr/local/sbin:

nightfly@nightbox:~$ cp /usr/local/mysql/bin /usr/local/sbin

Verifichiamo che la copia sia andata a buon fine:

nightfly@nightbox:~$ which mysql

Copiamo il demone in /etc/init.d e rinominiamolo in mysqld:

 nightfly@nightbox:~$ cp /usr/local/mysql/share/mysql/mysql.server /etc/init.d
 nightfly@nightbox:~$ cd /etc/init.d
 nightfly@nightbox:~$ mv mysql.server mysqld

Avviamo il demone e verifichiamo che sia attivo mediante un netstat ed un ps:

nightfly@nightbox:~$ /etc/init.d/mysqld start

nightfly@nightbox:~$ netstat -anp | grep :3306
nightfly@nightbox:~$ ps aux | grep mysqld

A questo punto possiamo definire la password per l’utente root digitando:

nightfly@nightbox:~$ mysqladmin -u root password <password>

L’ultima cosa da fare consiste nella definizione delle ACL di accesso ai DB. Un esempio di ACL è il seguente:

mysql> GRANT ALL ON *.* TO root IDENTIFIED BY 'rootpassword';

ovvero sto definendo il permesso (GRANT) di effettuare INSERT, UPDATE, DELETE e SELECT (ALL) su tutte le tabelle (*) di tutti i DB presenti (.*).

Come ultima verifica proviamo ad accedere a MySQL da locale e da remoto, lanciando il comando:

nightfly@nightbox:~$mysql -u root -prootpassword

(da locale);

nightfly@nightbox:~$mysql -h <hostname> -u root -prootpassword

(da remoto).

Se i tentativi di connessione vanno a buon fine vuol dire che il nostro DBMS è stato installato correttamente ed è pronto per l’uso.

A presto.