Tutoriel pour installer Mysql et Phpmyadmin sur nginx
MySQL est un système de gestion de bases de données relationnelles (SGBDR). Il est distribué sous une double licence GPL et propriétaire. Il fait partie des logiciels de gestion de base de données les plus utilisés au monde, autant par le grand public (applications web principalement) que par des professionnels, en concurrence avec Oracle, Informix et Microsoft SQL Server.

phpMyAdmin (PMA) est une application Web de gestion pour les systèmes de gestion de base de données MySQL réalisée en PHP et distribuée sous licence GNU GPL.
Cette interface pratique permet d'exécuter, très facilement et sans grandes connaissances dans le domaine des bases de données, de nombreuses requêtes comme les créations de table de données, les insertions, les mises à jour, les suppressions, les modifications de structure de la base de données. Ce système est très pratique pour sauvegarder une base de données sous forme de fichier .sql et ainsi transférer facilement ses données. De plus celui-ci accepte la formulation de requêtes SQL directement en langage SQL, cela permet de tester ses requêtes par exemple lors de la création d'un site et ainsi de gagner un temps précieux.


Pré-requis :
  1. Avoir installé nginx sur son serveur dédié
  2. Avoir installé php5-fpm
  3. Avoir un accès root
Déroulement :
  1. Installation de mysql
  2. Création d'un utilisateur pour remplacer root
  3. Installation de Phpmyadmin
  4. Mise en place d'un vhost pour accèder à Phpmyadmin en sous-domaine
  5. Création, Suppression, Utilisation d'une base de données
  6. Création, Suppression, Modification d'une table dans une base de données
  7. Importation et exportation d'une base de données en ligne de commande
TODO List :
  • Insertion de données dans une table
  • Création d'un utilisateur avec Phpmyadmin
  • Création d'une base de données avec Phpmyadmin
  • Importation d'une base de données sql dans Phpmyadmin

Installation de Mysql


apt-get install mysql-server php5-mysql  mysql-common
Indiquez le mot de passe root pour Mysql :



Puis activer mysql :
mysql_install_db
Pour lancer le script de mise en route :
/usr/bin/mysql_secure_installation
Entrez votre mot de passe root.

Puis pour les questions répondre comme ceci :
By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y                                            
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
... Success!

By default, MySQL comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

Pour plus de sécurité, il faut faire un changement au niveau php :
nano /etc/php5/fpm/php.ini
remplacer :
cgi.fix_pathinfo=1
en
cgi.fix_pathinfo=0
par défaut la ligne est commentée.

Remarque :
Si ce nombre est maintenu à 1, l'interpréteur PHP fera de son mieux pour traiter le fichier qui est aussi près du fichier demandé que possible. Ceci est un risque de sécurité possible. Si ce nombre est fixé à 0, à l'inverse, l’interpréteur ne traite que le fichier exact, ce qui est beaucoup plus sûr.
ensuite :
nano /etc/php5/fpm/pool.d/www.conf
remplacer :
listen = 127.0.0.1:9000
par
listen = /var/run/php5-fpm.sock
redémarré php5-fpm
service php5-fpm restart
Création d'un utilisateur avec tous les privilèges
Dans une problématique de sécurité, il est préférable de créer un utilisateur ayant tous les privilèges pour ne pas utiliser root.
En root :
mysql -p
Puis :
use mysql;
puis :
GRANT ALL PRIVILEGES ON *.* TO adminmysql@localhost
IDENTIFIED BY 'lemotdepasse' WITH GRANT OPTION;
puis :
FLUSH PRIVILEGES;
Cela permet d'enregistrer les modifications apportées
Pour vérifier que la création a bien fonctionné :
select * from user where User='adminmysql';
Vous pouvez maintenant vous connecter en "adminmysql" :
mysql -u adminmysql -p
Installation de Phpmyadmin
apt-get install phpmyadmin
il vous sera demandé quel server web vous voulez utiliser. Malheureusement notre cher nginx ne s'y trouve pas.
ne mettez rien.
Web server to reconfigure automatically:
Puis :
Configure database for phpmyadmin with dbconfig-common?
Mettre NO



faire un lien symbolique entre le dossier PhpMyAdmin et votre dossier root pour vos applications web :
cd /var/www
ln -s /usr/share/phpmyadmin/ phpmyadmin

Accès à Phpmyadmin en sous-domaine
cd /etc/nginx/sites-enabled
nano phpmyadmin.conf
En HTTP :
server {
        listen 80;
        server_name phpmyadmin.ndd.fr;
        
        index index.html index.php;
        charset utf-8;
        client_max_body_size 10M;

        ssl_certificate /etc/nginx/ssl/server.crt;
       ssl_certificate_key /etc/nginx/ssl/server.key;



location ^~ / {

root /var/www/phpmyadmin;
include /etc/nginx/conf.d/php.conf;
include /etc/nginx/conf.d/cache.conf;

  index index.php index.html index.htm;
         location ~ ^/phpmyadmin/(.+\.php)$ {
         try_files $uri =404;
root /usr/share/;
 fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
  }
  location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {  
       root /usr/share/;
   }
   }
 location /phpMyAdmin {
  rewrite ^/* /phpmyadmin last;     }
        

}
En HTTPS :

server {
        listen 80;
            server_name phpmyadmin.ndd.fr;
        return 301 https://$server_name$request_uri;
}
server {
    listen 443 ssl;
    server_name phpmyadmin.ndd.fr;

    index index.html index.php;
    charset utf-8;
    client_max_body_size 10M;
 
    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;

    location ^~ / {
        root /var/www/phpmyadmin;
        include /etc/nginx/conf.d/php.conf;
        include /etc/nginx/conf.d/cache.conf;

        index index.php index.html index.htm;

        location ~ ^/phpmyadmin/(.+\.php)$ {
            try_files $uri =404;
            root /usr/share/;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include /etc/nginx/fastcgi_params;
        }
        
        location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {  
            root /usr/share/;
        }
    }

    location /phpMyAdmin { rewrite ^/* /phpmyadmin last; }

}
En HTTPS en ayant suivi le tuto de Meister pour les certificats :
server {
        listen 80;
            server_name phpmyadmin.ndd.fr;
        return 301 https://$server_name$request_uri;
}
server {
        listen 443 ssl;
        server_name phpmyadmin.ndd.fr;

        index index.html index.php;
        charset utf-8;
        client_max_body_size 10M;
  

    ssl on;
    ssl_certificate /etc/nginx/ssl/sd.ndd_chain.pem;
    ssl_certificate_key /etc/nginx/ssl/sd.key.pem;
    ssl_session_timeout 5m;
    ssl_prefer_server_ciphers on;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ALL:!aNULL:!eNULL:!LOW:!EXP:!RC4:!3DES:+HIGH:+MEDIUM;
       


location ^~ / {

root /var/www/phpmyadmin;
include /etc/nginx/conf.d/php.conf;
include /etc/nginx/conf.d/cache.conf;

  index index.php index.html index.htm;
         location ~ ^/phpmyadmin/(.+\.php)$ {
         try_files $uri =404;
root /usr/share/;
 fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
  }
  location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {  
       root /usr/share/;
   }
   }
 location /phpMyAdmin {
  rewrite ^/* /phpmyadmin last;     }
        

}

Vous pouvez maintenant accèder à la page de PhpMyAdmin via http://phpmyadmin.ndd.fr ou https://phpmyadmin.ndd.fr

Création, Suppression, Utilisation d'une base de données
Remarque :
Sous Mysql il vaut mieux éviter de mettre des accents ou des caractères spéciaux pour les noms de bases ou champs, etc.
Se connecter en root ou utilisateur adminmysql :
mysql -p
ou
mysql -u adminmysql -p
Création
CREATE DATABASE mabase CHARACTER SET 'utf8';
Vous pouvez choisir un autre encodage si vous le désirez. L’intérêt est que toutes les tables de la base mabase seront automatiquement converties en 'utf8'.
Supression
DROP DATABASE mabase;
Utilisation
Pour insérer des tables dans une base de données il faut au préalable la sélectionner
USE mabase;
Création, Suppression, Modification d'une table dans une base de données

Création d'une table
Pré-requis :
  • Etre connecté en root ou utilisateur adminmysql
  • Avoir créé une base de données
  • Avoir sélectionné la base de données pour son utilisation

Pour créer la table :
CREATE TABLE [IF NOT EXISTS] nom_table (
    colonne1 description_colonne1,
    [colonne2 description_colonne2,
    colonne3 description_colonne3,
    ...,]
    [PRIMARY KEY (colonne_clé_primaire)]
)
;
  • Nom_table : le nom de votre table
  • colonne1 : désignation de l'attribut, exemple : nom
  • colonne2 : désignation de l'attribut, exemple : prénom
  • description_colonne1 : type de l'attribut, exemple : VARCHAR(20)
  • PRIMARY KEY : permet de définir quel attribut sera clé primaire de la table
Pour avoir plus de précision sur les type d'attribut, regarder ici : Type attributs Mysql
Pour voir toutes les tables de la base de données :
SHOW TABLES;
Pour voir la table que vous venez de créer :
DESCRIBE nom_table;
Suppression d'une table :
DROP TABLE nom_table;
Modification d'une table :

Ajouter une colonne :
ALTER TABLE nom_table 
ADD [COLUMN] nom_colonne description_colonne;
COLUMN n'est pas obligatoire, si ce n'est pas précisé dans la requête, Mysql considérera que c'est un ajout de colonne
Suppression d'une colonne
ALTER TABLE nom_table 
DROP [COLUMN] nom_colonne;
Modification du nom d'une colonne
ALTER TABLE nom_table 
MODIFY ancien_nom nouveau_nom description_colonne;
ATTENTION Il faut toujours mettre description_colonne même si elle reste la même
Modification du type d'une colonne
ALTER TABLE nom_table 
MODIFY nom_colonne nouvelle_description;
Importation et exportation d'une base de données en ligne de commande

Importation d'une base
mysql -u monuser -pmonpassword -h localhost maBase < maBase_backup.sql
Exportation d'une base
mysqldump -u monuser -pmonpassword -h localhost maBase > maBase_backup.sql



Sources :
Répondre…