J'ai installé un cluster mysql avec Innodb (Innodb_File_Per_Table activé ultérieurement), mais depuis que je suis passée à innodb_file_per_table, le fichier ibdata1 grandit (2 Go par mois).
my.cnf
fichier est correct?Configuration du serveur :
Debian 6 AMD64
mySQL-Client-5.1 5.1.61-0 + Squeeze1
mon fichier de configuration innodb :
#
# * InnoDB
#
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
#
innodb_data_home_dir = /var/lib/mysql
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /var/lib/mysql
innodb_file_per_table
innodb_buffer_pool_size = 5G
innodb_additional_mem_pool_size = 48M
innodb_log_files_in_group = 3
innodb_log_file_size = 512M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 0
innodb_lock_wait_timeout = 50
innodb_thread_concurrency = 15
innodb_flush_method = O_DIRECT
Procédure :
1) Dump All DB's
2) Stop MySQL
3) Add "innodb_file_per_table"
4) Delete all ib* file
5) Start MySQL
6) Import All DB's
InnoDb Conf :
mysql> show variables like 'innodb%';
+-----------------------------------------+------------------------+
| Variable_name | Value |
+-----------------------------------------+------------------------+
| innodb_adaptive_hash_index | ON |
| innodb_additional_mem_pool_size | 50331648 |
| innodb_autoextend_increment | 8 |
| innodb_autoinc_lock_mode | 1 |
| innodb_buffer_pool_size | 25165824000 |
| innodb_checksums | ON |
| innodb_commit_concurrency | 0 |
| innodb_concurrency_tickets | 500 |
| innodb_data_file_path | ibdata1:10M:autoextend |
| innodb_data_home_dir | /var/lib/mysql |
| innodb_doublewrite | ON |
| innodb_fast_shutdown | 1 |
| innodb_file_io_threads | 4 |
| innodb_file_per_table | ON |
| innodb_flush_log_at_trx_commit | 0 |
| innodb_flush_method | O_DIRECT |
| innodb_force_recovery | 0 |
| innodb_lock_wait_timeout | 50 |
| innodb_locks_unsafe_for_binlog | OFF |
| innodb_log_buffer_size | 8388608 |
| innodb_log_file_size | 536870912 |
| innodb_log_files_in_group | 3 |
| innodb_log_group_home_dir | /var/lib/mysql |
| innodb_max_dirty_pages_pct | 90 |
| innodb_max_purge_lag | 0 |
| innodb_mirrored_log_groups | 1 |
| innodb_open_files | 300 |
| innodb_rollback_on_timeout | OFF |
| innodb_stats_method | nulls_equal |
| innodb_stats_on_metadata | ON |
| innodb_support_xa | ON |
| innodb_sync_spin_loops | 20 |
| innodb_table_locks | ON |
| innodb_thread_concurrency | 15 |
| innodb_thread_sleep_delay | 10000 |
| innodb_use_legacy_cardinality_algorithm | ON |
+-----------------------------------------+------------------------+
ibdata1 peut toujours grandir malgré ((( innodb_file_per_table étant activé. Pourquoi ?
Question: Si des tables et des indices associatifs InnoDB sont écrits dans des fichiers d'espace de table individuels (extension de fichier .ibd
), quelles informations doivent encore être écrites à ibdata1
?
Réponse: Voici les catégories d'informations suivantes écrites sur la table de table de l'innoDB:
ibdata1
J'en ai discuté avant:
Dec 09, 2011
: Quel est le meilleur moyen de réduire la taille d'Ibdata dans MySQL?Apr 01, 2012
: est innodb_file_per_table conseillé?Mar 25, 2012
: Pourquoi InnoDB stocke toutes les bases de données dans un fichier?Compte tenu de suffisamment de transactions, de segments de restauration et de journaux annulaires pour prendre en charge les lectures répétables peuvent faire grandir IBDATA1. Les insertions et les mises à jour des tables InnoDB avec des index secondaires peuvent s'accumuler dans le tampon d'insertion. Le tampon à double écriture fournit un deuxième niveau de redondance de données en cas de crash et de récupération ultérieure de l'accident sur MySQLD Startup. La seule chose qui ne peut jamais augmenter est le dictionnaire de données (sauf si vous avez des instructions DDL pour créer de nouvelles tables InnoDB).
Vérifiez le statut InnoDB pour les transactions à long terme car ils peuvent gonfler ibdata1 fichier. Si vous avez changé en Innodb_File_Per_Table après avoir fonctionné pendant un certain temps, sans que les tables existantes y écrivent toujours. INNODB_FILE_PER_TABLE continuera à écrire sur l'espace de la table global, sauf si vous 1. Dump and Recharge, 2. Non-OP Alter. De nouvelles tables créées après la modification de configuration auront leur propre espace de table.