Accueil🇫🇷Chercher

MySQL

MySQL (prononcer [maj.ɛs.ky.ɛl]) 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[2], autant par le grand public (applications web principalement) que par des professionnels, en concurrence avec Oracle, PostgreSQL et Microsoft SQL Server.

MySQL
Description de l'image MySQL.svg.
Description de l'image Mysql-screenshot.PNG.
Informations
Développé par MySQL AB, Sun Microsystems et Oracle
Première version
Dernière version 8.0.33 ()[1]
DĂ©pĂ´t MySQL sur GitHub
État du projet En développement permanent
Écrit en C++ et C
Système d'exploitation Linux, Microsoft Windows, macOS, FreeBSD, Solaris et type Unix
Environnement X86_64, IA-32 (en), A64 (en) et architecture SPARC
Formats lus MySQL Table Definition Format (d)
Formats Ă©crits MySQL Table Definition Format (d)
Langues Anglais
Type Système de gestion de base de données relationnelle (en)
Serveur logiciel (d)
Politique de distribution Gratuit
Licence Licence publique générale GNU version 2 et licence propriétaire
Site web www.mysql.com

Son nom vient du prénom de la fille du cocréateur Michael Widenius, My (sv) (prononcer [my]). SQL fait référence au Structured Query Language, le langage de requête utilisé.

MySQL AB a été acheté le par Sun Microsystems pour un milliard de dollars américains[3]. En 2009, Sun Microsystems a été acquis par Oracle Corporation, mettant entre les mains d'une même société les deux produits concurrents que sont Oracle Database et MySQL. Ce rachat a été autorisé par la Commission européenne le [4] - [5].

Depuis , son créateur Michael Widenius a créé MariaDB (Maria est le prénom de sa deuxième fille) pour continuer son développement en tant que projet Open Source.

Caractéristiques

MySQL est un serveur de bases de données relationnelles SQL développé dans un souci de performances élevées en lecture, ce qui signifie qu'il est davantage orienté vers le service de données déjà en place que vers celui de mises à jour fréquentes et fortement sécurisées. Il est multi-thread et multi-utilisateur.

C'est un logiciel libre[6], open source[7], développé sous double licence selon qu'il est distribué avec un produit libre ou avec un produit propriétaire. Dans ce dernier cas, la licence est payante, sinon c'est la licence publique générale GNU (GPL) qui s'applique. Un logiciel qui intègre du code MySQL ou intègre MySQL lors de son installation devra donc être libre ou acquérir une licence payante. Cependant, si la base de données est séparée du logiciel propriétaire qui ne fait qu'utiliser des API tierces (par exemple en C# ou php), alors il n'y a pas besoin d'acquérir une licence payante MySQL. Ce type de licence double est utilisé par d'autres produits comme le framework de développement de logiciels Qt (pour les versions antérieures à la 4.5).

Systèmes d'exploitation supportés

MySQL fonctionne sur de nombreux systèmes d'exploitation différents, incluant AIX, IBM i-5, BSDi, FreeBSD, HP-UX, Linux, Mac OS X, NetWare, NetBSD, OpenBSD, OS/2 Warp, SGI IRIX, Solaris, SCO OpenServer, SCO UnixWare, Tru64 Unix, Windows.

Les bases de données sont accessibles en utilisant les langages de programmation C, C++, VB, VB .NET, C#, Delphi/Kylix, Eiffel, Java, Perl, PHP, Python, Windev, Ruby et Tcl ; une API spécifique est disponible pour chacun d'entre eux. Une interface ODBC appelée MyODBC est aussi disponible. En Java, MySQL peut être utilisé de façon transparente avec le standard JDO.

Langages informatiques supportés

MySQL supporte deux langages informatiques, le langage de requête SQL et le SQL/PSM (Persistent Stored Modules), une extension procédurale standardisée au SQL incluse dans la norme SQL:2003[8]. SQL/PSM, introduit dans la version 5 de MySQL, permet de combiner des requêtes SQL et des instructions procédurales (boucles, conditions…), dans le but de créer des traitements complexes destinés à être stockés sur le serveur de base de données (objets serveur), par exemple des procédures stockées ou des déclencheurs.

Utilisation

MySQL fait partie du quatuor LAMP : Linux, Apache, MySQL, PHP. Il appartient Ă©galement Ă  ses variantes WAMP (Windows) et MAMP (macOS).

Le couple PHP/MySQL est très utilisé par les sites web et proposé par la majorité des hébergeurs Web. Plus de la moitié des sites Web fonctionnent sous Apache, qui est le plus souvent utilisé conjointement avec PHP et MySQL.

Historique

De nombreuses entreprises, dont Google, Yahoo!, YouTube, Adobe, Airbus, Alstom, Crédit agricole, AFP, Reuters, BBC News, Ernst & Young, Alcatel-Lucent[9] utilisent actuellement MySQL.

Version de SQL

MySQL supporte la norme SQL2[10] (utilisation des RIGHT JOIN et LEFT JOIN[11]), la conformité à cette norme garantissant qu'il honorera les requêtes normalisées correspondantes. Cependant, les fonctionnalités des normes SQL les plus récentes ne sont pas toutes implémentées[12] et certaines ne respectent pas la syntaxe recommandée[13] (la concaténation par exemple), empêchant l'interopérabilité des requêtes entre différents SGBD.

Fonctionnalités

Deux moteurs principaux sont présents dans MySQL : MyISAM et InnoDB.

MyISAM, contrairement à InnoDB, ne supporte ni transactions ni intégrité automatique des tables, il n'est pas destiné aux applications dont la cohérence des données est critique ; cependant, ses performances le font adopter pour des applications ayant besoin d'une base de données simple et peu onéreuse à mettre en œuvre.

Pour les utilisateurs, phpMyAdmin est un outil web souvent disponible pour créer, remplir et utiliser des bases MySQL.

Interopérabilité

Les tables des bases de données SQL et celles des tableurs communiquent bien dans le deux sens (en ce qui concerne les seules données numériques et chaînes de caractères) au moyen du format CSV. Des formats de sauvegarde et restauration existent, sous forme d'ordres SQL, ainsi qu'en format XML.

Usage en production

L'intérêt d'utiliser des outils ouverts a également poussé quelques établissements bancaires tels que le Crédit mutuel, le Crédit agricole, le Crédit lyonnais, la Banque de développement du Canada à inscrire MySQL au catalogue de leurs produits informatiques internes.

DĂ©nomination

MySQL est l'œuvre d'une société suédoise, MySQL AB, fondée par David Axmark, Allan Larsson et Michael « Monty » Widenius.

Le nom MySQL vient de la combinaison de My, fille du cofondateur Michael « Monty » Widenius, avec l'acronyme SQL (selon la documentation de la dernière version en anglais[14]). D'autre part, le dossier base et une grande partie des bibliothèques utilisées par les développeurs utilisent le préfixe My.

Le nom du logo de MySQL (le dauphin) Sakila, a été choisi par les créateurs de MySQL sur la base d'un concours. Il a été proposé par Ambrose Twebaze, développeur du Swaziland. D'après Ambrose, le nom Sakila puise ses origines du siswati, la langue locale du Swaziland.

Historique

David Axmark, fondateur de MySQL.

La première version de MySQL est apparue le . Il a d'abord été créé pour un usage personnel à partir de mSQL en s'appuyant sur le langage de bas niveau ISAM qu'ils trouvaient trop lent et trop rigide. Ils ont créé une nouvelle interface SQL en gardant la même API que mSQL.

MySQL est passé en licence GPL à partir de la version 3.23.19 ()

  • Version 4.0 : première version en , stable depuis
  • Version 4.1 : première version en , stable depuis
  • Version 5.0 : première version en , stable depuis
  • Version 5.1 : première version en , Release Candidate distribuĂ©e depuis
  • Version 5.2 : distribuĂ©e en avant-première (ajout du nouveau moteur de stockage Falcon) en , cette ligne a ensuite Ă©tĂ© renommĂ©e 6.0
  • Version 5.5 : Version stable depuis
  • Version 5.6 : Version stable depuis [15]
  • Version 5.7 : Version stable depuis [16]
  • Version 6.0 : première version alpha en , abandonnĂ©e depuis le rachat de MySQL par Oracle en
  • Version 8.0 : Version stable depuis [17]

En 2003, MySQL AB et SAP AG concluent un accord. Le résultat s’appellera MaxDB. Il est issu de l'intégration du système de SAP (SAP DB) dans MySQL.

Le , Oracle Corporation annonce racheter Sun Microsystems pour 7,4 milliards de dollars[18], qui venait lui-mĂŞme de racheter MySQL AB, crĂ©ant la crainte de voir MySQL disparaĂ®tre – ou du moins ne plus ĂŞtre dĂ©veloppĂ© – au profit d'Oracle, le SGBD d'Oracle Corporation. MySQL est cependant loin d'avoir toutes les fonctionnalitĂ©s d'Oracle, et pourrait donc ĂŞtre vu au contraire par la sociĂ©tĂ© comme un produit gratuit d'appel banalisant l'usage de SQL et prĂ©parant donc ses futures ventes.

Moteurs de base de données inclus

L'une des spécificités de MySQL est de pouvoir gérer plusieurs moteurs au sein d'une seule base. Chaque table peut utiliser un moteur différent au sein d'une base. Ceci afin d'optimiser l'utilisation de chaque table.

Voici les différents moteurs historiques de MySQL :

  • MyISAM : moteur par dĂ©faut de MySQL jusqu'Ă  la version 5.5. Il est le plus simple Ă  utiliser et Ă  mettre en Ĺ“uvre. Il utilise plusieurs fichiers qui grandissent au fur et Ă  mesure que la base grossit. Il ne supporte pas les transactions, ni les clefs Ă©trangères ;
  • InnoDB : moteur crĂ©Ă© et maintenu par InnoBase (rachetĂ© par Oracle le ). Il gère les transactions et les clefs Ă©trangères (et donc l'intĂ©gritĂ© de ses tables). En contrepartie, les bases qui l'utilisent occupent bien plus d'espace sur le disque. InnoDB est le moteur par dĂ©faut depuis la version 5.6.
  • BerkeleyDB (BDB) : moteur fourni par Sleepycat Software qui gère les transactions ;
  • Merge : moteur fait pour fusionner plusieurs tables qui doivent ĂŞtre identiques ;
  • Aarchive : moteur adaptĂ© Ă  l'archivage de donnĂ©es. Les lignes sont compressĂ©es au fur et Ă  mesure de leur insertion. Les requĂŞtes de recherches sont alors sensiblement plus lentes ;
  • Memory (Heap) : moteur oĂą les tables sont stockĂ©es uniquement en mĂ©moire. La structure de la base est stockĂ©e sur le disque dur mais les donnĂ©es sont stockĂ©es dans la RAM, si la machine serveur redĂ©marre, les donnĂ©es seront perdues. Cependant, Ă©tant donnĂ© qu'il n'y a plus d'accès disque, une requĂŞte de modification (UPDATE, INSERT…) s'exĂ©cutera bien plus rapidement et sans charger les bras d'accès ; convient pour les mĂ©morisations temporaires, comme un panier en e-commerce;
  • CSV : moteur utilisant des fichiers textes (au format CSV) comme stockage ;
  • Blackhole : moteur rĂ©ceptionnant les donnĂ©es, les transfĂ©rant mais ne les stockant pas. Il peut ĂŞtre utilisĂ© comme rĂ©pĂ©teur ou comme filtre de donnĂ©es ;
  • ISAM : moteur d'origine de MySQL, maintenant obsolète et remplacĂ© par MyISAM. Il est restĂ© pour des raisons de compatibilitĂ© ;
  • NDB (uniquement dans la version MaxDB) : moteur de base de donnĂ©es rĂ©seau gĂ©rant les grappes de serveurs ;
  • Federated : moteur permettant d'accĂ©der Ă  des tables d'une base de donnĂ©es distantes plutĂ´t que dans les fichiers locaux ;
  • Exemple : moteur fictif et inutilisable, mis Ă  disposition pour les dĂ©veloppeurs ;
  • Falcon (en) : ce nouveau moteur devait faire son apparition avec MySQL 6. Ă€ l'Ă©poque MySQL AB avait voulu crĂ©er un nouveau moteur transactionnel pour ne plus dĂ©pendre d'Oracle qui venait de racheter InnoBase, crĂ©ateurs du moteur de stockage InnoDB. Ce moteur de stockage a Ă©tĂ© abandonnĂ© depuis le rachat de MySQL par Oracle.
  • Aria (anciennement Maria) : Ă©volution ACID de MyISAM.

Des moteurs de stockages open source :

  • Infobright : moteur VLDB, orientĂ© vers les applications dĂ©cisionnelles ;
  • Sphinx : moteur orientĂ© recherche plein texte ;
  • PBXT : moteur transactionnel proche des performances d'InnoDB ;
  • Memcached : moteur orientĂ© table de hash en mĂ©moire ;
  • M4q : moteur orientĂ© gestion de file d'attente.
  • ColumnStore (MariaDB) Moteur orientĂ© colonne.

Des moteurs de stockages commerciaux :

  • DB2 Moteur transactionnel copyright IBM ;
  • SolidDB Moteur transactionnel copyright IBM ;
  • NitroEDB Moteur VLDB copyright BrightHouse ;
  • Tokutek Moteur VLDB.

La facilité d'utilisation de plusieurs moteurs de stockage dans une seule base avec MySQL permet une énorme flexibilité dans l'optimisation de la base : on utilisera MyISAM pour stocker les données peu sensibles et nécessitant un accès rapide aux données (par exemple une liste d'utilisateurs), InnoDB pour les fonctions avancées et les données plus sensibles (par exemple pour une liste des transactions bancaires), MEMORY pour des données pouvant être perdues lors du redémarrage de la machine et souvent modifiées (par exemple une liste d'utilisateurs en ligne), ARCHIVE pour un historique (ou log) ne nécessitant que peu de lecture…

Grappes de serveurs

Deux méthodes existent pour répartir la charge sur un ensemble de machines fonctionnant sous MySQL Server. Ces méthodes permettent d'assurer une redondance (si une machine tombe en panne, d'autres peuvent prendre la relève), d'améliorer la rapidité des recherches (SELECT) ou encore d'établir une machine dédiée à la sauvegarde des données.

RĂ©plication

RĂ©plication sous MySQL.

MySQL est capable, depuis la version 3.23.15 d'utiliser un système de réplication à sens unique relativement simple à mettre en place : un serveur maître qui contient la base de données source et va recevoir l'ensemble des modifications, et un serveur esclave qui contient une base à structure identique et qui va se connecter au serveur maître pour aller chercher les nouvelles modifications et mettre à jour ses bases. Un maître peut avoir plusieurs esclaves, et un esclave peut devenir à son tour maître pour un autre serveur esclave, réalisant ainsi une chaîne de réplication[19].

Toutes les modifications (UPDATE, DELETE, INSERT…) doivent être envoyées au serveur maître et seront automatiquement répercutées sur ses esclaves, mais les requêtes de recherche (SELECT), souvent plus nombreuses et plus gourmandes en ressources pourront être effectuées sur un ou plusieurs esclaves. Comme les requêtes de modifications doivent être redirigées sur le serveur maître, la conception de l'application doit s'adapter à l'architecture : le programmeur va ouvrir deux connexions dans son programme, une sur le serveur maître, sur lequel il exécutera toutes ses modifications et une sur le serveur esclave sur lequel il exécutera toutes ses recherches.

Ce système ne permet cependant qu'une redondance limitée :

  • Si le serveur maĂ®tre tombe en panne, son esclave peut prendre le relais, mais il est nĂ©cessaire au programmeur de mettre Ă  jour son programme pour charger le serveur qui va recevoir les modifications, ou de programmer une liste de redondance pour changer de maĂ®tre automatiquement ;
  • Si le serveur esclave cesse de fonctionner, l'ensemble des requĂŞtes devront ĂŞtre envoyĂ©es au serveur maĂ®tre ;
  • Si l'architecture comporte plus de deux nĹ“uds, et dans le cas oĂą un serveur intermĂ©diaire Ă  la chaĂ®ne (qui est esclave et Ă  la fois maĂ®tre) tombe en panne, le serveur esclave devra ĂŞtre reconfigurĂ© pour se rĂ©pliquer sur le serveur maĂ®tre du serveur tombĂ© en panne.

Dans la plupart des cas, il faudra une action de l'administrateur pour rétablir l'ordre, et l'application cessera de fonctionner durant ce laps de temps. L'intérêt de cette solution apparaît alors dans la gestion des sauvegardes, car l'application n'utilisant que le serveur maître, elle ne sera pas stoppée si le serveur esclave de sauvegardes tombe en panne, mais une sauvegarde de la base sera disponible dans le cas où le serveur maître tombe en panne.

Si l'on souhaite rajouter un nœud, il faut le placer au bout de la chaîne en tant qu'esclave et modifier l'application pour gérer ce nouveau nœud.

Du point de vue de MySQL, chaque nœud est géré indépendamment, c'est donc au programmeur de devoir gérer la répartition de la charge.

Extension memcached permettant accès NoSQL aux données du moteur InnoDB

L'interface « memcached » est une extension à MySQL depuis la version 5.6 se présentant sous la forme d'un service résident exécuté sur le serveur et permettant de mettre en mémoire cache des données stockées par le moteur InnoDB. L'intérêt est un gain de performance (les données sont en cache mémoire) et la possibilité d'accéder à et de modifier une donnée via une interface du style NoSQL (accès à la donnée par une syntaxe du style @@get key), permettant d'éviter le temps d'interprétation de la requête par le parseur de requête[20].

MySQL Cluster

Structure d'une grappe de serveurs MySQL.

MySQL est capable, depuis la version 4.1 et grâce au moteur de stockage NDB, de gérer une grappe de serveurs complète. Sa structure repose sur la duplication des données, c'est-à-dire que chaque nœud fera partie d'un groupe de nœuds qui posséderont tous la totalité de la base[21].

Un protocole mis en place dans chaque nœud s'occupe d'adresser chaque transaction aux différents nœuds concernés dans la grappe, il faut un minimum de deux machines pour établir une solution de clustering MySQL et une machine (qui peut elle-même intégrer un serveur MySQL) qui va jouer le rôle de répartiteur de charge en redirigeant les requêtes sur les nœuds disponibles et les moins occupés.

Les requêtes de recherches (SELECT) seront plus rapides, mais lors d'une modification des données (une requête UPDATE, DELETE ou INSERT par exemple), celle-ci sera effectuée sur l'ensemble des nœuds, ce qui bloquera l'ensemble de la grappe pendant cette opération.

Par rapport à un système de réplication, la redondance est améliorée : si un nœud tombe en panne, sa charge est automatiquement reprise par les autres nœuds.

L'ajout d'un nouveau nœud peut se faire sans avoir besoin de repartitionner la base, il suffit de le faire reconnaître par la grappe et le redémarrage d'un nœud peut se faire sans avoir à redémarrer la grappe.

Du point de vue de MySQL, chaque nœud fait partie d'un ensemble qui pourrait être reconnu comme une seule machine. Pour le programmeur, il doit programmer son application pour communiquer avec le répartiteur de charge.

Cette solution s'adapte parfaitement lorsque la disponibilité et la sécurité des données est un problème critique et que l'on recherche un partitionnement technique pour l'écriture. Couplé à des fonctionnalités temps réel et à une API de programmation asynchrone NDB Cluster s'adresse principalement aux exigences du marché des télécommunications.

Notes et références

  1. « Changes in MySQL 8.0.33 (2023-04-18, General Availability) », (consulté le )
  2. (en) DB-Engines Ranking
  3. (en) Sun acquires MySQL, blogs.mysql.com
  4. L'UE autorise le rachat de Sun par Oracle, Reuters
  5. (en) European Commission Unconditionally Approves Oracle’s Acquisition of Sun, Oracle
  6. « MySQL Products », sur mysql.fr (consulté le ).
  7. « ~mysql/mysql-server/5.5 », sur launchpad.net (consulté le ).
  8. (en) http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=34135.
  9. (en) MySQL :: MySQL Customers by Industry
  10. (en) http://www.scriptol.com/programming/mysql.php
  11. « dev.mysql.com/doc/refman/5.0/f… »(Archive.org • Wikiwix • Archive.is • Google • Que faire ?).
  12. « Le SQL de A à Z - Fonctions SQL », sur Developpez.com (consulté le ).
  13. « siteduzero.com/tutoriel-3-3160… »(Archive.org • Wikiwix • Archive.is • Google • Que faire ?).
  14. « MySQL 5.5 Manual: History of MySQL ».
  15. http://www.oracle.com/us/corporate/press/1904335
  16. « How To Prepare For Your MySQL 5.7 Upgrade », sur digitalocean.com, .
  17. (en) « What’s New in MySQL 8.0? (Generally Available) », sur MySQL Server Blog, (consulté le ).
  18. article Oracle rachète Sun pour 7,4 milliards de dollars sur O1Net.com
  19. « dev.mysql.com/doc/refman/5.0/f… »(Archive.org • Wikiwix • Archive.is • Google • Que faire ?).
  20. « NoSQL to InnoDB with Memcached ».
  21. « dev.mysql.com/doc/refman/5.0/f… »(Archive.org • Wikiwix • Archive.is • Google • Que faire ?).

Voir aussi

Bibliographie

  • Paul Dubois, Stefan Hinz, Carsten Pedersen (2004), MySQL - Guide officiel (ISBN 978-2-7440-1782-7)
  • Michael Kofler (2005), MySQL 5 : Guide de l'administrateur et du dĂ©veloppeur (ISBN 978-2-212-11633-5)

Articles connexes

Outils de gestion, d'administration et de conception pour MySQL
  • phpMyAdmin, outil de gestion de bases de donnĂ©es MySQL Ă©crit en PHP
  • Adminer, un autre outil de gestion lui aussi Ă©crit en PHP
  • MySQL administrator, logiciel d'administration de bases de donnĂ©es
  • MySQL Workbench (versions MySQL > 4) et anciennement DBDesigner (versions 3 et 4), système de conception de base de donnĂ©es sous forme graphique qui intègre tous les niveaux de conception, de modification, de crĂ©ation et de maintenance sur la structure d'une base de donnĂ©es
  • MySQL-Front, outil d'administration de base de donnĂ©es MySQL
  • SQL Buddy
  • DaDaBIK Database Interface Kreator
Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.