我已经研究了几天的 mysqlbinlog 恢复问题,我发现它是由一些包含 $ 字符的不完整的 SQL 语句引起的。
以下 SQL 语句记录到通用日志中,并且也会出现在二进制日志中:
delete from build_type$
insert into build_type$ values ('bt3')
delete from vcs_root_instance$
为什么这些语句会传递(包含 $ 符号)。数据库包含没有 $ 符号的表 - build_type、vcs_root_instance?
desc build_type;
+-------------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+-------------+------+-----+---------+-------+
| int_id | varchar(80) | NO | PRI | NULL | |
| config_id | varchar(80) | NO | UNI | NULL | |
| origin_project_id | varchar(80) | YES | | NULL | |
| delete_time | bigint(20) | YES | | NULL | |
+-------------------+-------------+------+-----+---------+-------+
MariaDB 版本:10.2.23
答案1
如果数据库、表和列名称包含大多数特殊字符(包括$
),请使用反斜杠。(下划线也可以。)例如:
delete from `build_type$`
更好的是,不要使用$
。