MySQL是先写入数据还是写log
答案
在MySQL中,先写入日志(Redo Log和Binary Log)是比先写入数据文件更为常见的做法。
先写入Redo Log
当执行事务提交时,MySQL首先将事务的修改操作记录到Redo Log中,然后异步地将这些修改操作刷新到磁盘的数据文件。
这种方式被称为"write-ahead logging"(预写式日志)策略。
这样做的好处是在事务提交后,即使数据尚未完全写入数据文件,但通过Redo Log的信息,可以保证事务的持久性。
先写入Binary Log
对于主从复制、数据复制和数据备份等功能,MySQL会先将修改操作记录到Binary Log中。Binary Log记录了所有对数据库的修改操作,以二进制格式存储,用于数据的复制和恢复。
在执行事务提交时,会先写入Binary Log,然后再写入数据文件。这样,在主从复制的场景下,从服务器可以通过读取Binary Log中的修改操作,实时复制主服务器上的数据变更,保持主从数据库的一致性。
结论
所以,在绝大多数情况下,MySQL的写入流程是先写入日志,再写入数据文件。这种策略能够确保数据的一致性和持久性,并提供了数据复制和恢复的功能。