问题标签 [binlog]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mysql - MySQL - 有没有办法在不编写脚本的情况下将 bin 日志位置包含在转储文件中
有没有办法在不编写脚本的情况下将复制 bin 日志位置包含在转储文件中?
我知道有一些方法可以通过脚本编写,在转储文件中附加一行等。但我记得有一次读到它可以通过 mysqldump 中的一个简单参数来实现,这是真的吗?如果是的话,语法是什么?
非常感谢
mysql - 是否可以使用来自 1 个模式的 binlog 并使用 mysqlbinlog 将它们发送到另一个模式?
每天晚上,我们从生产环境运行 mysqldump 并将其转储到另一个模式,以在同一台服务器上用作测试或开发服务器。随着数据库的增长,完成需要花费很多时间。我正在想办法加快速度。我想因为我正在运行 binlog,所以我想可能每周执行一次 Mysqldump,然后在一周的剩余时间里更新 binlogs 中的其他模式。当然,如果可能的话,所有这些都需要编写脚本。
此外,mysqldump 和从一个模式导入到另一个模式是否更快,或者使用从一个模式到另一个模式的更新来更新所有表是否更快?
是否可以在同一个 mysql 实例上有一个主/主?
mysql - 收集mysql表的ID
目前正在开发一个二进制日志解析器,它读取由 mysql 数据库写入的二进制日志,以将更改写入 MongoDB 并将其转换为 MongoDB。这样,我想创建转换为 Json 的“物化视图”以用于进一步处理。在二进制日志中,只有一个对带有“tableId”的表的引用。
我在http://dev.mysql.com/doc/refman/5.0/en/getting-information.html中找不到有关表的其他元信息的任何参考
那么如何找出哪个表有哪个ID呢?
mysql - 为什么在重新同步 mysql slave 时发出“reset master”
我最近需要执行一些数据库重新同步,并且有一个关于(似乎是)在将数据库转储到主服务器之前发出“RESET MASTER”的常见做法的问题。
在从主数据库转储数据库之前,我发现的围绕此过程的几乎所有文档都有一个“RESET MASTER”。
示例:https ://stackoverflow.com/a/3229580/1570785
然而,在生产环境中,这似乎适得其反,主要是因为“RESET MASTER”命令会清除现有的二进制日志。因此,如果在复制中断时您的主服务器出现问题,您最终会得到一个不一致/损坏的主服务器和一个不同步的从服务器。
鉴于首先需要执行此过程(即 mysql 复制出现问题),仅仅因为从站需要清除二进制日志(可用于从 COMPLETE 灾难中恢复)似乎是不明智的重新同步。
我真正要问的是:我错过了什么 - 在从主站转储之前执行“重置主站”是否有正当理由?
mysqlbinlog - 需要有关二进制日志的建议吗?
我们已经设置了主从配置,我们正在存储 30 天的 bin 日志。它在服务器上占用了更多空间,我们需要找到一些更好的方法来处理它。
我们正在考虑仅存储 7 天的日志。可以吗。
mysql - 如何在启用二进制日志记录的安全模式下执行多表删除?
假设我有以下数据结构:
表B
可能有超过 3000 条记录:大约 600 条记录,引用到 table 中的不同行C
。我的服务器上启用了两个设置:
问题: 如何有效地删除 table 中的所有记录,通过 tableA
引用 tableC
的记录B
而不发出警告?
我尝试了什么:
DBMS 服务器发出safe_mode
错误:
错误代码:1175。您正在使用安全更新模式,并且您尝试更新没有使用 KEY 列的 WHERE 的表 要禁用安全模式,请切换 Preferences -> SQL Queries 中的选项并重新连接。
我已删除B.
别名:
是的,它成功了,但我有这个:
2 行受影响,1 个警告:1592 使用语句格式将不安全语句写入二进制日志,因为 BINLOG_FORMAT = STATEMENT。从另一个表中选择后写入具有自动增量列的表的语句是不安全的,因为检索行的顺序决定了将写入哪些(如果有)行。此顺序无法预测,并且可能在主从服务器上有所不同。
另外,我试图强制使用 PRIMARY KEY:
但这也没有帮助。我对我的服务器做了什么坏事或邪恶的事吗?什么方法是正确的?我错过了什么吗?
提前致谢。任何帮助将不胜感激。
PS:我知道如何使用谷歌和搜索栏。这是我发现的:
https://stackoverflow.com/questions/12275864/multiple-delete-not-working-with-inner-join
http://tech-solutions4u.blogspot.ru/2012/09/mysql-multi-delete-issue-in-safe-mode.html
等等。我已经尝试过,但最后,我不喜欢禁用服务器功能(不是由我设置的)的想法,甚至“暂时......”。
编辑:
我知道,有一种解决方法可以保存GROUP_CONCAT(ID_B)
在临时变量中并通过它的“标量”值执行删除:
但这将是近似600 * 5 = 3000
字符,所以这个想法也不受欢迎。我的意思是,如果没有其他可能,这将是最后的选择。
mysql - 如何在不重复mysql日志的情况下精确数据?
在我使用mysqldump -u user -p database > backup.sql
. 在此之后我使用
因为它显示文件,位置,做 db,在 DB 上进行一些更改后忽略 db 现在主状态更改为
当我想进行增量备份时,我应该如何指定start-position
and stop-position
。正如mysql doc所说“开始位置将在位置等于或大于N的第一个事件处开始读取二进制日志”和“停止位置将在位置等于或大于位置的第一个事件处停止读取二进制日志比 N”。那么完整备份后如何指定从binlog文件中获取数据的位置呢?
mysql - 如何理解mysql binlog中的时间戳?
binlog 总是如下所示:
来自官方网站的插图是:
在第一行中,at 后面的数字表示事件在二进制日志文件中的起始位置。
第二行以日期和时间开头,指示语句何时在事件起源的服务器上开始。对于复制,此时间戳会传播到从属服务器。server id 是事件发起的服务器的 server_id 值。end_log_pos 表示下一个事件的开始位置(即当前事件的结束位置+1)。thread_id 指示哪个线程执行了该事件。exec_time 是在主服务器上执行事件所花费的时间。在从站上,它是从站上的结束执行时间减去主站上的开始执行时间的差。差异可作为复制落后于主服务器多少的指标。error_code 表示执行事件的结果。零表示没有发生错误。
它说“第二行以日期和时间开头”,似乎这种日期时间格式与“SET TIMESTAMP”子句有很大不同,其中数字表示从1970-1-1开始的秒数,但是“ # 140105 18:49:33”的意思是,那是那个日期?
mysql - 用于 mysql 复制的 binlog_do_db 组?
是否可以将 binlog_do_db 拆分为从属组?
我有一个带有数据库“前端、后端、事件、列表”的 mysql 主服务器。
现在我想将数据库“事件和列表”复制到从站 1 和从站 2。
对于实时备份,我想将所有数据库复制到从属 3。
我知道我可以简单地将 binlog_do_db=frontend,backend,events,lists 添加到我的主配置文件中。
但我对二进制日志文件有安全顾虑。据我了解,从 1 或从 2 的攻击者可以通过打开中继日志文件“mysqlbinlog mysqld-relay-bin.00000X”来读取来自前端、后端和事件的数据。
那么是否可以创建“binlog_do_db”-groups 来限制二进制日志传输?
非常感谢!
mysql - mysql binlog 输出文件不明确?
我用
我的表有一列是 varbinary。所以 res.000001 像这样
我发现binlog会将不可见字符转换为十六进制(例如"\n", "\r"
),普通字符将直接打印(例如"%", "a"
)。有问题。如果这一列是"\x10"
,binlog 会输出"\x10"
(我们称之为 case 1),如果这一列是这些 hex 也是 的字符"0x10"
,binlog 会输出"\x10"
TOO(我们称之为 case 2)。所以我不能谈论这些字符串之间的区别。
在情况 1 中,我认为 binlog 应该输出"\x10"
以转义反斜杠。这是mysql binlog的bug吗?