information_schema 没有在磁盘上的物理文件,是一些内存表
谈到mysql体系结构,首先需要谈一下关系型数据库共性(mysql && oracle):
客户端 à 服务器 à 存储机制
以oracle来讲:
1.实例:
1)内存:
SGA:shared pool (librarycache,dict cache,目的是加速),buffer cache (数据块,读时直接在内存读数据,写数据,由后台进程负责定期刷盘,如果没刷到磁盘时崩溃,由WAL:write ahead logging机制保证数据不丢失),large pool (rman用),java pool,stream pool,log buffer(加速到redo的读取) 全局共享,多个进程并发访问时产生lock,LATCH争用
PGA:用户进程内存
UGA:与会话相关的,可能在PGA,也可能在SGA内
2)后台进程
SMON:系统监控,实例恢复,资源回收
CKPT 让三大文件保持一致
DBWRn:写内存脏数据到磁盘
LGWR:写redo到磁盘 ARCn:
2.文件:
dbf,redo,ora参数文件,ctl,passwd,trace
oracle的三大文件:必须要保证一致,包含scn,否则启动时要做实例恢复
lock:保护数据
latch :保护内存结构用的
mysql: 实例+文件
实例:
1) 内存: 服务层内存+存储引擎内存
服务器层内存:
net buffer
thread cache
query cache
table cache
binlog cache
thread stack
sort_buffer
read_buffer
join_buffer 涉及到的地方在内存结构部分说
引擎层内存(决定数据怎么存):
Innodb:
innodb_buffer_pool
innodb_log_buffer
innodb_additional_mem_pool_size
myISAM:
key buffer
bulk_insert_buffer
2)后台线程:与客户端连接对应,共享一个进程,只有一个进程mysqld
包括服务器线程和存储引擎线程
innodb:主线程(main thread),logthread,insert buffer thread,io thread --5.1只有4个线程,由主线程调度其它3个线程干活。
write read thread,pageclean,GC,purge,buffer pool dump --5.6增加了许多后台进程,分工越来越细
文件(与oracle相对的是数据文件与redo文件)
1) 普通文件:mysql.err
mysql.log
slow.log
mysql-bin.0001
mysql-bin.iddex
relay-log
t1.frm
t1.ibd
t1.MYI
t1.MYD
ib_logfile0
ibdata1
master.info
pid文件
socket文件
my.cnf
2) 客户端工具:
Mysql
Mysqldump
Mysqlbinlog
Mysqladmin
Innobackupex
trabackup
oltp VS olap
OLTP:onlinetransaction process :电商、游戏平台、交易平台、支付系统、票务、论坛、微博、社区、贴吧。。。
读写比:<13:1 ,用户并发高,事务较多,单次访问数据量较小
OLAP:online analysis platform:数据仓库、DSS
读写比很高,用户并发少、几乎无事务、单次访问数据量较大
binlog# at 4896417 (字节偏移量)
#160404 23:02:33 server id 1 end_log_pos 4896514(结束偏移量) Query thread_id=492 (哪个ID发出的语句) exec_time=0 error_code=0
SET TIMESTAMP=1459782153/*!*/;unix时间戳
DELETE from test02 where id=495031
/*!*/;
select unix_timestamp(now());