原書:《mysql技術內幕:InnoDB引擎》
源碼:https://github.com/mysql/mysql-server/tree/8.0/storage/innobase
======================================================
查看mysql使用配置:mysql --help | grep cnf 以最後一個爲準
查看mysql數據文件目錄: show variables like '%datadir%';
查看log路徑:show variables like '%log_err%';
查看base路徑:show variables like '%dir%'; --datadir/basedir
查看binlog: mysqlbinlog /usr/local/var/mysql/binlog.000001
binlog有三種:STATMENT/ROW/MIXED
innodb存儲文件:.ibd
myisam存儲文件 .MYI, .MYD
redo log: ib_logfile0 ib_logfile1
=======================================================
表空間數據文件 /usr/local/var/mysql/ibdata1 存放了各個表的信息。如果啓用了innodb_file_per_table將會爲每個表生成一個表空間。但是每個表空間裏只存儲了索引、數據和插入緩衝,但是撤銷、系統事務、二次寫緩衝還是存在共享的表空間。
表數據文件: xxx.ibd 存放了數據,key等信息
show engines; <=> select * from information_schema.engines;查看mysql支持的引擎信息
delimiter |
create procedure recreate(num int) begin declare idx int default 1; truncate table inc; while idx <= num do insert into inc values(idx, now()); set idx = idx + 1; end while; end;|
delimiter ;
鎖:
select 也可以加鎖:
select * from t where k < 3 for update; --對k小於3的行加上排它鎖;
select * from t where k < 3 lock in share mode; --對k<3的行加上共享鎖;
select * from information_schema.innodb_locks; --查看正在使用的鎖;
事務:
select * from information_schema.innodb_trx; --正在執行的事務