MySQL中的LogMiner工具 -- mysqlbinlog

    在MySQL中binlog的作用和Oracle中的归档日志类似, Oracle中提供了DBMS_LOGMNR来对日志文件进行分析, 来解出Redo SQL和Undo SQL, MySQL中也提供了一个名为mysqlbinlog的工具, 用来解释或取出存放在binlog中的SQL语句, 有没有Undo SQL我到是没有研究过. 最基本的使用语法如下:

mysqlbinlog [options] log_file ...

    在选项中, 可以指定一些过滤条件, 来解出你所想用的东西, 这样的选项有:

--database=db_name, -d db_name
--offset=N, -o N
--[start|stop]-datetime=datetime
--[start|stop]-position=N

    解出来的就是一条一条SQL语句了, 将这些语句执行一下, 就等于增量恢复了, 估计不是用绑定变量的, 可能在MySQL中是不是绑定变量不是很重要了. 当然重要的一点是不要运行多个进程去跑, 因为这样的话, 顺序就得不到保证了. 如下所示:

$ mysqlbinlog binlog.000001 >  /tmp/statements.sql
$ mysqlbinlog binlog.000002 >> /tmp/statements.sql
$ mysql -e "source /tmp/statements.sql"

    Oracle的LogMiner不太爽是因为他不是离线的, 做成MySQL这样的倒是比较方便多了. 看到这儿也应当可以想象到, MySQL中的复制大约是什么回事了吧?

留言 (2)

MySQL的binlog似乎是很简单的就是记录SQL。而且不会分解到rowid。基本上可以猜测是没有Undo SQL。

MySQL在这一块设计的太简单,其replication也很简单。

其实我只是以前偶尔用了一下MySQL,记得印象中是这样的。

Talmud

5.1.x版本的文档中说, Replication将不再基于SQL语句了, 而是基于记录级别了.

发表留言:

« Previous | Main | Next »

英语900句 | English 900

  • The late arrival of the ship had messed up all our plans.
  • 船到晚了, 把我们的计划全打乱了.
  • I had thought he knew the time of the meeting.
  • 我原以为他知道开会时间.
  • They had excepted me to go with them.
  • 他们原本希望我和他们一起去.
  • That was the third time that I had visited the place.
  • 那是我第三次参观那地方了.
  • After I had finished my paper, I put it in the drawer.
  • 我写完论文, 就把它放在抽屉了.