mysql复制流程
master的log thread将数据改变写入到binlog里
--->slave通过i/o thread发请求,master的binlog dump thread将binary log events传送给slave,slave的i/o thread将其写到relay log里
--->slave的sql thread将relay log apply到库里
MySQL如何保证和监控主从数据一致性的
5.6 GTID复制,
5.7 无损半同步复制(rpl_semi_sync_master_wait_point:after_sync)
pt-table-checksum监控主从数据一致性
MySQL如何监控和减少主从延迟的
5.5的单线程复制--->5.6的多库复制--->5.7的多线程复制
pt-heartbeat 监控mysql主从同步延迟
Myisam和Innodb的区别:
1.事务性
2.innodb锁粒度更细,myisam表级锁,innodb行级锁,并发性更高
3.innodb支持MVCC(多版本并发控制)
4.innodb支持外键(但是不建议用)
5.表类型 innodb是iot,myisam是堆表
6.myisam会使用一个变量保存表的行数
7.innodb必须有主键(没有的话innodb也会自动创建一个自增列作为主键)
innodb四大特性:
1.change buffer
---记录不在内存中的二级索引页的修改,页面读取到内存后再merge
2.double write
----用来解决页断裂的问题,内存中有double write buffer,系统表空间里对应的有连续的128个页(2个extend,2M),其中120个用于批量刷脏,8个用于single page flush
----将随机写变成了顺序写
----内存中脏页--->double write buffer--->系统表空间--->磁盘
----redo log的最小写入单位是512字节=磁盘IO最小单位,所以不会有页断裂问题
3.read ahead
----两种预读算法:
Linear read-ahead:如果InnoDB顺序读取了一个extent的N页,那么innodb会发起一个异步读去读取the entire following extent。由参数innodb_read_ahead_threshold控制页阈值
Random read-ahead:如果一个extent中有13个连续不断的页被加载到buffer pool中,innodb会异步发起一个请求去读取该extent的剩下所有页。由参数innodb_random_read_ahead控制页阈值
4.Adaptive Hash Index
----作用是提高检索效率
Mysql5.6 新增特性:
online ddl、GTID复制、schema级别的多线程复制、memcached NoSQL api、统计信息持久化、buffer pool预热
Mysql5.7 新增特性:
online ddl支持重命名索引和修改varchar大小、对JSON的支持、sys schema、在线修改buffer pool的大小、并行复制、多源复制
varchar(n),int(n):
varchar(n) n代表字符数,mysql行定义长度不能超过65535 latin1 gbk utf8 utf8mb4
int(n) n表示显示长度,与存储长度无关 tinyint1 smallint2 mediumint3 int4 bigint8
innodb日志
redo ---redo log buffer --->ib_logfile
undo ---undo log buffer --->ib_data* 也可以单独指定innodb_undo_directory、innodb_undo_tablespaces
Mysql刷日志规则:
1.innodb_flush_log_at_trx_commit
2.innodb_flush_log_at_timeout控制
3.checkpoint触发
4.log buffer使用内存超过一般
Mysql刷数据页规则:
1.checkpoint触发
innodb_flush_log_at_trx_commit和sync_binlog:
innodb_flush_log_at_trx_commit:log buffer--->os buffer---->ib_logfile
0--->每次提交写log buffer 每秒写入os buffer并调用fsync()落盘
1--->每次提交都落盘
2--->每次提交写到os buffer 每秒调用fsync()落盘
sync_binlog:binlog_cache--->binlog
0--->MySQL不控制binlog的刷新
n--->每n次事务刷新一次
Mysql binlog的格式:
statement、mixed、row
Innodb的事务隔离级别:
读未提交、读已提交、可重复读、串行