Pour utiliser les tables InnoDB en MySQL
versions 3.23, voyez Section 15.3, « InnoDB avec MySQL version 3.23 ».
En MySQL 4.0, vous n'avez rien à faire pour obtenir le support
des tables InnoDB. Si vous ne souhaitez pas
utiliser les tables InnoDB, vous pouvez ajouter
l'option skip-innodb dans votre fichier
d'options MySQL.
Les deux ressources disques importantes gérées par
InnoDB sont sa table de données et son fichier
de log.
Si vous ne spécifiez aucune options de configuration
InnoDB, MySQL 4.0 et plus récent créera un
fichier de données auto-croissant appelé
ibdata1 et deux fichiers de log de 5 Mo
appelés ib_logfile0 et
ib_logfile1 dans le dossier de données
MySQL. En MySQL 4.0.0 et 4.0.1, le fichier de données est de 64
Mo et pas auto-croissant. En MySQL 3.23, InnoDB
ne démarrera pas si vous ne fournissez pas d'options de
configuration.
Note : pour obtenir les meilleures performances, vous devez explicitement configurer les paramètres InnoDB dans les exemples ci-dessous. Naturellement, il vous faudra adapter les configurations à votre architecture.
Pour configurer le fichier de données InnoDB,
utilisez l'option innodb_data_file_path dans la
section [mysqld] du fichier
my.cnf. Sous Windows, vous pouvez utiliser
my.ini à la place. La valeur de
innodb_data_file_path doit être une liste d'un
ou plusieurs fichiers. Si vous indiquez plusieurs fichiers,
séparez les noms par des caractères points-virgules
(‘;’) :
innodb_data_file_path=datafile_spec1[;datafile_spec2]...
Par exemple, une configuration qui crée explicitement un espace de table, avec les mêmes caractéristiques que la configuration par défaut de MySQL 4.0 est :
[mysqld] innodb_data_file_path=ibdata1:10M:autoextend
Cette configuration crée un fichier de données de 10 Mo
ibdata1, auto-croissant. Il n'y a pas de
dossier de sauvegarde d'indiqué : par défaut, c'est le dossier
de données de MySQL.
Les tailles sont spécifiées avec les suffixes
M et G pour indiquer des
megaoctets et des gigaoctets.
Une table contenant 50 Mo de données, appelée
ibdata1 et un fichier 50 Mo auto-croissant,
appelé ibdata2 dans le dossier de données est
configuré comme ceci :
[mysqld] innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend
La syntaxe complète de la spécification de fichier de données inclut le nom du fichier, sa taille, et différents attributs :
file_name:file_size[:autoextend[:max:max_file_size]]
L'attribut autoextend et ceux qui le suivent
peuvent être utilisés uniquement pour le dernier fichier de
données de la ligne innodb_data_file_path.
autoextend est disponible depuis MySQL 3.23.50
et 4.0.2.
Si vous spécifiez le dernier fichier avec l'option
autoextend, InnoDB va
augmenter la taille du dernier fichier de données jusqu'à ce
qu'il n'y ait plus de place dans l'espace de table. Les
incréments se feront par bloc de 8 Mo.
Si le disque est plein, vous aurez à ajouter un autre fichier sur
un autre disque. Les informations pour reconfigurer une table
existante sont données dans la section
Section 15.8, « Ajouter et retirer des données et des logs InnoDB ».
InnoDB ne connaît pas la taille maximale des
fichiers sur votre système : il faut donc être prudent lorsque
la taille des fichiers ne peut dépasser 2 Go. Pour spécifier la
taille maximale des fichiers auto-croissant, utilisez l'attribut
max. La ligne de configuration suivante permet
au fichier ibdata1 de croître jusqu'à 500
Mo :
[mysqld] innodb_data_file_path=ibdata1:10M:autoextend:max:500M
InnoDB crée les fichiers de données dans le
dossier de données de MySQL. Pour spécifier explicitement un
dossier, utilisez l'option
innodb_data_home_dir. Par exemple, pour créer
deux fichiers appelés ibdata1 et
ibdata2 mais pour les placer dans le dossier
/ibdata, configurez InnoDB
comme ceci :
[mysqld] innodb_data_home_dir = /ibdata innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend
Note : InnoDB
ne crée pas les dossiers : assurez vous que
/ibdata existe avant de lancer le serveur.
C'est aussi vrai pour les fichiers de log. Utilisez la commande
Unix et DOS mkdir pour créer les dossiers
nécessaires.
InnoDB forme le chemin de chaque fichier en
concaténant textuellement la valeur de
innodb_data_home_dir devant le nom du fichier,
en ajoutant un slash si nécessaire. Si l'option
innodb_data_home_dir n'est pas mentionnée dans
my.cnf, la valeur par défaut est le dossier
``point'' ./, c'est à dire le dossier de
données de MySQL.
Si vous spécifier l'option
innodb_data_home_dir sous forme de chaîne
vide, vous pouvez spécifier des noms de chemins absolus dans la
valeur de innodb_data_file_path. L'exemple
ci-dessous est équivalent au précédent :
[mysqld] innodb_data_home_dir = innodb_data_file_path=/ibdata/ibdata1:50M;/ibdata/ibdata2:50M:autoextend
Exemple de fichier
my.cnf simple Supposons que vous
avez un serveur avec 128 Mo de RAM et un disque dur. Voici un
exemple de configuration de fichier my.cnf ou
my.ini pour InnoDB. Nous
supposons que vous exécutez MySQL-Max-3.23.50 ou plus récent, ou
MySQL-4.0.2 ou plus récent, qui utilisent l'attribut
autoextend.
Cet exemple devrait convenir à une majorité d'utilisateurs, Unix
et Windows, qui ne souhaitent pas répartir leur fichiers de
données InnoDB et leurs logs sur plusieurs
disques. Cette configuration crée un fichier de données
auto-croissant, appelé ibdata1 et deux
fichiers de log InnoDB
ib_logfile0 et
ib_logfile1 dans le dossier de données
MySQL. De plus, le petit fichier d'archive
InnoDB
ib_arch_log_0000000000 sera placé dans
datadir.
[mysqld] # Vous pouvez placer d'autres options MYSQL ici # ... # Le fichier de données doit contenir vos données et index. # Assurez vous que vous avez l'espace disque nécessaire. innodb_data_file_path = ibdata1:10M:autoextend # # Utilisez un buffer de taille 50 à 80 % de votre mémoire serveur set-variable = innodb_buffer_pool_size=70M set-variable = innodb_additional_mem_pool_size=10M # # Utiisez un fichier de log de taille 25 % du buffer mémoire set-variable = innodb_log_file_size=20M set-variable = innodb_log_buffer_size=8M # innodb_flush_log_at_trx_commit=1
Vérifiez que le serveur MySQL a les droits de créer ces fichiers
dans le datadir. Plus généralement, le
serveur doit avoir les droits d'accès dans les dossiers où il va
créer des fichiers, de données ou de log.
Notez que le fichier de données doit être inférieure à 2 Go sur certains systèmes d'exploitation. La taille combinée des fichiers de log doit être inférieure à 4 Go. La taille combinée des fichiers de données doit être inférieure à 10 Go.
Lorsque vous créez pour la première fois une base de données
InnoDB, il est mieux de lancer le serveur
depuis la commande en ligne. InnoDB va afficher
des informations sur la création de la base, et vous verrez
commence ¸a se passe. Voyez la section plus bas, pour une
illustration. Par exemple, sous Windows, vous pouvez démarrer
mysqld-max.exe, qui est stocké dans
C:\mysql\bin, vous pouvez le démarrer comme
ceci :
C:\> C:\mysql\bin\mysqld-max --console
Si vous n'envoyez par de données sur l'écran, vérifiez le
fichier de log pour savoir ce que InnoDB a
indiqué durant le lancement.
Voyez Section 15.6, « Créer des bases InnoDB » pour un exemple des
informations affichées par InnoDB.
Où mettre le fichier d'options sous Windows? Les règles sous Windows sont les suivantes :
Un seul des deux fichiers my.cnf ou
my.ini doit être créé.
Le fichier my.cnf doit être placé dans
le dossier racine du disque C:.
Le fichier my.ini doit être placé dans
le dossier WINDIR, e.g,
C:\WINDOWS ou
C:\WINNT. Vous pouvez utiliser la
commande SET de MS-DOS pour afficher la
valeur de WINDIR :
C:\> SET WINDIR
windir=C:\WINNT
Si votre PC utilise un gestionnaire de démarrage où le
C: n'est pas votre disque de démarrage,
alors votre seule option est d'utilise le fichier
my.ini.
Où placer les fichiers d'options sous
Unix? Sous Unix, mysqld lit les
options dans les fichiers suivants, s'ils existent, et dans cet
ordre :
/etc/my.cnf Options globales.
COMPILATION_DATADIR/my.cnf Options
spécifiques au serveur.
defaults-extra-file Le fichier spécifié
avec --defaults-extra-file=....
~/.my.cnf Options spécifiques à
l'utilisateur.
COMPILATION_DATADIR est le dossier de
données de MySQL qui a été spécifié lors de l'utilisation du
script ./configure, avant la compilation de
mysqld. (typiquement,
/usr/local/mysql/data pour une installation
binaire, ou /usr/local/var pour une
installation source).
Si vous voulez vous assurer que mysqld lit les
options uniquement depuis un fichier spécifique, vous pouvez
utiliser l'option --defaults-option comme
première option de ligne de commande, au démarrage du serveur :
mysqld --defaults-file=your_path_to_my_cnf
Exemple de fichier
my.cnf complexe : supposons que
vous avez un serveur Linux avec 2 Go de RAM et trois disques de 60
Go (situés dans les dossiers /,
/dr2 et /dr3. Voici
ci-dessous un exemple de configuration possible pour
my.cnf, de InnoDB.
[mysqld] # Vous pouvez placer d'autres options MYSQL ici # ... innodb_data_home_dir = # # Le fichier de données doivent contenir vos données et index. innodb_data_file_path = /ibdata/ibdata1:2000M;/dr2/ibdata/ibdata2:2000M:autoextend # # Utilisez un buffer de taille 50 à 80 % de votre mémoire serveur # mais assurez vous sous Linux que l'utilisation totale est inférieure à 2 Go set-variable = innodb_buffer_pool_size=1G set-variable = innodb_additional_mem_pool_size=20M innodb_log_group_home_dir = /dr3/iblogs # # innodb_log_arch_dir doit être le même que innodb_log_group_home_dir # (starting from 4.0.6, you can omit it) innodb_log_arch_dir = /dr3/iblogs set-variable = innodb_log_files_in_group=2 # # Utilisez un fichier de log de taille 15 % du buffer mémoire set-variable = innodb_log_file_size=250M set-variable = innodb_log_buffer_size=8M # innodb_flush_log_at_trx_commit=1 set-variable = innodb_lock_wait_timeout=50 # # Décommentez les prochaines lignes, si vous voulez les utiliser #innodb_flush_method=fdatasync #set-variable = innodb_thread_concurrency=5
Notez que nous avons placé deux fichier de données sur des
disques différents. InnoDB va remplir l'espace
de tables jusqu'au maximum. Dans certains cas, les performances
seront améliorées si les données ne sont pas toutes placées
sur le même disque physique. Placer les fichiers de log dans des
disques séparés est souvent une bonne chose. Vous pouvez aussi
utiliser des partitions de disques brutes (raw
devices) comme fichier de données. See
Section 15.15.2, « Utiliser les raw devices pour l'espace de tables ».
Attention : en Linux x86, vous
devez être très prudent, et ne pas utiliser trop de mémoire.
glibc va autoriser les processus à dépasser
la pile de thread, et votre système va planter. Cela représente
un risque réel si la valeur de 2 Go :
innodb_buffer_pool_size + key_buffer_size + max_connections*(sort_buffer_size+read_buffer_size+binlog_cache_size) + max_connections*2MB
Chaque thread va utiliser une pile (souvent 2 Mo, mais les
exécutables MySQL uniquement 256 ko) et dans le pire des
scénarios, sort_buffer + read_buffer_size de
mémoire supplémentaire.
Depuis MySQL 4.1, vous pouvez utiliser 64 Go de mémoire physique
sur Windows 32 bits. Voyez la description de
innodb_buffer_pool_awe_mem_mb dans
Section 15.5, « Options de démarrage InnoDB ».
Comment optimiser d'autres paramètres du
serveur mysqld? Les valeurs qui
conviennent à la majorité des utilisateurs sont :
[mysqld] skip-external-locking set-variable = max_connections=200 set-variable = read_buffer_size=1M set-variable = sort_buffer_size=1M # key_buffer vaut de 5 à 50% # de la RAM disponible, suivant l'utilisation des # tables MyISAM, mais gardez # key_buffer + InnoDB en de¸a de < 80% de votre RAM set-variable = key_buffer_size=...
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.
