MySQL_Binlog_Table_Filter
最近处理了多起起mysql被删表的事件,发现mysqlbinlog
有点鸡肋,只能导出指定库,但是不能指定表,网上有操作用grep
的A和B,但是实际上可能语句是带有换行的,这样一来grep出来的内容就是不全的,所以做了一个过滤的perl脚本,小范围测试了一下没什么问题,还是比较好用的,还支持同时导出多张表,并且可以指定是否保留drop
和truncate
语句。缺陷就是要先用mysqlbinlog导出指定的库,如果导出不限制库并且指定的表在多个库中存在的话就要乱套了。
详见:sillydong/MySQL_Binlog_Table_Filter
mysql_binlog_table_filter
Created because mysqlbinlog can not filter table
示例 / Example
./myfiler.pl --tables hello,hi --enable-drop --enable-truncate --src src.sql
参数
--tables <tablenames> 筛选要导出的表名,使用英文逗号","分隔多个表名
--enable-drop 允许DROP语句,可选,默认不允许
--enable-truncate 允许TRUNCATE语句,可选,默认不允许
--src <exported sql file> 从指定文件读取
操作指南
- 用mysqlbinlog将binlog文件导出成sql文件,使用-d操作符指定数据库。
- 使用myfilter.pl处理导出的数据库文件,导出结果默认输出到标准输出,可以重定向到一个新的sql文件。
- 导入处理后的sql文件
Parameters
--tables <tablenames> export tables in tablenames, deliminate by ","
--enable-drop enable DROP, optional, default disabled
--enable-truncate enable TRUNCATE, optional, default disabled
--src <exported sql file> read from sql file
How To
- Export binlog file using mysqlbing with -d operator to export the exact database.
- Use myfilter.pl to parse exported sql file. Result will be printed to stdout, you can redirect the export to a new sql file.
- Import the parsed sql file into your database.
Help
Any question please mail to njutczd+gmail.com