在mysql數據庫中,LSN(Log Sequence Number)是指日志序列號,是mysql用于控制事務提交和redo操作的關鍵參數。LSN從邏輯上分成兩個部分,lsn高16位為文件編號,低48位為文件中的偏移量。LSN偏移是指從文件起始位置開始,到當前寫入位置的距離,也可以理解為表示操作日志在文件中的位置。
mysql>SHOW BINARY LOGS; +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000001 | 107374182 | | mysql-bin.000002 | 107374182 | | mysql-bin.000003 | 107374182 | | mysql-bin.000004 | 107374182 | | mysql-bin.000005 | 107374182 | | mysql-bin.000006 | 107374182 | | mysql-bin.000007 | 107374182 | +------------------+-----------+
在上述代碼中,SHOW BINARY LOGS語句查詢到系統中所有的二進制日志文件,其中Log_name列對應文件名,File_size列對應文件大小。對于一個二進制日志文件來說,其在磁盤上的物理位置可以通過這個文件的LSN偏移來計算。可以用下面的公式來計算LSN偏移:
offset = 16 + Log_name_len + pos
具體來說,16為固定的頭部長度,Log_name_len為當前日志文件名的長度,pos為當前日志文件中的當前偏移量。根據上述公式,可以通過已知Log_name和pos來計算具體的LSN偏移。