做房间预定网站需要什么软件,做网站用什么数据库,网站找到后台了 如何破解账号 密码,品牌推广岗位职责Mysql常见日志
#xff08;1#xff09;错误日志#xff1a;记录数据库服务器启动、停止、运行时存在的问题#xff1b;
#xff08;2#xff09;慢查询日志#xff1a;记录查询时间超过long_query_time的sql语句#xff0c;其中long_query_time可配置#xff0c;且…Mysql常见日志
1错误日志记录数据库服务器启动、停止、运行时存在的问题
2慢查询日志记录查询时间超过long_query_time的sql语句其中long_query_time可配置且慢查询日志默认关闭
3一般查询日志记录数据库的连接信息以及所有的sql语句
4二进制日志即bin log记录所有修改数据库状态的sql语句及这些sql语句的执行时间修改数据库的语句包含了insert、delete、update等操作该日志属于逻辑日志会记录MyISAM、InnoDB引擎数据库的所有修改操作以便进行数据恢复和主从复制该日志仅在事务提交前提交仅写磁盘一次。对于该日志的写入是通过追加的方式进行的不会覆盖已有的内容。
当数据发生丢失后该日志可将数据库恢复到特定的时间点主服务器上的二进制日志可以被从服务器读取从而实现数据同步。该日志包含了二进制索引文件和二进制日志文件两部分
5重做日志即redo log记录了每个对InnoDB表的写操作记录的是数据页的物理变化用来实现事务的持久性。该日志包含了重做日志缓存、重做日志文件两部分前者在内存中后者在磁盘中当事务提交后会把所有修改信息存储到重做日志文件中写入时使用循环写入和擦除的方式进行 6回滚日志即undo log用于记录数据被修改前的信息用于事务回滚实现事务的原子性和持久性也是实现MVCC多版本并发控制的关键部分属于逻辑日志。
当delete一条记录时undo log中会记录一条对应的insert记录回滚时插入这一条被删除的数据反之亦然当update一条记录时它记录一条对应相反的update记录回滚时修改回去。当执行rollback时就可以从undo log中的逻辑记录读取到相应的内容并进行回滚。
MVCC
MVCC是多版本并发控制指维护一个数据库的多个版本使得读写没有冲突解决数据的并发问题。在支持MVCC的数据库中当多个用户访问数据时每个用户都能看到某个时间点前的数据库快照并能够无阻塞、无干扰地执行查询和修改操作MVCC主要通过版本链和ReadView机制实现的。
对于版本链通过隐藏字段实现的。每一行数据都有3个隐藏字段
1DB_TRX_ID保存创建这个版本的事务ID即最后一项修改该记录或插入该记录最新版本的事务ID
2DB_ROLL_PTR回滚指针指向这条记录的上一个版本用于配合undo log
3DB_ROW_ID隐藏主键如果表结构没有指定主键将会生成该隐藏字段。
在undo log日志中存在一个版本链存储数据的旧版本当更新一行数据时不会覆盖原数据而是产生一个新版本的数据并更新DB_TRX_ID、DB_ROLL_PTR插入到版本链中使得其指向前一个版本的数据这样可通过版本链找到旧版本的数据逻辑图如下 ReadView读视图机制用于确定事务的哪些版本的行记录是可见的解决一致性读问题。当事务创建时会为事务创建一个ReadView记录其中包含4个信息
1creator_trx_id创建ReadView的事务id
2m_ids活跃的事务id集合指的是开始但未提交的事务
3min_trx_id活跃事务中最小的事务id即m_ids中最小的事务id
4max_trx_id事务ID的最大值加1即即将创建的事务id。
当一个事务读某条数据时根据ReadView判断数据的某个版本是否可见
1若被访问数据的DB_TRX_ID的值小于min_trx_id则该数据对当前事务可见因为该版本数据已被提交
2若被访问数据的DB_TRX_ID的值大于max_trx_id则该数据对当前事务不可见创建该数据版本的事务在生成ReadView后开始执行的尚未提交
3DB_TRX_ID在min_trx_id与max_trx_id之间时若m_ids中未包含DB_TRX_ID则该版本数据对当前事务可见因为该数据版本的事务在生成ReadView后已提交若包含DB_TRX_ID则该版本数据对当前事务不可见因为该数据版本的事务仍处于活跃状态或在当前事务生成 ReadView后开始。
对于可重复读和读已提交生成ReadView有以下区别
对于可重复读在第一次读取数据时生成一个ReadViewReadView一直保持到事务结束不发生变化这样可以保证在事务中多次读取同一行数据时读取到的数据是一致的。
对于读已提交每次读取数据前都生成一个 ReadView这样就能保证每次读取的数据都是最新的。
主从复制
是一种数据同步机制将数据从一个主数据库复制到多个从数据库广泛用于数据恢复、灾难恢复。
主从复制分为以下几步
1在主数据库中执行数据库修改操作时Insert、Updata、Delete等将这些操作语句写入到bin log二进制日志在这些操作完成后主数据库的log dump线程将二进制日志中的内容发送给从数据库
2从数据库接收到二进制日志的内容后通过IO线程将其写到从数据库的中继日志中relay log
3从数据库中的sql线程读取中继日志并在本地数据库中执行读取到的sql语句从而改变从数据库中的数据完成同步。