Tutoriel : Installation et configuration de MySQL sur DNS-323

Tutoriel : Installation et configuration de MySQL sur DNS-323

MySQL : Le système de gestion de bases de données

MySQL est un système open source de gestion de bases de données (SGBDR) fourni par une société commerciale acquise par Oracle. Bien que le logiciel soit libre, la société fournit une assistance commerciale et du conseil (ce qui est un modèle similaire à certaines distributions Linux).

Un RDBMS est un logiciel pour stocker, accéder et mettre à jour (souvent de taille) des quantités de données structurées sous forme de tableaux liés entre eux. À l'origine, les bases de données ont été généralement utilisé à des fins administratives telles que le stockage de renseignements sur les employés ou d'inventaire. Aujourd'hui, les bases de données sont également largement utilisés pour stocker le contenu brut à partir duquel des sites web dynamiques sont générées. Cela permet à une même information d'être présentée de différentes façons. Parce que SQL est un langage normalisé pour mettre à jour ou accéder à un RDBMS, il évite également d'avoir à s'appuyer sur les formats de stockage propriétaire avec les risques liés à l'obsolescence ou de logiciel lock-in particulier.

Bien qu'il existe différents systèmes RDBMS open source et commerciaux, MySQL est couramment utilisé dans le développement web en liaison avec Linux, Apache (ou lighttpd), et php. Wikipedia, par exemple, fonctionne sur le logiciel MediaWiki écrit en PHP et utilise une base de données MySQL.

Sommaire

1. Mise en place MySQL

1.1. Installation

Uli fourni aimablement une version packagée de MySQL pour la NAS dans son repository.

MySQL n'est pas installé par défaut avec fun_plug, mais vous devriez avoir déjà téléchargé une copie dans le cadre du tutoriel général sur la façon de télécharger, installer et mettre à niveau des packages. Assurons-nous d'abord de toujours avoir la dernière version (Uli mettant régulièrement à jour son repository).

Notez que la commande d'installation ci-dessous pourraient prendre un certain temps:

Code:
funpkg -i /ffp/pkg/additional/*/mysql-*.tgz

Si vous avez une version de MySQL installée qui est périmé, vous aurez besoin d'éxecuter la mise à niveau (voir ici pour l'aide):

Code:
funpkg -u /ffp/pkg/additional/*/mysql-*.tgz

1.2. Configuration

MySQL peut être configuré avec un fichier nommé my.cnf. Après l'installation vous pouvez configurer plusieurs paramètres MySQL en copiant un fichier d'exemple depuis /ffp/etc/examples/mysql/ to /ffp/etc/:

Code:
cp /ffp/etc/examples/mysql/my-small.cnf /ffp/etc/my.cnf

1.3. Répertoires

MySQL stocke les données de ses bases de données dans des fichiers qui sont à leur tour stockés dans un répertoire nommé /srv/mysql/. Au lieu de créer le répertoire à cet endroit, vous préférerez peut-être créer un lien symbolique de /srv/ pour le répertoire cible de votre choix.
Nous allons d'abord le créer:

Code:
mkdir -p /ffp/opt/srv/mysql
mkdir -p /ffp/opt/srv/tmp/mysql

Maintenant, nous le linkons vers /srv/:

Code:
ln -s /ffp/opt/srv/ /srv

Ce lien sera perdu après le redémarrage du périphérique, vous devez donc ajouter les deux lignes suivantes à la fin du fichier /ffp/etc/fun_plug.init afin de recréer le lien à chaque démarrage du NAS. Vous pouvez éditer ce fichier en utilisant un éditeur comme nano:

Code:
# create custom link to the server-folder
ln -s /ffp/opt/srv/ /srv

1.4. Initialisation

MySQL a besoin de bases de données internes pour le démarrage initial qui peuvent être installées en exécutant la commande mysql_install_db:

Code:
cd /srv/
ls -al
/ffp/bin/mysql_install_db
ls -al

Il en résulte plusieurs avertissements (que vous pouvez ignorer) concernant l'ajustement sur le système des tailles et les tables d'aide. Sortie partielle typique:

Code:
081116 22:05:32 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295
081116 22:05:32 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295
081116 22:05:32 [Warning] option 'myisam_max_extra_sort_file_size': unsigned value 2147483648 adjusted to 2147483647
081116 22:05:32 [Warning] option 'thread_stack': unsigned value 65536 adjusted to 131072

Maintenant, nous allons démarrer manuellement le serveur MySQL pour une configuration avancée:

Code:
sh /ffp/start/mysqld.sh start

Notez que vous devrez appuyez sur Entrée pour ravoir la main (contrairement à d'autres démons).

Après le premier démarrage, il faut sécuriser l'installation:

Code:
/ffp/bin/mysql_secure_installation

Il vous sera posé plusieurs questions (ci-dessous sous forme abrégée) à répondre par Y(es) pour chacune d'elles.
Pour "Enter current password for root (enter for none):" (Entrer mot de passe actuel pour l'utilisateur root (entrer pour rien)) vous appuyez sur ENTRER parce que le mot de passe root par défaut est vierge.
Pour le nouveau mot de passe root, il est préférable d'utiliser un mot de passe différent de celui de l'utilisateur root du système: ce n'est que pour posséder les droits d'administration à la base de données et n'est pas lié au contrôle global sur la machine.

Code:
Enter current password for root (enter for none):
OK, successfully used password, moving on...

Set root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!

Remove anonymous users? [Y/n] Y

Disallow root login remotely? [Y/n] Y

Remove test database and access to it? [Y/n] Y

Reload privilege tables now? [Y/n] Y

All done!

Pour activer ce service de façon permanente à chaque démarrage, vous devez entrer cette commande:

Code:
chmod a+x /ffp/start/mysqld.sh

2. Tester MySQL

Après avoir démarré MySQL, vous pouvez tester votre installation de la manière suivante:

2.1. Ligne de commande

Entrez la commande suivante sur la ligne de commande:

Code:
mysql -p

Cela ouvrir une ligne de commande spéciale mysql, où vous pouvez entrer des commandes standard SQL. Maintenant passons sur la base de données "mysql":

Code:
USE mysql;

Ensuite, sélectionnez le Host (Hôte), le User (Utilisateur) et Password (Mot de Passe) de la base de données:

Code:
SELECT Host, User, Password FROM user;

Enfin quittez la ligne de commande spéciale mysql:

Code:
exit;

Un exemple de sortie ressemblera à ceci:

Code:
root@CH3SNAS:/srv/mysql# mysql -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.0.67 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> USE mysql;

Database changed
mysql> SELECT Host, User, Password FROM user;

+-----------+------+-------------------------------------------+
| Host | User | Password |
+-----------+------+-------------------------------------------+
| localhost | root | *8D2414F01991E3B0B86E14D2469EACA0B6D78B99 |
| CH3SNAS | root | *8D2414F01991E3B0B86E14D2469EACA0B6D78B99 |
| 127.0.0.1 | root | *8D2414F01991E3B0B86E14D2469EACA0B6D78B99 |
+-----------+------+-------------------------------------------+
3 rows in set (0.01 sec)

mysql> exit;
Bye

Soit dit en passant: comme vous pouvez le voir, les mots de passe sont cryptés (dans ce cas, il a été "nas-tweaks.net").

2.2. PHP

Pour la suite, vous devez installer lighttpd et PHP au cas où vous ne l'auriez pas déjà fait.
Vous avez également besoin d'activer le module mysql de lighttpd en éditant le fichier /ffp/etc/php.ini:

Code:
; Linux extensions
extension=calendar.so
;extension=ctype.so
;extension=ftp.so
;extension=gd.so
;extension=mbstring.so
extension=mysql.so
;etc

Assurez-vous de définir le dossier qui contient tous les modules ci-dessus à la ligne 536 du fichier php.ini. Habituellement, cela devrait être:

Code:
extension_dir = "/ffp/lib/php/extensions/no-debug-non-zts-20060613/"

Vous aurez besoin de redémarrer le serveur web si vous avez activé l'extension mysql, ou modifié le extension_dir en utilisant:

Code:
sh /ffp/start/lighttpd.sh restart

Ensuite, placez un fichier appelé testmysql.php dans le document-root (tel que configuré par exemple ici /srv/www/pages) avec le contenu suivant (remplacez YOURROOTPASS par le mot de passe root mysql):

Code:
<?php
// Connect to the database
mysql_connect("localhost", "root","YOURROOTPASS");
// Select the database "mysql"
mysql_select_db("mysql");
// Query the database for the Users:
$result = mysql_query("SELECT Host, User, Password FROM user;");
// Print the results
while($row = mysql_fetch_object($result))
{
echo $row->User . "@" . $row->Host . " has the encrypted password: " . $row->Password;
}
// Close the connection to the database
mysql_close();
?>

Si l'ouverture cette page dans votre navigateur ne donne pas les résultats escomptés, vérifiez le mot de passe, et si nécessaire fermer et ouvrir de nouveau le navigateur.

Lorsque vous avez terminé, vous voudrez peut-être supprimer le mot de passe root (ou supprimer ce fichier .php) pour éviter d'exposer le mot de passe mysql de la ligne mysql_connect("localhost", "root","YOURROOTPASS");.

3. Utilisateurs et privilèges

3.1. Ajouter des utilisateurs supplémentaires

Comme vous ne devriez jamais utiliser le mot de passe root de votre base de données, vous pouvez ajouter des utilisateurs sur la ligne de commande mysql (tapez “mysql -uroot -p” sur la ligne de commande).
S'il vous plaît consulter le manuel mysql pour plus d'exemples.

  • Un utilisateur avec tous les privilèges, qui ne peut se connecter que depuis localhost:
Code:
GRANT ALL PRIVILEGES ON *.* TO 'YOURUSERNAME'@'localhost' IDENTIFIED BY 'YOURPASSWORD' WITH GRANT OPTION;
  • Un utilisateur avec des privilèges limités, qui ne peut se connecter que depuis localhost:
Code:
GRANT SELECT,INSERT,UPDATE,DELETE ON *.* TO 'YOUROTHERUSERNAME'@'localhost' IDENTIFIED BY 'YOUROTHERPASSWORD' WITH GRANT OPTION;
  • Un utilisateur avec des privilèges limités sur une base de données spécifique:
Code:
CREATE DATABASE databasename;
GRANT SELECT,INSERT,UPDATE,DELETE ON databasename.* TO 'YOURSPECIALUSERNAME'@'localhost' IDENTIFIED BY 'YOURSPECIALPASSWORD' WITH GRANT OPTION;

Après avoir envoyé les droits d'ajout ou de modification, veuillez vous assurez que ces derniers soient chargés en exécutant la commande suivante depuis la ligne de commande mysql:

Code:
FLUSH PRIVILEGES;

3.2. Permettre l'accès externe

Par défaut l'accès depuis l'extérieur n'est pas autorisé car il s'agit d'un risque de sécurité. Mais de nombreux outils comme HeidiSQL ou d'autres programmes d'administation extérieur dépendent de l'accès depuis l'extérieur sur votre NAS.

Attention: Vous devez vérifier explicitement les droits de vos utilisateurs! Tout utilisateur MySQL doit avoir des mots de passe!

Suivez d'abord la section "lancer mysql sous un utilisateur aux droits limités", puis suivez les instructions suivantes:
Arrêtez le serveur MySQL:

Code:
sh /ffp/start/mysqld.sh stop

Modifiez /ffp/etc/my.cnf et ajoutez un commentaire à la ligne skip-networking, de sorte que cela ressemble à ceci:

Code:
#skip-networking

Modifier /ffp/start/mysqld.sh et trouvez la ligne commençant par mysqld_flags et supprimer "--skip-networking" entre les deux guillemets. Enregistrez le fichier par la suite.

3.3. Lancer MySQL sous un utilisateur aux droits limités

Par défaut le serveur MySQL démarre avec les droits du root. Cela signifie, que si le serveur MySQL est violé par un intrus, le système peut probablement être endommagé. Soyez avisé d'utiliser le serveur mysql seulement dans des zones sécurisées (par exemple, votre réseau local LAN sans accès Internet) et de désactiver l'accès externe (par défaut).

Si vous voulez sécuriser votre installation veuillez s'il vous plaît suivre les étapes suivantes:

Arrêtez le serveur MySQL:

Code:
sh /ffp/start/mysqld.sh stop

Ajoutez un nouvel utilisateur avec droits limités:

Code:
useradd -U -s /bin/false mysql
store-passwd.sh

Cela va créer un utilisateur mysql qui est dans le groupe mysql (-U ajoute un nouveau groupe) et qui ne peut pas se connecter. Il apparaîtra probablement dans l'interface web, mais ne peut pas être utilisé!

Cet utilisateur a besoin d'avoir accès aux répertoires de MySQL:

Code:
cd /srv
chown -R mysql:mysql mysql
cd /ffp/var/run/
chown mysql:mysql mysql

Modifiez /ffp/start/mysqld.sh et trouvez la ligne commençant par mysqld_flags et supprimer "--user=root" entre les deux guillemets. Enregistrez le fichier par la suite.

Puis, lancez à nouveau MySQL:

Code:
sh /ffp/start/mysqld.sh start

Avec ces changements, MySQL est démarré sous l'utilisateur mysql.

4. Supprimer MySQL

Si vous souhaitez supprimer MySQL et ses bases de données, vous devez procéder comme décrit dans le tutoriel général sur les packages.
Tout d'abord, arrêtez mysql:

Code:
sh /ffp/start/mysqld.sh stop

Ensuite, supprimez le package avec funpkg:

Code:
funpkg -r /ffp/pkg/additional/*/mysql*.tgz

Ensuite, vous devez supprimer les bases de données (méfiance!). Passez dans le dossier /srv/ et supprimez le dossier mysql:

Code:
cd /srv/
rm -R mysql

En outre, vous devez annuler les modifications de /ffp/etc/fun_plug.init, peut-être supprimer le lien symbolique (sans danger) /srv/, l'exécution, mais surtout de désactiver le script de démarrage:

Code:
chmod a-x /ffp/start/mysqld.sh

Voilà, MySQL est supprimé.

Source (en Anglais) : NAS-Tweaks.net

Commentaires  
Faut que je test ça pour installer Joomla.
Pour du provisoire et pouvoir faire des tests avant une mise en prod du site ^^.

Les commentaires sont clos.