Fur*_*o83 4 mysql innodb ibdata
我已经安装了一个带有 InnoDB 的 MySQL 集群(随后启用了 innodb_file_per_table),但是由于我切换到 innodb_file_per_table,文件 ibdata1 增长(每月 2GB)。
my.cnf文件是否正确?服务器配置:
Debian 6 amd64
mysql-client-5.1 5.1.61-0+squeeze1
我的 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
Run Code Online (Sandbox Code Playgroud)
程序:
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
Run Code Online (Sandbox Code Playgroud)
InnoDB 会议:
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 |
+-----------------------------------------+------------------------+
Run Code Online (Sandbox Code Playgroud)
尽管启用了innodb_file_per_table,ibdata1 仍然可以增长。为什么 ?
问题:如果将 InnoDB 表和关联索引写入单个表空间文件(文件扩展名.ibd),还需要写入哪些信息ibdata1?
答:以下是写入 InnoDB 系统表空间的信息类:
ibdata1我之前讨论过这个:
Dec 09, 2011:在mysql中减少ibdata大小的最佳方法是什么?Apr 01, 2012: innodb_file_per_table 是否可取?Mar 25, 2012:为什么InnoDB 将所有数据库都存储在一个文件中?给定足够的事务,回滚段和撤消日志以支持可重复读取可以使 ibdata1 增长。对具有二级索引的 InnoDB 表的 INSERT 和 UPDATE 可以堆积在插入缓冲区中。双写缓冲区在mysqld启动时发生崩溃和随后的崩溃恢复时提供第二级数据冗余。唯一永远不会增长的是数据字典(除非你有 DDL 语句来创建新的 InnoDB 表)。