InnoDB In-Memory 架构mysql
Buffer Poolsql
系统变量:innodb_buffer_pool_size数据库
Change Buffer服务器
表:information_schema.innodb_metrics 架构
表:information_schema.innodb_buffer_pages 并发
系统变量:innodb_change_buffering工具
系统变量:innodb_change_buffer_max_sizespa
Adaptive Hash Index日志
系统变量:innodb_adaptive_hash_indexorm
系统变量:innodb_adaptive_hash_index_parts
Log Bugger
系统变量:innodb_log_buffer_size
系统变量:innodb_flush_log_at_timeout
系统变量:innodb_flush_log_at_trx_commit
InnoDB On-Disk 架构
Tables
InnoDB 表能够添加到file-per-table表空间、系统表空间、General 表空间。
内部:InnoDB为每张表添加一条entry到数据字典中。
系统变量:innodb_default_row_format
查看InnoDB表属性:
show table status from test like 't1'\G
select * from information_schema.innodb_tables where name='test/t1'\G
在数据目录外建立表
方法一、CREATE TABLE ... DATA DIRECTORY
注意:加入到innodb_directories,这样若是表须要恢复,MySQL知道表的数据文件在哪。
方法二、看起来像是画蛇添足:CREATE TABLE ... TABLESPACE=innodb_file_per_table DATA DIRECTORY '/exteranl/directory';
方法三、利用外部通用表空间,建立数据目录外的表,好比:
create tablespace ext_gen_tbs add datafile '/exteral/directory/tbs.ibd';
create table t5(col1 int) tablespace=ext_gen_tbs;
利用可传输表空间迁移数据
涉及SQL语句:
目标端:create table ...、alter table ... discard tablespace; alter table ... import tablespace;
源端:flush tables ... for export;
移动或者拷贝InnoDB表
可选方案:
传输表空间、MySQL企业备份(能够用Percona Xtrabackup 替代)、拷贝数据文件、逻辑备份(mysqldump工具)
关于冷备份:
假设服务器硬件出故障:拷贝文件也是能够恢复数据的:
InnoDB系统表空间、InnoDB 日志文件、 MySQL 数据字典、系统表文件、各类系统数据库、业务数据库。
InnoDB处理 Auto-Increment
系统变量:innodb_autoinc_lock_mode 这个系统变量在MySQL 5.7的时候默认值是:1。MySQL 8.0 默认值是2
如今复制更可能是基于行的复制模式,innodb_autoinc_lock_mode=2,虽然在自增值上可能出现GAP,可是RBR模式下,主从节点数据一致性能够保证。只有SBR模式下才会考虑innodb_autoinc_lock_mode=1
注:innodb_autoinc_lock_mode=2模式下,table-level AUTO-INC lock不会在Insert-like 语句中添加,增长对表的并发写入。
索引
clustered index 和 secondary index
clustered index 生成方式:若是表中定义了主键,主键就是clustered index。若是表中没有定义主键,第一个unique index 做为clustered index。若是前二者都不知足,InnoDB使用包含行ID的列做为clustered index。这样表数据的排列顺序依赖 row id。而row id是根据行的插入顺序单调递增的。因此表数据排列顺序也是依赖表行的写入顺序。