dr_*_*dr_ 7 mysql optimization percona corruption xtradb-cluster
我有一个 3 节点 Percona XtraDB 集群,根据mysqlcheck,其中一些表已损坏(一些索引包含错误的条目数):
mydb.mytable
Warning : InnoDB: Index 'foo' contains 1393929 entries, should be 1393918.
Warning : InnoDB: Index 'bar' contains 1393921 entries, should be 1393918.
error : Corrupt
Run Code Online (Sandbox Code Playgroud)
OPTIMIZE TABLE在集群上运行的最佳实践是什么?
我在没有用户的测试环境中做了一些实验,似乎OPTIMIZE TABLE一个节点上的an不会自动将其影响传播到其他节点。这与此命令修改索引和表的存储空间,而不是其内容或其定义的事实一致。
在每个节点的生产环境中运行命令,让它在下一个节点中运行之前完成它可能有什么缺点?
考虑到 MySQL(和 Percona XtraDB Cluster,据我所知)不支持分布式表锁,这对用户会有什么影响?这会使集群处于不一致的状态吗?
如果需要OPTIMIZE TABLE在 PXC 中运行,您可以通过以下三 (3) 种方式之一拒绝将其记录到二进制日志中来实现此目的:
SET sql_log_bin = 0;
OPTIMIZE TABLE mydb.mytable;
SET sql_log_bin = 1;
Run Code Online (Sandbox Code Playgroud)
OPTIMIZE NO_WRITE_TO_BINLOG TABLE mydb.mytable;
Run Code Online (Sandbox Code Playgroud)
OPTIMIZE LOCAL TABLE mydb.mytable;
Run Code Online (Sandbox Code Playgroud)
OPTIMIZE TABLE一次在一个 PXC 节点上运行上述方案之一,同时重定向集群中的读取和写入操作。如果数据量很大,可以将PXC节点从集群中移除,OPTIMIZE TABLE随意运行,然后将PXC重新添加到集群中。
| 归档时间: |
|
| 查看次数: |
3581 次 |
| 最近记录: |