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.