1. 都有哪些情况可能导致MGR服务无法启动
简单整理了下,大概有以下原因可能导致MGR服务无法启动:
- 网络原因,例如网络本来就不通,或被防火墙拦住。防火墙通常至少有两道,操作系统默认的firewall策略,以及云主机被默认的安全策略。
- 第一个启动的节点没先做初始引导操作(
group_replication_bootstrap_group=ON
)。 - 没有正确配置group_name,所有节点的
group_replication_group_name
值要一致才可以。 - 没正确配置
group_replication_group_name
,常见于新手。要为MGR服务专门新开一个服务端口,常用33061端口,但新手可能会照样写成3306端口。 - 通常,我们会在各MGR节点的 hosts 文件里加上所有节点的hostname。这是为了防止本地节点使用的hostname和MGR收到的hostname不一致,这种情况下,可以在每个本地节点设置
report-host
,主动上报hostname即可解决。 - 没设置正确的allowlist。有可能加入MGR各节点的IP不在默认的allowlist中,可参考这篇文章:MySQL Group Replication集群对IP地址的限制导致的一些问题与解决办法。
- 个别节点的本地事务更多,例如误操作写入数据,也会无法加入MGR,这种情况需要重建本地节点。
- 个别节点的本地事务缺失太多,且加入MGR时无法自动完成恢复,这种情况比较少见,需要手动执行clone复制数据,或者其他类似操作。
更多MGR相关问题请移步到这篇文章:GreatSQL MGR FAQ。
2. MySQL中怎么知道一个表的创建时间
来自群友的问题:有地方可以查看到mysql第一次初始化启动的时间吗?
这个问题可以换个角度来思考,即:怎么查的实例中MySQL元数据表初始化创建时间。
至少有两种方法可用:
方法一,查询MySQL日志。
如果MySQL实例自从初始化后的日志一直留存着的话,自然可以查到当时的时间。
方法二, 查询MySQL元数据表。
执行类似下面的命令,即可查得该实例初始化的时间:
[root@yejr.run]> SELECT TABLE_NAME, CREATE_TIME, UPDATE_TIME, CHECK_TIME FROM information_schema.TABLES where table_schema='mysql' order by create_time limit 2; +--------------------+---------------------+---------------------+------------+ | TABLE_NAME | CREATE_TIME | UPDATE_TIME | CHECK_TIME | +--------------------+---------------------+---------------------+------------+ | innodb_table_stats | 2020-02-17 08:21:19 | 2021-11-18 21:50:17 | NULL | | innodb_index_stats | 2020-02-17 08:21:19 | 2021-11-18 21:50:17 | NULL | +--------------------+---------------------+---------------------+------------+
P.S,提这个问题好像没啥意义吧。。。