8

我有一个 mysql 从属服务器,我正在尝试复制一个主 mysql 实例。

我大约一周左右从生产主实例迁移数据。当时我SHOW MASTER STATUS在 master 上调用并获得了 binlog 名称和位置。现在,当我跑步时,SHOW MASTER STATUS我得到:

mysql> SHOW MASTER STATUS;
+----------------------------+----------+--------------+------------------+-------------------+
| File                       | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------------------+----------+--------------+------------------+-------------------+
| mysql-bin-changelog.039446 |      120 |              |                  |                   |
+----------------------------+----------+--------------+------------------+-------------------+
1 row in set (0.05 sec)

该二进制日志与一周前的二进制日志不同。

我可以不再开始复制 b/c 我试图定位的二进制日志被轮换了吗?在我不能再开始复制之前,我是否可以检查一个变量来查看我“拥有”多长时间?

编辑:

还通过 mysql 文档进行了更多阅读,我发现了一个应该列出所有二进制日志的命令:

mysql> SHOW BINARY LOGS;
+----------------------------+-----------+
| Log_name                   | File_size |
+----------------------------+-----------+
| mysql-bin-changelog.039456 |       479 |
| mysql-bin-changelog.039457 |       120 |
+----------------------------+-----------+
2 rows in set (0.07 sec)

我上周写下的二进制日志再次没有列出,所以我的问题仍然存在......

编辑2:

这是 AWS RDS 特定的,但我找到了一个列出保留时间的存储过程:

mysql> call mysql.rds_show_configuration;
+------------------------+-------+------------------------------------------------------------------------------------------------------+
| name                   | value | description                                                                                          |
+------------------------+-------+------------------------------------------------------------------------------------------------------+
| binlog retention hours | NULL  | binlog retention hours specifies the duration in hours before binary logs are automatically deleted. |
+------------------------+-------+------------------------------------------------------------------------------------------------------+
1 row in set (0.06 sec)

Query OK, 0 rows affected (0.06 sec)

在这里,它说 binglog 将保留 24 小时。我尝试复制的数据库需要超过 24 小时才能迁移,这意味着当它准备好复制时,它需要访问的复制日志已经被删除......

编辑3:

在这里找到:

日志文件大小

MySQL 慢查询日志、错误日志和常规日志文件大小限制为不超过为数据库实例分配的存储空间的 2%。为保持此阈值,日志每小时自动轮换一次,并删除超过 24 小时的日志文件。如果删除旧日志文件后合并的日志文件大小超过阈值,则删除最大的日志文件,直到日志文件大小不再超过阈值。

4

1 回答 1

10

对于 AWS RDS 特定实例,您可以使用以下存储过程找到二进制日志的保留长度:

mysql> call mysql.rds_show_configuration;
+------------------------+-------+------------------------------------------------------------------------------------------------------+
| name                   | value | description                                                                                          |
+------------------------+-------+------------------------------------------------------------------------------------------------------+
| binlog retention hours | NULL  | binlog retention hours specifies the duration in hours before binary logs are automatically deleted. |
+------------------------+-------+------------------------------------------------------------------------------------------------------+
1 row in set (0.06 sec)

Query OK, 0 rows affected (0.06 sec)

当我尝试将我们当前的 MySQL RDS 实例迁移到 Amazon Aurora 时,我必须首先迁移数据库,然后开始复制在迁移窗口期间发生的任何更新。因为迁移需要超过 24 小时,所以我需要设置一个比 Amazon 提供的默认 24 窗口更长的窗口,显然我可以使用以下存储过程来完成:

Amazon RDS 通常会尽快清除二进制日志,但二进制日志必须在实例上仍然可用,以便 mysqlbinlog 访问。要指定 RDS 保留二进制日志的小时数,请使用 mysql.rds_set_configuration 存储过程并指定一个有足够时间下载日志的时间段。设置保留期后,请监控数据库实例的存储使用情况,以确保保留的二进制日志不会占用太多存储空间。

此示例将保留期设置为 1 天:

call mysql.rds_set_configuration('binlog retention hours', 24);

看起来我需要在我的主服务器上增加保留时间并进行另一次迁移,我当前的迁移不能再被正确复制。

于 2015-08-07T16:45:16.310 回答