# MySQL/Introduction

* Introduction
* PhpMyAdmin
* Parcourir les bases de données
* Spécifier les noms
* LDD, LMD et LCD
* Variables utilisateurs
* Alias
* Types de données
* Manipulation de base
** mysqldump
* Manipulation de table
* Manipulation de données
* Requêtes
* NULL
* Opérateurs
* Fonctions
* Procédures stockées
* Regex
* Bases de données spatiales
* Importer et exporter
* Réplication
* Optimisation
* API
* Sécurité
* Mots réservés
* Débogage
* Introduction
* PhpMyAdmin
* Parcourir les bases de données
* Spécifier les noms
* LDD, LMD et LCD
* Variables utilisateurs
* Alias
* Types de données
* Manipulation de base
** mysqldump
* Manipulation de table
* Manipulation de données
* Requêtes
* NULL
* Opérateurs
* Fonctions
* Procédures stockées
* Regex
* Bases de données spatiales
* Importer et exporter
* Réplication
* Optimisation
* API
* Sécurité
* Mots réservés
* Débogage
[ Modifier le sommaire ]

## Pourquoi MySQL ?

* Gratuiciel en licence GPL version 2.
* Facile d'utilisation : intuitif et ergonomique.
* Vitesse performante.
* Supporte la plupart des commandes SQL ANSI.
* Support technique complet, avec des tutoriels en ligne, des forums, mailing list (lists.mysql.com),et des contrats payants possibles.
* Portabilité : importation et exportation faciles vers des fichiers Excel et autres bases de données.
* Échelonnable : pratique aussi bien pour des petites bases, que pour celles contenant des milliards d'enregistrements avec plusieurs téraoctets de données et des centaines de milliers de tables.
* Contrôle des permission des utilisateurs précis.

### La licence MySQL

MySQL est disponible sous double licence :
* Licence publique générale GNU version 2 : copyleft, permettant d'utiliser MySQL à des fins commerciales ou pas, tant que l'application est à la même licence. Il y existe par ailleurs une exception Free/Libre Open Source Software (FLOSS) qui autorise des programmes non GPL mais gratuits à se connecter au serveur MySQL (comme par exemple des programmes en licence PHP).
* Une soi-disante "commerciale" (bien que GNU GPL puisse être aussi utilisée en commercial mais pas propriétaire), licence payante, conférant le droit d'intégrer MySQL avec une application non FLOSS, redistribuable en dehors de son organisation. Mais ces bibliothèque ne peuvent pas se connecter aux nouvelles versions de MySQL.

## MySQL et ses forks

MySQL étant un freeware, il a donc engendré des fork officieux.

### MariaDB

En 2008, Sun Microsystems acheta MySQL, puis fût acheté par Oracle en 2010. Après l'acquisition, le processus de développement changea. L'équipe commença à sortir de nouvelles versions de MySQL moins fréquemment, avec du nouveau code moins testé, par une communauté moins active
En 2009 Monty Widenius, fondateur de MySQL, quitta l'entreprise pour en créer une autre, appelée The Monty Program. Son fork fût appelé MariaDB, il permet de :
* importer le nouveau code qui sera ajouté à la branche MySQL, en le rendant plus stable ;
* nettoyer le code MySQL ;
* ajouter des contributions de la communauté (plugins et fonctionnalités) ;
* développer le moteur de stockage Aria, anciennement Maria ;
* augmenter les performances ;
* ajouter d'autres fonctionnalités au serveur.
Sa licence est GNU GPLv2, héritée de MySQL.
La plateforme primaire de MariaDB est GNU/Linux, mais il tourne aussi sur Windows. Les moteurs de stockage suivants ont été ajoutés :
* Aria (utilisé pour les tables internes)
* PBXT
* XtraDB
* FederatedX
* SphinxSE
* OQGRAPH
Installation sur Ubuntu : sudo apt-get install mariadb-server && apt-get install mariadb-client

### Drizzle

En 2008 Brian Aker, architecte en chef de MySQL, quitta le projet pour démarrer un nouveau fork appelé Drizzle. Initialement financé par Oracle, Drizzle l'est maintenant par Rackspace. Ses caractéristiques sont :
* seule une petite partie du code MySQL a été conservée : les fonctionnalités essentielles ;
* modularité : beaucoup de choses peuvent être implémentées sous forme de plugins ;
* optimisé multiprocesseur et multicore 64 bits ;
* seuls les systèmes GNU/Linux et UNIX sont supportés.
Il n'existe pas de version publique de ce fork. Il est en licence GNU GPLv2 (héritée de MySQL), mais une licence BSD peut être appliquée.

### OurDelta

OurDelta est un autre fork, maintenu par Open Query. La première branche (5.0), est basée sur MySQL 5.0. La 5.1 est issue de MariaDB. OurDelta contient des patchs développés par la communauté ou des tiers. Il fournit des packages pour certaines distributions GNU/Linux : Debian, Ubuntu, Red Hat/CentOS. Il n'est pas disponible sur d'autres plateformes mais son code source est disponible gratuitement.

### Percona Server

Percona Server set un fork maintenu par Percona. Il propose le moteur de stockage ExtraDB, fork d'InnoDB, et des patchs d'amélioration des performances.

## Installation d'Apache / MySQL pour Windows
### Tout-en-un

Des logiciels tout-en-un (serveur Web, base de donnée MySQL, et PHP) permettent de s'affranchir d'une installation fastidieuse et rédhibitoire pour le débutant :
* EasyPHP : n'a pas vocation à être installé pour de la production, mais pour le développement. Il stocke les bases de données dans C:\Program Files (x86)\EasyPHP\binaries\mysql\data.
* WAMP : est du même type qu'EasyPHP : ce logiciel installe facilement un serveur Web Apache, une base de données MySQL et PHP 4 et 5. Il a l'avantage de permettre de passer facilement de PHP 4 à PHP 5, sans avoir à refaire une installation ou une compilation. Tout comme EasyPHP, c'est un environnement de développement, et non un environnement de production. Attention : la résolution des noms d'hôtes se réalise séparément. Les installations WAMP servent à tester en local sur votre PC. Dans la plupart des cas, il suffit d'utiliser le fichier Hosts local, comme on le ferait sur une machine Linux, afin de lier des noms aux adresses IP. Dans Windows XP, Vista et 7, ce fichier se trouve dans le répertoire systemroot\System32\Drivers\Etc. Il peut se faire que le service ait déjà été configuré. Lorsque vous vous en doutez, contactez votre administrateur réseau. Remarque : vous trouverez une liste des possibilités de résolution de noms avec MS Windows sur Microsoft.com.
* XAMPP : est du même type qu'EasyPHP ou WAMP, le deuxième P étant pour Perl. Son usage est recommandé avec PHPEclipse, et il fournit aussi un serveur Apache Tomcat par défaut.
* The Uniform Server : en anglais seulement avec Apache2, Perl5, PHP5, MySQL5, phpMyAdmin.
Sur Windows 10 pro, le serveur IIS est installé par défaut, et oblige Apache à changer de port (888 au lieu de 80) lors de l'installation. Pour résoudre cela il suffit de décocher Internet Information Services dans Programmes et fonctionnalités, Activer ou désactiver des fonctionnalités Windows.
De même, le port MySQL est susceptible de passer de 3306 à 3388.
Sur Windows 10, EasyPHP development server (alias Devserver, la version rouge) ne fonctionne pas (il manque MSVCR110.dll), mais EasyPHP hosting server (alias Webserver, la bleue) tourne normalement. Or, elle se lance automatiquement à chaque démarrage, ce qui le ralentit significativement. Pour éviter cela, exécuter services.msc, puis passer les trois services ci-dessous en démarrage manuel. Ensuite pour les lancer à souhait (en tant qu'administrateur), créer un script MySQL.cmd contenant les lignes suivantes :

#### Message d'erreur relatif à SSL

Pour l'instant, WAMP ne supporte pas encore le Secure Socket Layer (SSL). L'installation se finit par un message qui vous informe de ce fait. Afin de pouvoir travailler sans problèmes, éditez le fichier c:\windows\php.ini. Cherchez dans ce fichier la ligne qui commence avec extension=php_openssl.dll. Commentez cette ligne en la faisant précéder d'un point-virgule :
;extensions=php_openssl.dll
Si tout se passe bien, vous pouvez ouvrir la page de test dans votre navigateur.

### Installation manuelle

* Apache est disponible sur le site Web de Apache Software Foundation apache.org.
* PHP est téléchargeable sur le site officiel de php. Choisissez le fichier au format ZIP.
* Enfin, vous trouverez MySQL sur mysql.com.

#### Installer Apache

Pour installer Apache, double-cliquez sur le fichier exécutable, et suivez les instructions d'installation automatique.
Si vous installez Apache sur un ordinateur de développement, renseignez le champ "nom de domaine" avec la valeur localhost.
Si vous installez un serveur de production et que vous disposez d'un nom de domaine, vous devriez disposer des informations nécessaires concernant votre nom de domaine, fournies par le registrar.
Une fois l'installation terminée, il faut encore indiquer à Apache qu'il doit fonctionner conjointement avec PHP, car il ne sait pas les traiter par défaut. Pour cela, il faut modifier les informations de configuration d'Apache, contenues dans le fichier httpd.conf, qui se trouve dans le dossier d'installation d'Apache, dans le sous-dossier conf.

#### Installer PHP

Une fois l'archive téléchargée, décompressez-la à la racine de votre disque dur et renommez le dossier en 'PHP'. Dans le dossier PHP, vous trouverez deux fichiers: php.ini-dist et php.ini-recommended. Copiez php.ini-recommended dans votre dossier C:\Windows ou C:\winnt (le nom du dossier dépend de la version de votre système. renommez-le en php.ini.
Ce fichier est le fichier de configuration qui contrôle les options dont vous disposerez. Par exemple :
| PHP.ini | PHP | Rôle |
| error_reporting E_ALL | error_reporting(E_ALL); | Affiche tous les avertissements et erreurs directement sur le site. C'est utile pour la préproduction car cela évite de rechercher d'éventuels messages dans les logs, mais peut perturber la mise en page pour des avertissements bénins. |
| error_reporting 0 | error_reporting(0); | N'affiche aucun message sur le site relatif à son exécution |
| max_execution_time = 300 | set_time_limit(300); | Définit le "timeout", c'est-à-dire le temps maximum en secondes autorisé pour exécuter un script PHP. |
| post_max_size = 80M | ini_set('post_max_size', '80M'); | Définit la taille maximum d'un fichier que l'on peut envoyer au serveur en HTTP. |

#### MySQL

Télécharger et installer le .msi sur http://dev.mysql.com/downloads/gui-tools/5.0.html.
Pour arrêter, démarrer, démarrer automatiquement le serveur MySQL vous devez aller dans la gestion des services (Démarrer/Exécuter/services.msc).

## Installation d'Apache / MySQL pour Linux
### LAMP

Logiciel tout-en-un pour Linux (Apache + MySQL + PHP), comme WAMP pour Windows.

### Installation manuelle
#### Apache sur Debian / Ubuntu

Le service peut ne pas être lancé par défaut, mais même s'il l'est on peut quand-même essayer de l'activer avec :
On peut ensuite tester le serveur, pour voir si une page s'affiche ou s'il refuse la connexion :
Cette adresse est le rebouclage, elle peut aussi être rentrée directement dans tout navigateur web.
Si Apache était déjà installé vérifier le fichier pour indiquer le démarrage automatique d'Apache 2 /etc/default/apache2 :

##### Installer PHP

On distingue principalement deux versions de PHP : celle dont le binaire est appelé par le serveur Web, et php-fpm qui possède son propre service daemon (aussi appelé par le serveur Web) testable ainsi :
FPM signifie FastCGI Process Manager, puisque le processus PHP-fpm écoute les requêtes CGI. Cela peut se traduire soit par des requêtes TCP/IP, soit par un socket Unix (.sock dans le vhost).
PHP peut-être installé avec toutes les déclinaisons de la distribution Debian (stable, testing, unstable). Il suffit pour cela d'insérer vos lignes préférées dans le fichier /etc/apt/sources.list :
Ce qui suit suppose que le serveur Web a bien été installé ; exécuter les commandes suivantes :
Une fois ces commandes exécutées, redémarrer le serveur Web. Dans le cas d'Apache cela s'effectue avec la commande suivante :
Si tout s'est bien passé, vous disposez maintenant d'un serveur Web qui a la capacité d'exécuter des scripts PHP dans votre navigateur.
Testons :
Pour débugger :

###### Mise à jour

Pour PHP 7 ou 8 sur Ubuntu :
Sur Debian :
Puis :
Une fois les serveurs Web installés, ils se lancent automatiquement à chaque démarrage de la machine, ce qui est souhaitable pour un serveur, mais pas toujours pour un PC. Pour éviter cela, il suffit d'y désactiver les daemons :

###### Bibliothèques

Voici une liste de bibliothèques fréquemment utilisées dans les applications :
D'autres s'installent avec pecl au lieu de apt.
Pour les activer après installation, on peut éditer le php.ini ou lancer : phpenmod nom_du_module_php. Ex : sudo phpenmod gd.
Pour les désactiver : phpdismod nom_du_module_php
Pour détecter l'emplacement du php.ini de la version de PHP par défaut : php --ini.

##### Désinstaller PHP

Pour éviter de désinstaller tous les paquets PHP un par un (par exemple après une bascule de PHP7.0 vers PHP7.1), il existe "ppa-purge" :

#### Apache sur Gentoo

Premièrement il faut installer Apache :
Ensuite, il faut installer PHP :
Puis il faut qu'apache utilise PHP dans sa configuration.
* Code : Configuration de apache
* # nano -w /etc/conf.d/apache2
* APACHE2_OPTS="-D PHP5"

#### MySQL seul

MySQL est disponible sur http://dev.mysql.com/downloads/gui-tools/5.0.html au format :
* .msi (Windows)
* .dmg (Mac)
* .rpm (Linux)
* .tar
En l'absence de gestionnaire de paquets, utiliser le .tar ainsi :

#### APT
##### Variante

La dénomination des paquets mentionnés peut varier légèrement selon la version. Dans un terminal, entrez :
et confirmez.
(Remarque : il semblerait qu'en installant le paquet "mysql-server-5.0", au lieu du paquet mentionné plus haut, certaines personnes rencontrent des problèmes. Il est donc préférable d'installer ce paquet, ou d'installer la dernière version 4 stable avec : $ sudo apt-get install mysql-server-4.1. Consultez le forum pour plus d'informations : )
Lancez ensuite la commande :
Appuyez sur Entrée lorsqu'il vous demande le mot de passe root MySQL : pour le moment il n'y en a pas.
Le script vous demande alors si vous voulez mettre un mot de passe pour l'utilisateur root. Répondez Y, et entrez (2 fois le nouveau mot de passe du root MySQL). Il vous pose ensuite une série de questions. Si vous ne savez pas quoi répondre, acceptez les choix par défaut en appuyant simplement sur Enter.
Votre serveur MySQL est prêt. Par défaut il se lance à chaque démarrage du système, si vous ne le souhaitez pas, il vous suffit de lancer :
et de répondre "Non" à la question du démarrage systématique de MySQL.

#### Sur Gentoo
### Modules

De nombreux modules complémentaires peuvent être installés sur Apache.
Pour les lister, on utilise apachectl (parfois apache2ctl) :
ou
Pour activer un module :
Un fichier est alors créé dans /etc/apache2/mods-enabled/.
Exemple pour la réécriture d'URL :
Pour le désactiver :
La configuration du module reste toutefois disponible dans /etc/apache2/mods-available/.

### Sites

Pour lister les sites du serveur :
Pour activer un site :
Le fichier du site est alors visible dans /etc/apache2/sites-enabled/.
Pour le désactiver :
Le site est dans /etc/apache2/sites-available/.

## Problème d'encodage d'Apache2

Si vous rencontrez un problème d'encodage des caractères de vos pages, par exemple les caractères accentués apparaissant sous la forme "�" (<?>), c'est probablement parce qu'Apache2 déclare dans les en-têtes HTTP qui accompagnent les pages visionnées un encodage par défaut en Unicode (UTF-8) :
Tandis que les pages visionnées utilisent un autre encodage des caractères, comme par exemple Latin1 (ISO-8859-1). Même si vos documents indiquent le jeu de caractères utilisé, le paramètre donné par le serveur dans les en-têtes HTTP est prioritaire !
Pour corriger ce problème, il faudra éditer /etc/apache2/apache2.conf :

#### Encodage par défaut en Latin1 (ISO-8859-1)

Cherchez la ligne suivante :
Décommentez-la en enlevant le # :
Pour ceux qui ont la locale iso-8859-15 (sinon vous pouvez faire "sudo dpkg-reconfigure locales" pour l'ajouter) et qui désirent l'utiliser par défaut, ajoutez un 5 en fin de ligne :
ainsi que la ligne suivante dans le paragraphe en-dessous :
Il ne vous reste plus qu'à mettre "fr" en première position dans la ligne LanguagePriority (juste au-dessus), et à demander à apache de relire sa configuration :

#### Aucun encodage par défaut

Il est également possible de s'affranchir de tout encodage par défaut, de la manière suivante :
Cherchez la directive AddDefaultCharset :
Remplacez l'attribut par la valeur Off :
Là encore, on demandera à Apache de relire sa configuration :
Maintenant, les en-têtes HTTP ne contiendront plus d'indication d'encodage des caractères. Attention : il faudra alors que chaque page indique l'encodage utilisé, car s'en remettre à la détection automatique par les navigateurs peut s'avérer assez aléatoire !

## Installation sur Docker

Dans docker-compose.yml, il convient de partager un volume pour les importations de dumps :

## Hello world

Pour entrer des commandes SQL on peut soit :
* Lancer le logiciel en shell.
** Linux : sudo mysql -u root, ou directement sur une base spécifique : mysql -h localhost -u root MaBase. Si l'accès est refusé, ajoute "-p" pour taper le mot de passe.
** Windows : "C:\Program Files (x86)\EasyPHP\binaries\mysql\bin\mysql.exe" -h localhost -u root MaBase
* Ouvrir une fenêtre SQL dans PhpMyAdmin (ex : http://localhost/modules/phpmyadmin/#PMAURL-1:server_sql.php?server=1).
Ainsi, on peut exécuter plusieurs commandes SQL en une seule commande shell :

## Références

* ↑ http://www.mysql.com/why-mysql/benchmarks/
* ↑ http://archive.mariadb.org/mariadb-5.5.28a/
* ↑ https://www.tecmint.com/connect-nginx-to-php-fpm/