我使用过 PURGE BINARY LOGS 和 FLUSH LOGS,但 mysql 目录仍然包含这些文件:
mysql-bin.000025
mysql-bin.000024
mysql-bin.000023
mysql-bin.000022
mysql-bin.000021
mysql-bin.000020
mysql-bin.000019
mysql-bin.index
Run Code Online (Sandbox Code Playgroud)
是否有使用命令不起作用的原因?这些文件占用了大量空间。我想安全地摆脱它们。
出于某种原因,当我尝试打开存储在.frm
和.ibd
文件中的表(无论是在 MySQL 还是 phpmyadmin 上)时,它会给我一个语法错误,或者它说它不存在。
我已经从 .frm 和 .ibd 文件中读取了恢复表?有与此类似的问题,但我不知道如何检查是否innodb_file_per_table
已启用,而且我总体上真的很困惑。我还将我的mysql-bin.000002
文件的副本转换为txt 文件,因此我看到我的数据库中的数据没有完全丢失。
该数据库是去年创建的。我有 6 个mysql-bin.00000
文件,但由于某种原因,.000002
它是最大的。现在,我拥有所有数据库的.ibd
和.frm
文件,但我不知道如何将其恢复回 MySQL,或者至少恢复到我可以读取的内容。
我在 Windows 2003 Server 上使用 WampServer 2.4 和 MySQL 5.6.12。另外,我应该在 InnoDB 中下载插件吗?
我有用于通过 GTID 复制的 mysql 二进制日志。
我正在尝试显示执行的更新/插入语句,如下所示:
mysqlbinlog --base64-output=DECODE-ROWS mysql-bin.000024
Run Code Online (Sandbox Code Playgroud)
但我所看到的只是这样,没有更新或插入 stmt 的痕迹:
SET TIMESTAMP=1431681617/*!*/;
BEGIN
/*!*/;
# at 746987321
# at 746987392
# at 746987484
#150515 11:20:17 server id 1 end_log_pos 746987515 CRC32 0xeb874754 Xid = 997501767
COMMIT/*!*/;
# at 746987515
#150515 11:20:22 server id 1 end_log_pos 746987563 CRC32 0xc5ece64a GTID [commit=yes]
SET @@SESSION.GTID_NEXT= 'a4ade293-c63a-11e4-94cf-005056944a56:2059057'/*!*/;
# at 746987563
#150515 11:20:22 server id 1 end_log_pos 746987650 CRC32 0x92296355 Query thread_id=71622 exec_time=0 error_code=0
Run Code Online (Sandbox Code Playgroud)
我不确定 GTID 复制的格式/配置以及在哪里寻找它...
我正在尝试为大型(120 GB)MySQL 数据库设置复制,但我搞砸了。
我关闭了 master,复制了数据文件,然后重新启动了 master。现在我已经设置了奴隶并启动了它,我意识到我忽略了获取MASTER_LOG_FILE
和MASTER_LOG_POS
设置复制所需值。
我仍然有一份未受影响的数据文件副本。有没有办法从这些文件中确定MASTER_LOG_FILE
和MASTER_LOG_POS
?
相关问题:
MASTER_LOG_POS
为较早的时间点?编辑
我一直在调查该mysqlbinlog
命令,并通过执行以下命令发现了正确的信息:
mysqlbinlog --to-last-log --start-datetime='2015-06-21 20:05:00'
mysql-bin.000006 | grep end_log_pos
Run Code Online (Sandbox Code Playgroud)
输出如下所示:
... a whole bunch more lines ...
#150621 20:10:21 server id 1 end_log_pos 720159843 Query thread_id=901489 exec_time=0 error_code=0
#150621 20:10:21 server id 1 end_log_pos 720161877 Query thread_id=901489 exec_time=0 error_code=0
#150621 20:10:21 server id 1 end_log_pos 720162762 Query thread_id=901489 exec_time=0 error_code=0
#150621 20:10:22 server id 1 end_log_pos 720164796 …
Run Code Online (Sandbox Code Playgroud) 我有一个生产数据库,我通常每周运行一次完整备份。我为增量备份打开了 bin 日志。
生产服务器在西海岸,而营业时间在东海岸。
当我执行全备份时,我会查询主服务器的日志和位置。我将这些值放在我将数据库压缩到的 zip 文件名中。
我在使用 mysqlbinlog 从我知道备份已经结束的某个位置创建增量 sql 文件时遇到了困难。
运行Show Master Status
然后运行mysqldump --flush-logs --single-transaction...
就足以获得准确的信息以进行恢复。
我知道理想的设置是备份从属数据库,因为锁定不会损害生产环境,但目前我还没有进行切换。
因为我没有锁定所有表,所以我没有得到理想的结果吗?
提前致谢
编辑
在 RolandoMySQLDBA 的帮助下,我意识到我没有指向适当的 binlog 文件。我改为指向整个目录binlog/bin-log.[0-9]* > sql.txt
。因此,仅使用该位置,我就可以击中比预期更早开始的日志。所以我更改了我的脚本以提取适当的 binlog 文件以及位置,这就像一个魅力。
谢谢
MySQL binlog 是否类似于 Oracle 的重做日志或 PostgreSQL 的 Write-Ahead Log?
如果是,为什么可以禁用 bin 日志记录?如果在更新数据文件时机器崩溃,RDBMS 如何在没有 binlog 的情况下回滚更改(或以其他方式将数据文件恢复到一致状态)?
该手册说“某些数据恢复操作需要使用二进制日志”,但并不完全清楚是哪一个。如果我没有复制和增量备份,禁用二进制日志是否安全?
我问这些问题的原因是,在 Nextcloud 部署中,我遇到了磁盘性能问题,并且我发现在大量使用期间,MySQL 写入磁盘(写入二进制日志)的速率等于每分钟数据库。因此,我试图了解正在发生的事情以解决问题。
在禁用日志之前,我使用此解决方案删除我的日志。binlog
禁用后,我测试了以下命令来删除剩余的文件,但没有成功。(删除的目的是节省空间。)
PURGE BINARY LOGS TO 'binlogname';
PURGE BINARY LOGS BEFORE 'datetimestamp';
Run Code Online (Sandbox Code Playgroud)
mysql ×7
mysqlbinlog ×7
binlog ×2
innodb ×2
replication ×2
backup ×1
mysql-5.6 ×1
mysqldump ×1
recovery ×1