易陆发现互联网技术论坛

 找回密码
 开始注册
查看: 1383|回复: 4
收起左侧

MySQL/mariadb误删ibdata1 ib_logfile0,ib_logfile1 恢复方法

[复制链接]
发表于 2021-12-15 01:00:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?开始注册

x
MySQL误删ibdata1 ib_logfile0,ib_logfile1 恢复方法:
0 ~( x) A3 h/ m4 |; I4 c7 R
( _* q1 o3 a" b恢复的步骤和数据库版本没有太大关系。
1 D3 t. ^* X  X5 n在linux操作系统中,如果文件从操作系统级别别rm掉,之前打开的文件进程仍持有相应的文件句柄,+ W$ P- z/ w" x, h/ J
所指向的文件仍然可以读写,且该文件的描述符可以从/proc目录中获得(不关闭MySQLd情况下).
( f) B, d6 @) p( @/ K; v
: p( @2 l$ H" \# [3 C7 Q6 w9 b在删除3个文件后,MySQLd 仍是可以运行,对外服务的,MySQL一只保持InnoDB文件打开,因此,
  D+ m  n+ f. d. |- ^  m! E4 K在工作中有必要监控文件是否存在。
% o$ u& i5 C+ `% \! k/ m2 d发现文件被删除之后,不能重启InnoDB,因为启动InnoDB,检测到ibdata1,ib_logfile0,ib_logfile1
- \" I8 [  g/ z不存在,所以,将创建对应的空文件,InnoDB数据字典是空的,InnoDB无法使用原先存在的ibd文件,故,
9 p1 g$ r, i8 W2 h9 H# Z  y& gMySQL不重启,快速恢复删除的文件是可能的。
  Z! s6 H7 ^+ x$ W% ~$ x6 E. D5 p" i, L( o0 C
在MySQLd运行过程中,ibdata1,ib_logfile0,ib_logfile1一直运行在
% d( \( ]5 @! c9 y/proc/mysql.pid/fd目录下,其中vm-mysql.pid是mysql进程的PID,获取方法:
, I- S3 P: g+ V4 J; X! ?[root@mysql ~]# ls -l /proc/$(cat /opt/mysql/data2/mysql.pid)/fd | grep -e ibdata -e ib_
" I! ^1 r+ v  y( y+ \$ a/ a* klrwx------ 1 root root 64 Oct 16 14:16 10 -> /opt/mysql/data2/ib_logfile1 (deleted)4 P& C2 w2 Y! A9 U5 R" L
lrwx------ 1 root root 64 Oct 16 14:16 4 -> /opt/mysql/data2/ibdata1 (deleted)# e5 c1 s4 u; V* s
lrwx------ 1 root root 64 Oct 16 14:16 9 -> /opt/mysql/data2/ib_logfile0 (deleted)- A* N3 y& j3 i+ w+ @: E
4 u, e8 Y) @4 T, W
但是,我们不能简单copy回源目录中,因在buffer pool有已经修改的页,这些页没有被写入磁盘,如果改变的页
8 z! C( I' O; O没有永久写入,数据将会丢失,这些导致数据损坏和丢失。
- }: X# u- N+ H' C3 }: s同样原因,我们不能做MySQL备份,仅能coping那些文件。
: X' ^5 v; D: G! O( Y' W2 @因此,我们必须确保所有的修改全写入磁盘中。
6 x  N) G8 ~; q3 l6 M0 G; S我们现在能做的阻止写,且等待InnoDB刷新所有的页。
6 I. r+ q$ f" v# m7 g1.为了阻止写,我们要么停止应用程序或锁表。6 v4 U3 e1 |& A7 M: Q- @/ U
MariaDB [(none)]> flush tables with read lock;! i0 C/ H' _) w; e& x# Y0 [: s
Query OK, 0 rows affected (0.01 sec)$ D( p1 @! y$ e# i6 Q0 M* [
0 D- D& }2 S; ^/ m  Y2 L) d# k; H
2. show engine innodb status 中脏页刷新到磁盘,
6 U: P' Q! N) N, ^/ E---
4 `0 @  F5 E5 ~5 }: u, m" @2 wLOG
4 d, L) T3 o  p  e4 o7 N( `6 E---
- s9 H( z+ I4 @# p. f* ~Log sequence number 0 50355
) k; `7 H3 F1 J; g) YLog flushed up to   0 50355. T$ ^3 F- o; L# K* d  J9 _
Last checkpoint at  0 50355! z0 `- U% I1 N$ Y( e6 m' w
0 pending log writes, 0 pending chkp writes! S1 [2 E- o4 a, u% U
39 log i/o's done, 0.00 log i/o's/second" ?! U, ?8 ^# h$ ?
' K' R# L8 M" U+ n2 q' x1 D
加速脏页刷新,设置dirty pages percentage to zero:
3 |" b6 D5 D/ }; }) P' X2 BMariaDB [(none)]> set global innodb_max_dirty_pages_pct=0;
5 R; X$ M$ h3 l  ?Query OK, 0 rows affected (0.00 sec)- ?8 S( S& B6 b, s, i7 o1 W

4 ^( h, ]6 e3 M8 V* Q3.确保所有后台进程已经完成自己的工作,也是重要的。
4 k, p3 S/ o$ |; Q注意,插入缓冲线程,它的大小等于1
* E4 R5 ~7 c8 \$ C; O* `-------------------------------------. u& x; R7 n% z$ U9 f
INSERT BUFFER AND ADAPTIVE HASH INDEX
5 |0 r/ Z6 T. d3 s-------------------------------------3 |. r4 n8 b0 \- K1 Q8 Z6 [* R7 A
Ibuf: size 1, free list len 0, seg size 2,
" F% d& |3 \, J" j0 inserts, 0 merged recs, 0 merges5 W7 s! n- \/ {+ o/ V# f; d9 ]
Hash table size 34679, node heap has 1 buffer(s)
# Y( n# g" i0 M0 h1 C! w- ?( {8 S0.00 hash searches/s, 0.00 non-hash searches/s
, \. Q) z) T: z# o; Z: Y* y3 O
! k7 g5 `, s# y. v1 V" b+ D4.后台写进程purge thread,清除所有事务。# m; i6 U5 @4 w- |5 L
------------! Z+ y5 N% j0 W: K8 c; E1 M# Z& r
TRANSACTIONS7 S) |( t; B+ H" d! P! p& |! u
------------
2 \) r' f, {% W! n. U9 I( i8 ]Trx id counter 0 784" Z+ U: g& B7 i) x
Purge done for trx's n:o < 0 0 undo n:o < 0 0
# V8 d1 g4 Q% O但是,如果上次事务没有需要清理操作Trx id计数比较大(如,SELECT),
1 V$ F+ x6 l7 |  f# @; O# l在这种情况下,至少要保证InnoDB不再做任何写动作。: t+ F: N; j9 h* T& |3 }$ {4 X
--------
- K( T* m& ~! H# G* a$ H# V; |7 vFILE I/O, ^5 ~$ _. q/ f! y3 T
--------+ s1 y9 C; n4 ~5 y8 P" g5 A' b
I/O thread 0 state: waiting for i/o request (insert buffer thread)
7 m' U) J6 n. R  p/ KI/O thread 1 state: waiting for i/o request (log thread): ]/ {1 r7 V5 }: \/ |
I/O thread 2 state: waiting for i/o request (read thread)& W; N& ?' E! J, I/ W& V6 h4 f
I/O thread 3 state: waiting for i/o request (write thread)
" d# }3 h6 ^$ \" W8 T( L6 ePending normal aio reads: 0, aio writes: 0,
0 o: A% d5 E' R( v ibuf aio reads: 0, log i/o's: 0, sync i/o's: 0
) ~! P/ K1 L( ~/ ~& vPending flushes (fsync) log: 0; buffer pool: 0
$ K, ?% Q4 y; n1 N4 h/ @1 S( {" j' c0 OS file reads, 81 OS file writes, 59 OS fsyncs
& O5 G9 z( q" D: F0.00 reads/s, 0 avg bytes/read, 0.00 writes/s, 0.00 fsyncs/s
) c1 Q; H% X; \
6 \  I7 E2 K2 `* W$ o3 t1 j7 x; w经历了4步,所有被修改脏页刷新到磁盘,现在开始copy InnoDB 文件到源目录:
5 N2 N3 T& O6 N  Q5 o6 `, S, h[root@mysql ~]# cp /proc/$(cat /opt/mysql/data2/mysql.pid)/fd/4 /opt/mysql/data2/ibdata1
( D; w$ ^& ^0 Y, q2 v! n$ d& J" P[root@mysql ~]# cp /proc/$(cat /opt/mysql/data2/mysql.pid)/fd/9 /opt/mysql/data2/ib_logfile0
3 ^+ X  B- J6 v( ?' \3 S[root@mysql ~]# cp /proc/$(cat /opt/mysql/data2/mysql.pid)/fd/10 /opt/mysql/data2/ib_logfile17 M% u* J2 b3 \6 |: z5 |& E
( O$ h) z) @3 o
5.修改ib*所属用户
5 l/ o. l4 x; M* B2 M! Achown -R mysql ib*
8 W; X, @# ^, Q* e& \4 c6 V9 E& n# D8 W! C0 q& \
6.重启MySQLd2 B8 h( a" p: M
........
5 D; O* a& C$ p
# w0 f- c) H, t& n* p结论:% r$ e2 T4 F: i4 p  [
1.监控InnoDB文件 ibdata 和 ib_logfile* 是否存在# t" U+ B1 |) ~
2.清楚恢复策略,否则不要重启MySQLd* s1 s3 a# I6 y3 Y6 K5 |
 楼主| 发表于 2021-12-15 01:00:04 | 显示全部楼层
于是再/ect/my.cnf中加入max_connections=1000    wait_timeout=5这两个配置& T# d" b" t& K# \
# I* K7 F; i/ l/ I5 k8 v2 G# U

: G0 r4 A) \6 H- t
0 w! C9 A9 R! E& I1 u. v重启mysql,启动成功,但是项目却无法打开,又重新打开mysql日志发现他一直无休止的重启,百度搜了好多办法都不行# ]3 U3 V7 ?, S) ^
0 n5 h' i. k+ W' x9 [' [
后来看到这段配置1 n; m2 r! s4 R+ T4 a$ @
+ C, E9 i) O. ?0 z, l, f6 F
0 C6 D; E' ]7 I6 A! t  C

0 @1 ^+ ]; O8 }. I, h我想应该是因为文件问题导致ibdata1损坏了,然后从1 到6全部都试了一遍,效果却是然并卵
/ \9 X$ [# }5 ?6 h
' {- C6 n+ x/ S. P到最后是这样配置的+ Y5 \$ m6 L8 r4 S0 W

7 x( B& m% [' t2 t4 T# \https://img-blog.csdn.net/20180511171205193?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dsX2FuZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70$ s/ g5 q' `2 d1 P" u  r1 x

; l; x7 q! ]7 o! N& S* T  W% L: o然后重启mysql没有问题,然后打开项目发现还是访问不了,后来发现tomcat停了,重启tomcat,完美解决
$ n6 p5 h8 V7 D" R& I' X* |  A
 楼主| 发表于 2021-12-15 01:00:05 | 显示全部楼层
操作步骤:
# ~; J. V, W2 C' X$ q5 k4 z
                               
登录/注册后可看大图

5 _0 f/ S- l2 w
企业微信截图_16394522573697.png
 楼主| 发表于 2021-12-15 01:00:06 | 显示全部楼层

概念:
# L( x7 r; x- Z/ S事務日誌或稱redo日誌,在mysql中默認以ib_logfile0,ib_logfile1名稱存在,可以手工修改參數,調節開啟幾組日誌來服務於當前mysql數據庫,mysql采用順序,循環寫方式,每開啟一個事務時,會把一些相關信息記錄事務日誌中(記錄對數據文件數據修改的物理位置或叫做偏移量);
1 K7 P! X. ~; a  t' R; b這個系列文件個數由參數innodb_log_files_in_group控制,若設置為4,則命名為ib_logfile0~3。
# \3 n% i1 C- b0 ^5 \* c這些文件的寫入是順序、循環寫的,logfile0寫完從logfile1繼續,logfile3寫完則logfile0繼續。
/ c0 B. L; }9 {2 Q3 C1 y% j
- O5 o; _4 Y6 k& E* Q- E7 Z" k# G" f作用:/ U8 A# z4 w6 L* g9 F: `- c9 b
在系統崩潰重啟時,作事務重做;在系統正常時,每次checkpoint時間點,會將之前寫入事務應用到數據文件中。# n# `' [/ A6 V9 l, k" H
: I' E  V  Z$ d
Ib_logfile的checkpoint field
' x3 C, w, A  b2 `$ K4 L1 h+ c0 e實際上不僅要記錄checkpoint做到哪兒(LOG_CHECKPOINT_LSN),還要記錄用到了哪個位置(LOG_CHECKPOINT_OFFSET)等其他信息。所以在ib_logfile0的頭部預留了空間,用於記錄這些信息。
' A5 U6 k8 E2 c: h8 P因此即使使用後面的logfile,每次checkpoint完成後,ib_logfile0都是要更新的。同時你會發現所謂的順序寫盤,也並不是絕對的7 H: J  G. @& r+ |
相關的一些數字
4 i3 T+ S4 N! B, Ra) InnoDB留了兩個checkpoint filed,按照註釋的解釋,目的是為了能夠“write alternately”+ W6 L3 v# X) ^& e- T# ^. k
b) 每個checkpint field需要的大小空間為304字節。(相關定義在log0log.h)  K3 m0 Z0 J' F3 X! c, T
c) 第一個checkpoint的起始位置在ib_logfile0的第512字節(OS_FILE_LOG_BLOCK_SIZE)處;
, p& s( b" Z0 z9 k! Z8 Cd) 第二個在1536 (3 * OS_FILE_LOG_BLOCK_SIZE)字節處。
2 H* X/ ~8 G) X- B
" H# ?7 ]& k9 @4 M3 [! R$ d# l* Q' u% e* g8 ?3 l% a0 z, ~
特點:+ R* R# W: M3 ^5 F0 ?+ ^
redo log只是記錄所有innodb表數據的變化。. p. q& O9 U! g! K
redo log只是記錄正在執行中的dml以及ddl語句。; K, B: Q8 w- o6 J9 a% f# J' A
redo log可以作為異常down機或者介質故障後的數據恢復使用

引入一個問題:在m/s環境中,innodb寫完ib_logfile後,服務異常關閉,會不會主庫能用ib_logfile恢復數據,而binlog沒寫導致從庫同步時少了這個事務?從而導致主從不一致;redo日誌寫入方式:1.ib_logfile寫入當前事務更新數據,並標上事務準備trx_prepare2.寫入bin-log3.ib_logfile當前事務提交提交trx_commit恢復方式:如果ib_logfile已經寫入事務準備,那麽在恢復過程中,會依據bin-log中該事務是否存在恢復數據。假設:1)結束後異常,因沒有寫入bin-log,從庫不會同步這個事務,主庫上,重啟時,在恢復日誌中這個事務沒有commit,即rollback這個事務.2)結束後異常,這會bin-log已經寫入,從庫會同步這個事務。主庫依據恢復日誌和bin-log,也正常恢復此事務綜上描述:bin-log寫入完成,主從會正常完成事務;bin-log沒有寫入,主從庫rollback事務;不會出現主從庫不一致問題.
# e% z$ O; i2 k* A& U0 l/ S% D相關參數(全局&靜態):innodb_log_buffer_sizeinnodb_log_file_sizeinnodb_log_files_in_groupinnodb_log_group_home_dirinnodb_flush_log_at_trx_commitinnodb_log_buffer_size:事務日誌緩存區,可設置1M~8M,默認8M,延遲事務日誌寫入磁盤,把事務日誌緩存區想象形如"漏鬥"狀,會不停向磁盤記錄緩存的日誌記錄,而何時寫入通過參數innodb_flush_log_at_trx_commit控制,稍後解釋,啟用大的事務日誌緩存,可以將完整運行大事務日誌,/ E: W. g3 {! W8 G3 R4 f$ C- ^
暫時存放在事務緩存區中,不必(事務提交前)寫入磁盤保存,同時也起到節約磁盤空間占用;innodb_log_file_size:控制事務日誌ib_logfile的大小,範圍5MB
~4G;所有事務日誌ib_logfile0+ib_logfile1+..累加大小不能超過4G,事務日誌大,checkpoint會少,節省磁盤IO,但是大的事務日誌意味著數據庫crash時,恢復起來較慢.引入問題:修改該參數大小,導致ib_logfile文件的大小和之前存在的文件大小不匹配解決方式:在幹凈關閉數據庫情況下,刪除ib_logfile,而後重啟數據庫,會自行創建該文件;innodb_log_files_in_group:DB中設置幾組事務日誌,默認是2;innodb_log_group_home_dir:事務日誌存放目錄,不設置,ib_logfile0...存在在數據文件目錄下innodb_flush_log_at_trx_commit:控制事務日誌何時寫盤和刷盤,安全遞增:0,2,1事務緩存區:log_buffer;0:每秒一次事務緩存區刷新到文件系統,同時文件系統到磁盤同步,但是事務提交時,不會觸發log_buffer到文件系統同步;2:每次事務提交時,會把事務緩存區日誌刷新到文件系統中去,且每秒文件系統到磁盤同步;1:每次事務提交時刷新到磁盤,最安全;適用環境:0:磁盤IO能力有限,安全方便較差,無復制或復制延遲可以接受,如日誌性業務,mysql損壞丟失1s事務數據;2:數據安全性有要求,可以丟失一點事務日誌,復制延遲也可以接受,OS損壞時才可能丟失數據;1:數據安全性要求非常高,且磁盤IO能力足夠支持業務,如充值消費,敏感業務;

/ T4 h+ J, R, n" s. ^3 }. g; G1 x& Z% n# K0 t( c

引入ib_logfile的寫入策略

1、基本概念/ D- f5 E6 L: X% I" H
a)、ib_logfile文件個數由innodb_log_files_in_group配置決定,若為2,則在datadir目錄下有兩個文件,命令從0開始,分別為ib_logfile0和ib_logfile.9 {$ A* K6 I* g- z
b)、文件為順序寫入,當達到最後一個文件末尾時,會從第一個文件開始順序復用。
8 X- b- E% @- V# v" l  O% g2 |$ b8 |% m0 Yc)、lsn: Log Sequence Number,是一個遞增的整數。 Ib_logfile中的每次寫入操作都包含至少1個log,每個log都帶有一個lsn。在內存page修復過程中,只有大於page_lsn的log才會被使用。
% e! W3 M& h3 z, p/ A- f5 k' B! rd)、lsn的保存在全局變量log_sys中。遞增數值等於每個log的實際內容長度。即如果新增的一個log長度是len,則log_sys->lsn += len.
, O0 I: n: B& A2 E$ U) fe)、ib_logfile每次寫入以512(OS_FILE_LOG_BLOCK_SIZE)字節為單位。實際寫入函數 log_group_write_buf (log/log0log.c)
7 b& G4 e7 M! G# X. z2 ef)、每次寫盤後是否flush,由參數innodb_flush_log_at_trx_commit控制。
* |2 p$ K# @9 V) U7 y8 W- g9 k* A; H1 s2 [' B7 }5 y7 w) [0 Q- h. C" c

* C6 ^. ?! O1 R; `% a# X' a: t2、log_sys介紹
3 [* F3 L+ C( h1 s: Olog_sys是一個全局內存結構。以下說明幾個成員的意義。; Z' b* \. p& q

lsn表示已經分配的最後一個lsn的值。
written_to_all_lsnn表示實際已經寫盤的lsn。需要這個值是因為並非每次生成log後就寫盤。
flushed_to_disk_lsn表示刷到磁盤的lsn。需要這個值是因為並非每次寫盤後就flush。
buf待寫入的內容保存在buf中
buf_sizebuf的大小。由配置中innodb_log_buffer_size決定,實際大小為innodb_log_buffer_size /16k * 16k。
buf_next_to_writebuf中下一個要寫入磁盤的位置
buf_freebuf中實際內容的最後位置。當buf_free> buf_next_to_write時,說明內存中還有數據未寫盤。


: z9 k7 i; h( j7 i& _
/ U$ z2 B' D) K0 X8 G
5 a0 A2 ~7 p; Y. q9 q. T  x! b3、相關更新) N: G$ f* E5 ^" Q6 I1 b
用一個簡單的更新語句來說明log_sys以及ib_logfile的更新內容的過程。假設我們的更新只涉及到非索引的固定長度字段。
3 @% U" p4 v" U( o9 G& ca) 在bufferpool中寫入undo log。 對於一個單一的語句,需要先創建一個undolog頭。
& r  g' [3 S1 k% F, x  I1 r' S& Rb) 在bufferpool中寫入undo log的實際內容。
! R3 [7 g2 [0 {; }c) 在log_sys->buf中寫入buffer page的更新內容。此處保存了更新的完整信息。: O$ X( }! f5 ?* p. M+ Z
d) 在log_sys->buf中寫入啟動事務(trx_prepare)的日誌7 V( }! t( @) B
e) 將c、d更新的log內容寫入ib_logfile中。) U8 Y- G6 N" ]6 p5 I2 l9 x
f) 在log_sys->buf中寫入事務結束(trx_commit)的日誌+ i8 Z# V' Q! u3 i# P3 {& l* R$ d
g) 將f步驟的log內容寫入ib_logfile中。' Z! y0 g/ O1 P, C
* d/ `8 m1 |# a) o6 M+ o5 W; k
4、說明
* O% G6 p$ w" m* N% V; la) 完成上述所有操作時,數據文件還沒有更新。/ Q7 W# F, R' y* C. H
b) 每次寫入log_sys->buf時同時更新lsn和buf_free。 每次寫ib_logfile時同時更新written_to_all_lsn和buf_next_to_write;
+ f3 O% D4 \' w. S4 E/ \c) 每次寫ib_logfile時以512字節為對齊,如需寫入600字節,則實際寫入1k。寫到最後一個文件末尾則從第一個文件重復使用。  r3 X2 V' Z% b( \; M  F
d) 從上述流程看到,在a~d過程中若出現異常關閉,由於沒有寫入到磁盤中,因此整個事務放棄;若在e剛完成時出現異常關閉,雖然事務內容已經寫盤,但沒有提交。在重啟恢復的時候,發現這個事務還沒有提交,邏輯上整個事務放棄。 (重啟日誌中會有Found 1 prepared transaction(s) in InnoDB字樣)。在g完成後出現異常關閉,則能夠在重啟恢復中正常提交。. Z4 U2 f  L$ o- d4 B
, A8 T% B7 p, p* L, O
在e和f之間會寫mysql的bin-log,若bin-log寫完前異常關閉,事務無效,bin-log寫入成功後,則異常重啟後能夠根據bin-log恢復事務的修改。
# n+ i" B/ `4 K, G1 U5 g' b$ H" j0 K" c( o8 m  ~; g4 Q: O0 M* u
e) 若涉及到索引更新,在步驟c之後會增加索引更新的log。由於索引可能有merge過程,因此在merge過程中會另外增加寫入一個log。但事務完全提交仍在步驟g中。索引的更新由於已經寫盤,並不會因此丟失。

 楼主| 发表于 2021-12-15 01:00:07 | 显示全部楼层
ib_logfile0 记录系统的回滚,重做日志。: m  j1 [% U3 h& @. E. g. s8 f( _

) z$ p6 w( n2 }' E" ]mysql-bin.000011 系统的所有更新记录。  B( n! E) Y! `$ p; P6 k

2 i4 a7 S3 F6 ]7 g4 E- ?7 k7 c6 _6 `5 T
如果需要更详细的则建议看一下数据库原理方面的教材,应该有一个章节讲这个redo,undo 日志的。 ) n# ]2 m% }) R5 A9 ]. r
,ib_logfile0是重做日志,记录的是文件的物理更改         $ B% `; X: [: c* ?# l' V$ d
mysql-bin.000011是数据库更新日志  记录的是逻辑更改+ G, O5 l* Z* I( f& p) }5 {0 b
3 u! z7 S8 X) c7 ~/ o  n$ z4 f2 k' \
,
0 k0 y5 T( K: S9 B/ Q; `' tib_logfile0是重做日志,也就是 在你修改数据之前,会先把 修改的操作 作为日志先记录下来。
7 y) M/ G+ \& _        
4 s" Q1 H9 W# @6 I. Mmysql-bin.000011是二进制日志,格式是二进制的,但是这个日志更加有用,比如 在我们做 数据库的主从复制时,这个二进制日志就是关键,mysql会把日志发送到slave,salve会接收日志,然后解析日志,把里面的sql语句重新应用到数据库里,于是就能同步数据了。
3 Q. G8 i2 Q+ P& U5 P,ib_logfile0:记录的是redo log和undo log的信息,这里记录的基本是commit之前的数据。
# F5 t# ?# |/ m5 X1 }. p! W
0 E. X  S1 A& Umysql-bin.000011:记录的是已经执行完毕的对数据库的dml和ddl信息,这里记录的基本是commit之后的数据信息。
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

北京云银创陇科技有限公司以云计算运维,代码开发

QQ|返回首页|Archiver|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )点击这里给我发消息

GMT+8, 2026-4-8 21:29 , Processed in 0.089780 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

快速回复 返回顶部 返回列表