MySQL 复制简单主/从复制



>我有简单的主/从配置。我的两个生产机器上都有 8GB 的 RAM。我只使用主写,从只写。但是在周末,我运行了一项工作,即在主服务器上插入数据,这些数据应该复制到从属服务器上。由于我的奴隶在主人身后将近 15-16 小时,这给我的报告带来了很大的麻烦,因为我从奴隶那里阅读它,奴隶没有更新的信息。

关于这一点,我有几个疑问:

  1. 是否有任何合理的理由为什么应该使用slave而不是master。我师傅5分钟后就写了。并且某些作业计划从从属服务器读取。

  2. 我有 100GB 的表,每天在同一张桌子上插入一百条记录。所有选择和插入都发生在此表上。我选择了将数据逐年从此表分离到多个表的方法,以便优化此表,是否有任何其他方法可以优化并使该表的执行更快。

如果我留下了任何不清楚的地方,请告诉我。

以下是表格设计:

+----------------+------------------+------+-----+---------------------+----------------+
| Field          | Type             | Null | Key | Default             | Extra          |
+----------------+------------------+------+-----+---------------------+----------------+
| test_id        | int(11) unsigned | NO   | PRI | NULL                | auto_increment |
| prime_id       | int(11) unsigned | NO   | MUL | 0                   |                |
| prime2_id      | int(11) unsigned | NO   | MUL | 0                   |                |
| timestamp      | datetime         | NO   | MUL | 0000-00-00 00:00:00 |                |
| test_time      | int(11)          | NO   |     | 0                   |                |
| status         | int(11)          | NO   |     | 0                   |                |
| component      | int(11) unsigned | NO   |     | 0                   |                |
| c_component    | int(11) unsigned | NO   |     | 0                   |                |
| C2_component   | int(11) unsigned | NO   |     | 0                   |                |
| C3_component   | int(11) unsigned | NO   |     | 0                   |                |
| rt_component   | int(11) unsigned | NO   |     | 0                   |                |
| code           | int(11) unsigned | NO   |     | 0                   |                |
| ip             | int(11) unsigned | YES  |     | 0                   |                |
| step_id        | int(11) unsigned | YES  |     | NULL                |                |
+----------------+------------------+------+-----+---------------------+----------------+
This is the index information of the table:
| Table | Non_unique | Key_name              | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+-------+------------+-----------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| tests |          0 | PRIMARY               |            1 | test_id     | A         |   629448388 |     NULL | NULL   |      | BTREE      |         |
| tests |          1 | ixf_prime_id          |            1 | prime_id    | A         |          14 |     NULL | NULL   |      | BTREE      |         |
| tests |          1 | ixf_prime2_id         |            1 | prime2_id   | A         |          14 |     NULL | NULL   |      | BTREE      |         |
| tests |          1 | ix_timestamp          |            1 | timestamp   | A         |   157362097 |     NULL | NULL   |      | BTREE      |         |
| tests |          1 | ix_prime_id_timestamp |            1 | prime_id    | A         |          14 |     NULL | NULL   |      | BTREE      |         |
| tests |          1 | ix_prime_id_timestamp |            2 | timestamp   | A         |   629448388 |     NULL | NULL   |      | BTREE      |         |

我们也有类似的情况,但是我们的奴隶有时落后于主人 3 或 4 天,而在其他时候则完全是最新的。

我们

所做的是测试生成的每个页面(或计划作业的脚本)顶部的从属状态,如果"主节点后面的秒数"大于我们决定的任意数量,我们就在主服务器上触发对该页面/作业的所有查询。如果主站落后的秒数在我们允许的时间限制(通常为零)内,我们就知道向从站触发查询是安全的。

然后扩展以决定当我们有多个从属服务器时触发查询(有点像软件负载均衡器!

最终,

我们重新设计了架构和插入查询,以确保从站滞后最终成为一个非常小的问题......

您可以做的一件事是尝试将插入分成较小的批次,这样单个插入不会花费太长时间,从而允许从站开始该插入,而主插件则忙于下一个插入。

希望这有帮助。

戴夫

相关内容

  • 没有找到相关文章

最新更新