����λ�ã���ҳ > �����̳� > �̳� > Mysqlƪ-������־

Mysqlƪ-������־

��Դ������������|��ʱ�䣺2024-11-14 10:17:27 |���Ķ���67��|�� ��ǩ�� S �� |����������

���� undo log���ع���־������ Innodb �洢��������ɵ���־��ʵ���������е�ԭ���ԣ���Ҫ��������ع��� MVCC�� redo log��������־������ Innodb �洢��������ɵ���־��ʵ���������еij־��ԣ���Ҫ���ڵ���ȹ��ϻָ��� binlog ���鵵��־������ Server ������

����

  • undo log���ع���־������ Innodb �洢��������ɵ���־��ʵ���������е� ԭ���� ����Ҫ��������ع��� MVCC��
  • redo log��������־������ Innodb �洢��������ɵ���־��ʵ���������е� �־��� ����Ҫ���ڵ���ȹ��ϻָ���
  • binlog ���鵵��־������ Server �����ɵ���־����Ҫ�������ݱ��ݺ����Ӹ��ƣ�

�ع���־��undo log��

����

  • ������������֮ǰ�����ݵ�һ���汾���������ڻع�������ԭ����
  • ʵ�ֶ�汾���������µĶ���MVCC���Ĺؼ�����֮һ��Ҳ������������MVCCͨ��Read View + undolog�İ汾��ʵ�֣����Ծ��忴 MVCC�Ŀ��ն�

����

�߼���ʽ����־����ִ�� undo ��ʱ�򣬽����ǽ����ݴ��߼��ϻָ�������֮ǰ��״̬�������Ǵ�����ҳ���ϲ���ʵ�ֵģ���һ���Dz�ͬ��redo log �ġ�

ÿ�� InnoDB �����һ����¼���в������޸ġ�ɾ����������ʱ��Ҫ�ѻع�ʱ��Ҫ����Ϣ����¼�� undo log ����磺

  • �� ����insert һ����¼ʱ��Ҫ��������¼������ֵ������������֮��ع�ʱֻ��Ҫ���������ֵ��Ӧ�� ��¼ɾ��delete �ͺ��ˣ�
  • �� ɾ��delete һ����¼ʱ��Ҫ��������¼�е����ݶ�������������֮��ع�ʱ�ٰ�����Щ������ɵ� ��¼����insert �����оͺ��ˣ�
  • �� ���� һ����¼ʱ��Ҫ�ѱ����µ��еľ�ֵ������������֮��ع�ʱ�ٰ���Щ�� ����Ϊ��ֵ �ͺ��ˡ�

ʲôʱ�����

����ʼ֮ǰ ��MySQL ���ȼ�¼����ǰ�����ݵ� undo log ��־�ļ����棬������ع�ʱ���������� undo log �����лع���ͬʱundo Ҳ����� redo ����֤undo log�Ŀɿ��ԡ�

Mysqlƪ-Èý´óÈÕÖ¾

ʲôʱ��ˢ��

undo log ������ҳ��ˢ�̲�����һ���ģ�����Ҫͨ�� redo log ��֤�־û�������undo��־��ʱ��ͬ������������ڱ�������־û����Ƶ�redolog�IJ�����

buffer pool ���� undo ҳ���� undo ҳ���޸�Ҳ�����¼�� redo log��redo log ��ÿ��ˢ�̣��ύ����ʱҲ��ˢ�̣�����ҳ�� undo ҳ���ǿ�������Ʊ�֤�־û��ģ����忴�������ݡ�

������־��redo log��

����

  • ȷ������ij־��ԡ�
    • Ϊ�˷�ֹ�ϵ絼�����ݶ�ʧ�����⣬����һ����¼��Ҫ���µ�ʱ��InnoDB ����ͻ��ȸ����ڴ棨ͬʱ���Ϊ��ҳ����Ȼ�󽫱��ζ����ҳ���޸��� redo log ����ʽ��¼���������ʱ����¾�������ˡ�Ҳ����˵�� redo log ��Ϊ�˷�ֹ Buffer Pool �е���ҳ��ʧ����Ƶġ�
    • ������mysql�����ʱ�ò£¬¸ï¿½ï¿½ï¿½redo log�����������Ӷ��ﵽ����ij־�����һ���ԡ�
  • ��д�����ӡ����д������ˡ�˳��д�������� MySQL д����̵����ܡ�

����

������ʽ����־����¼������������ҳ����޸ĵ���Ϣ���� redo log ��˳��д��redo log file �������ļ���ȥ�ġ�ͬʱ�����ڴ��޸� Undo log ��Ҳ��Ҫ��¼undo log��Ӧ�� redo log��

redo log �� undo log ����:

  • redo log ��¼�˴˴����� ��ɺ� ������״̬����¼���Ǹ���֮���ֵ��
  • undo log ��¼�˴˴����� ��ʼǰ ������״̬����¼���Ǹ���֮ǰ��ֵ��

ʲôʱ�����

����ʼ֮��Ͳ���redo log��redo log�����̲���������������ύ��д��ģ������������ִ�й����У��㿪ʼд��redo log�ļ��С�

�����ύ֮ǰ�����˱������������ͨ�� undo log �ع����������ύ֮�����˱������������ͨ�� redo log �ָ���������ͼ��
Mysqlƪ-Èý´óÈÕÖ¾

redo log Ҫд�����̣�����ҲҪд���̣�ΪʲôҪ���һ�٣�

д�� redo log �ķ�ʽʹ����׷�Ӳ����� ���Դ��̲�����˳��д����д��������Ҫ���ҵ�д��λ�ã�Ȼ���д�����̣����Դ��̲��������д�����̵ġ�˳��д ���ȡ����д�� ��Ч�Ķ࣬��� redo log д����̵Ŀ�����С��

ʲôʱ��ˢ��

ʵ���ϣ� ִ��һ������Ĺ����У������� redo log Ҳ����ֱ��д����̵ģ���Ϊ��������������� I/O ���������Ҵ��̵������ٶ�Զ�����ڴ档

redo log��һ�������� Innodb_log_buffer��Innodb_log_buffer ��Ĭ�ϴ�СΪ 16M��ÿ������һ�� redo log ʱ������д�뵽 redo log buffer�������ٳ־û������̡�

Mysqlƪ-Èý´óÈÕÖ¾

Ȼ���ͨ���������ַ�ʽ��innodb log buffer����־ˢ�µ�����:

  • MySQL �����ر�ʱ��
  • �� redo log buffer �м�¼��д�������� redo log buffer �ڴ�ռ��һ��ʱ���ᴥ�����̣�
  • InnoDB �ĺ�̨�߳�ÿ�� 1 �룬�� redo log buffer �־û������̡�
  • ÿ�������ύʱ���������� redo log buffer ��� redo log ֱ�ӳ־û������̡�

���redo log buffer��д�̣�����һ��������������ύ��д��redo log�ļ��ģ�������������Ŀ�ʼ���𲽿�ʼ�ġ�

��ʹij������û���ύ��Innodb�洢������Ȼÿ��Ὣredo log bufferˢ�µ�redo log�ļ���

��һ���DZ���Ҫ֪���ģ���Ϊ����Ժܺõؽ����ٴ��������ύ��commit����ʱ��Ҳ�Ǻܶ��ݵġ�

redolog���ļ�

���� redo ��־���ļ����� ��ib_logfile0 �� ib_logfile1��

redo log�ļ�������ѭ��д�ķ�ʽ�����ģ� InnoDB �洢�������д ib_logfile0 �ļ����� ib_logfile0 �ļ���д����ʱ�򣬻��л��� ib_logfile1 �ļ����� ib_logfile1 �ļ�Ҳ��д��ʱ�����л��� ib_logfile0 �ļ����൱��һ�����Ρ�

Mysqlƪ-Èý´óÈÕÖ¾

  • write pos �� checkpoint ���ƶ�����˳ʱ�뷽��
  • write pos �� checkpoint ֮��IJ��֣�ͼ�еĺ�ɫ���֣���������¼�µĸ��²�����
  • check point �� write pos ֮��IJ��֣�ͼ����ɫ���֣��������̵�������ҳ��¼��

��ˣ���� write pos ׷���� checkpoint������ζ�� redo log �ļ����ˣ���ʱ MySQL ������ִ���µĸ��²�����Ҳ����˵ MySQL �ᱻ����

��������־��binlog��

����

  • ���ڸ��ƣ������Ӹ����У��ӿ����������ϵ�binlog�����طţ�ʵ������ͬ����
  • �������ݿ�Ļ���ʱ���Ļ�ԭ�������ݻָ�

����

binlog �� 3 �ָ�ʽ���ͣ��ֱ��� STATEMENT��Ĭ�ϸ�ʽ����ROW�� MIXED���������£�

  • STATEMENT��ÿһ���޸����ݵ� SQL ���ᱻ��¼�� binlog �У��൱�ڼ�¼���߼�����������������ָ�ʽ�� binlog ���Գ�Ϊ�߼���־�������Ӹ����� slave ���ٸ��� SQL ������֡��� STATEMENT �ж�̬���������⣬���������� uuid ���� now ��Щ����������������ִ�еĽ�����������ڴӿ�ִ�еĽ����������ʱ�ڱ�ĺ����ᵼ�¸��Ƶ����ݲ�һ�£�
  • ROW����¼���������ձ��޸ij�ʲô���ˣ����ָ�ʽ����־���Ͳ��ܳ�Ϊ�߼���־�ˣ���������� STATEMENT �¶�̬���������⡣�� ROW ��ȱ����ÿ�����ݵı仯������ᱻ��¼������ִ������ update ��䣬���¶��������ݾͻ������������¼��ʹ binlog �ļ����󣬶��� STATEMENT ��ʽ��ֻ���¼һ�� update �����ѣ�
  • MIXED�������� STATEMENT �� ROW ģʽ��������ݲ�ͬ������Զ�ʹ�� ROW ģʽ�� STATEMENT ģʽ��

ע�⣺��ͬ����־���������Ӹ����³����ж�̬���������⣬ͬ���ԶԸ���ʱ��Ҳ��Ӱ�졣һ����˵�����ݿ��е�update_time�������ó�ON UPDATE CURRENT_TIMESTAMP�����Զ�����ʱ����С������Ӹ����£�
�����־��ʽ������STATEMENT�����ڼ�¼����sql��䣬��salve���ǽ�������طţ���ô����ʱ��Ҳ���ط�ʱ��ʱ�䣬��ʱslave����ʱ���ӳٵ����⣻
�����־��ʽ������ROW�����Ǽ�¼���������ձ��޸ij�ʲô���ˣ����ִӿ��������������������ȫһ�µġ�

ʲôʱ�����

���� �ύ��ʱ�� ��һ���Խ������е�sql��䣨һ��������ܶ�Ӧ���sql��䣩����һ���ĸ�ʽ��¼��binlog�С�

binlog �ļ��Ǽ�¼���������ݿ���ṹ����ͱ������޸ĵ���־�������¼��ѯ��IJ��������� SELECT �� SHOW ������

������redo log�����ԵIJ������binlog ��׷��д��д��һ���ļ����ʹ���һ���µ��ļ�����д�����Ḳ����ǰ����־���������ȫ������־��redo log ��ѭ��д����־�ռ��С�ǹ̶���ȫ��д���ʹ�ͷ��ʼ������δ��ˢ����̵���ҳ��־��

Ҳ����˵�������С���������ݿ�����ݱ�ɾ���ˣ�ֻ��ʹ�� bin log �ļ��ָ����ݡ���Ϊredo logѭ��д��������ݡ�

���Ӹ��Ƶ�ʵ��

MySQL �����Ӹ��������� binlog ��Ҳ���Ǽ�¼ MySQL �ϵ����б仯���Զ�������ʽ�����ڴ����ϡ����ƵĹ��̾��ǽ� binlog �е����ݴ����⴫�䵽�ӿ��ϡ�

�������һ�����첽�ģ�Ҳ����������ִ������������̲߳���ȴ����� binlog ���߳�ͬ����ɡ�
Mysqlƪ-Èý´óÈÕÖ¾

MySQL ��Ⱥ�����Ӹ��ƹ������£�

  • � Binlog��MySQL �������յ��ͻ����ύ���������֮�󣬻���д�� binlog�����ύ���ñ£¬¸ï¿½ï¿½Â´æ´¢ï¿½ï¿½ï¿½ï¿½ï¿½Ðµï¿½ï¿½ï¿½ï¿½Ý£ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½á½»ï¿½ï¿½Éºó£¬·ï¿½ï¿½Ø¸ï¿½ï¿½Í»ï¿½ï¿½Ë¡ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½É¹ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ó¦ï¿½ï¿½
  • ͬ�� Binlog���ӿ�ᴴ��һ��ר�ŵ� I/O �̣߳���������� log dump �̣߳������������ binlog ��־���ٰ� binlog ��Ϣд�� relay log ���м���־��ٷ��ظ����⡰���Ƴɹ�������Ӧ��
  • �ط� Binlog���ӿ�ᴴ��һ�����ڻط� binlog ���̣߳�ȥ�� relay log �м���־��Ȼ��ط� binlog ���´洢�����е����ݣ�����ʵ�����ӵ�����һ���ԡ�

ʲôʱ��ˢ��

��ˢ��ʱ������redolog��һ����redolog��ʹ����û�ύ��Ҳ����ÿ��1���ˢ�̡�����һ������� binlog �Dz��ܱ��𿪵ģ����������������ж�󣨱����кܶ�����䣩��ҲҪ��֤һ����д�롣���һ������� binlog ���𿪵�ʱ���ڱ���ִ�оͻᱻ�����������ֶ����У��������ƻ���ԭ���ԣ���������ġ�

bin log��־��redo log���ƣ�Ҳ�ж�Ӧ�Ļ��棬�� binlog cache�������ύ��ʱ���ٰ� binlog cache д�� binlog �ļ��С�
Mysqlƪ-Èý´óÈÕÖ¾

  • ͼ�е� write��ָ�ľ���ָ����־д�뵽 binlog �ļ������Dz�û�а����ݳ־û������̣���Ϊ���ݻ��������ļ�ϵͳ�� page cache �write ��д���ٶȻ��DZȽϿ�ģ���Ϊ���漰���� I/O��
  • ͼ�е� fsync�����ǽ����ݳ־û������̵IJ���������ͻ��漰���� I/O������Ƶ���� fsync �ᵼ�´��̵� I/O ���ߡ�

MySQL�ṩһ�� sync_binlog �������������ݿ�� binlog ˢ�������ϵ�Ƶ�ʣ�

  • sync_binlog = 0 ��ʱ�ò£¬±ï¿½Ê¾Ã¿ï¿½ï¿½ï¿½á½»ï¿½ï¿½ï¿½ï¿½Ö» write���� fsync���������ɲ���ϵͳ������ʱ�����ݳ־û������̣�
  • sync_binlog = 1 ��ʱ�ò£¬±ï¿½Ê¾Ã¿ï¿½ï¿½ï¿½á½»ï¿½ï¿½ï¿½ñ¶¼»ï¿½ write��Ȼ������ִ�� fsync��
  • sync_binlog =N(N>1) ��ʱ�ò£¬±ï¿½Ê¾Ã¿ï¿½ï¿½ï¿½á½»ï¿½ï¿½ï¿½ï¿½ write�����ۻ� N �������� fsync��

��Ȼ����MySQL��ϵͳĬ�ϵ������� sync_binlog = 0��Ҳ���Dz����κ�ǿ���ԵĴ���ˢ��ָ���ʱ�����������õģ����Ƿ���Ҳ�����ġ���Ϊһ�����������쳣��������û�־û������̵����ݾͻᶪʧ��

���� sync_binlog ����Ϊ 1 ��ʱ�����ȫ������������������á���Ϊ������Ϊ 1 ��ʱ�򣬼�ʹ���������쳣��������ඪʧһ������� binlog�����Ѿ��־û������̵����ݾͲ�����Ӱ�죬�������Ƕ�д������Ӱ��̫��

���������������� binlog ��־��ʧ�ķ��գ�Ϊ�����д������ܣ�һ��� sync_binlog ����Ϊ 100~1000 �е�ij����ֵ��

���׶��ύ

�����ύ��redo log �� binlog ��Ҫ�־û������̣������������Ƕ������߼������ܳ��ְ�ɹ���״̬�����������������־֮����߼���һ�¡����£�

  1. ����ڽ� redo log ˢ�뵽����֮�� MySQL ͻȻ崻��ˣ��� binlog ��û�����ü�д�롣��ô������������̨������ͨ��redo log�ָ����ݣ��������ʱ��binlog��û�м�¼�����ݣ��������л������ݵ�ʱ�򣬾ͻᶪʧ��һ�����ݣ�ͬʱ����ͬ��Ҳ�ᶪʧ��һ�����ݡ�
  2. ����ڽ� binlog ˢ�뵽����֮�� MySQL ͻȻ崻��ˣ��� redo log ��û�����ü�д�롣���� redo log ��ûд�������ָ��Ժ����������Ч���� binlog �����¼������������䣬�����Ӽܹ��У�binlog �ᱻ���Ƶ��ӿ⣬�ӿ�ִ��������������䣬��ô���������ֵ��һ���ԣ�

���׶��ύ�ѵ���������ύ��ֳ��� 2 ���׶Σ��ֱ��ǡ�׼����Prepare���׶Ρ��͡��ύ��Commit���׶Ρ�

�������

Mysqlƪ-Èý´óÈÕÖ¾
������ύ�����������׶Σ����ǽ� redo log ��д�������������裺prepare �� commit���м��ٴ���д��binlog���������£�

  • prepare �׶Σ��� XID���ڲ� XA ����� ID�� д�뵽 redo log��ͬʱ�� redo log ��Ӧ������״̬����Ϊ prepare��Ȼ�� redo log �־û������̣�innodb_flush_log_at_trx_commit = 1 �������
  • commit �׶Σ��� XID д�뵽 binlog��Ȼ�� binlog �־û������̣�sync_binlog = 1 �����ã������ŵ���������ύ����ӿڣ��� redo log ״̬����Ϊ commit����ʱ��״̬������Ҫ�־û������̣�ֻ��Ҫ write ���ļ�ϵͳ�� page cache �о͹��ˣ���ΪֻҪ binlog д���̳ɹ������� redo log ��״̬���� prepare Ҳû�й�ϵ��һ���ᱻ��Ϊ�����Ѿ�ִ�гɹ���

�ܵ���˵���ǣ������ύ��redo log���prepare �׶Σ���д��binlog�����سɹ���redo log ����commit �׶Ρ�

�ܽ�������־�ľ�������

���Ż����������ɱ���С��ִ�мƻ���ִ�����Ͱ���ִ�мƻ���ʼ���и��²�����

�������һ����¼ UPDATE t_user SET name = 'xiaolin' WHERE id = 1; ����������:

  1. ����ڲ���buffer Pool�� ִ�����������ִ�У�����ô洢����Ľӿڣ�ͨ������������������ȡ id = 1 ��һ�м�¼��
    • ��� id=1 ��һ�����ڵ�����ҳ�������� buffer pool �У���ֱ�ӷ��ظ�ִ�������£�
    • �����¼���� buffer pool��������ҳ�Ӵ��̶��뵽 buffer pool�����ؼ�¼��ִ������
  2. ����Ƿ��Ѿ���Ҫ���µ�ֵ��ִ�����õ��۴�������¼�󣬻ῴһ�¸���ǰ�ļ�¼�͸��º�ļ�¼�Ƿ�һ����
    • ���һ���Ļ��Ͳ����к����������̣�
    • �����һ���Ļ��ͰѸ���ǰ�ļ�¼�͸��º�ļ�¼�������������� InnoDB �㣬�� InnoDB ������ִ�и��¼�¼�IJ�����
  3. �������񣬼�¼undo log������¼�޸�undo log��Ӧ��redo log���������� InnoDB ����¼�¼ǰ������Ҫ��¼��Ӧ�� undo log����Ϊ���Ǹ��²�������Ҫ�ѱ����µ��еľ�ֵ��������Ҳ����Ҫ����һ�� undo log��undo log ��д�� Buffer Pool �е� Undo ҳ�棬�������ڴ��޸ĸ� Undo ҳ�����Ҫ��¼��Ӧ�� redo log��
  4. ���Ϊ��ҳ����д��redo log��InnoDB �㿪ʼ���¼�¼�����ȸ����ڴ棨ͬʱ���Ϊ��ҳ����Ȼ�󽫼�¼д�� redo log ���棬���ʱ����¾�������ˡ�Ϊ�˼��ٴ���I/O��������������ҳд����̣������ɺ�̨�߳�ѡ��һ�����ʵ�ʱ������ҳд�뵽���̡������ WAL ������MySQL ��д��������������д�������ϣ�������д redo ��־��Ȼ���ں��ʵ�ʱ���ٽ��޸ĵ�������д�������ϡ�
  5. ���ˣ�һ����¼�������ˡ�
  6. ��¼binlog����һ���������ִ����ɺ�Ȼ��ʼ��¼������Ӧ�� binlog����ʱ��¼�� binlog �ᱻ���浽 binlog cache����û��ˢ�µ�Ӳ���ϵ� binlog �ļ����������ύʱ�Ż�ͳһ�����������й����е����� binlog ˢ�µ�Ӳ�̡�
  7. �����ύ��redo log��binlogˢ�̡�

������ר��

Java������ר�� �����ߣ���ӭ���ʡ�

  • ����㲻֪��������ôд��������Ŀ��֪����ô��װ��
  • �����������Щ�����㲻֪���ò���д��ȥ��
  • �����Щ�ۺ��������㲻֪����ô��

��ô����˽���ң��һᾡ�����ܰ����㡣

С���Ƽ��Ķ�

�������������Ľ�Ϊ������Ϣ����������������ͬ���޹۵��֤ʵ��������

�����Ƶ����

����

ͬ������

����

ɨ��ά�����������ֻ��汾��

ɨ��ά����������΢�Ź��ںţ�

��վ�������������������ϴ��������ַ���İ�Ȩ���뷢�ʼ�[email protected]

��ICP��2022002427��-10 �湫��������43070202000427��© 2013~2025 haote.com ������