对比结果
集群类型 | 操作名称 | 函数名称 | 8.0 | 5.7 | 修改mysqlshell源码支持5.7 | 备注 |
---|---|---|---|---|---|---|
cluster | 配置实例 | configure_local_instance | √ | √ | √ | 5.7版本中缺少auto.cnf文件,无法实现自动修改配置文件需执行dba.configure_local_instance()前手动修改mysql配置文件,加入binlog_checksum = NONE transaction_write_set_extraction = XXHASH64重启mysql |
创建集群 | create_cluster | √ | √ | √ | ||
查询状态 | get_cluster | √ | √ | √ | ||
添加实例 | add_instance | √ | √ | √ | ||
删除实例 | remove_instance | √ | √ | √ | ||
解散集群 | dissolve | √ | √ | √ | ||
设置主节点 | set_primary_instance | √ | × | × | ||
重新加入实例 | rejoin_instance | √ | √ | √ | ||
重启集群 | reboot_cluster_from_complete_outage | √ | √ | √ | ||
从仲裁丢失中恢复集群 | force_quorum_using_partition_of | √ | √ | √ | ||
重新扫描集群 | rescan | √ | √ | √ | ||
replica_set | 配置实例 | configure_replica_set_instance | √ | 不支持原因一:版本检查不支持,最低版本要求为8.0const mysqlshdk::utils::Version k_min_ar_version =mysqlshdk::utils::Version("8.0");原因二:5.7版本不支持persist关键字,导致系统变量READ_ONLY和SUPER_READ_ONLY设置不成功,接口出错。 | √ | 5.7版本中缺少auto.cnf文件,无法实现自动修改配置文件需执行dba.configure_local_instance()前手动修改mysql配置文件,加入 transaction_write_set_extraction = XXHASH64重启mysql |
创建集群 | create_replica_set | √ | √ | |||
查询状态 | get_replica_set | √ | √ | |||
添加实例 | add_instance | √ | √ | 5.7不支持"recoveryMethod=clone"选项 | ||
重新加入实例 | rejoin_instance | √ | √ | |||
删除实例 | remove_instance | √ | √ | |||
强制设置主节点 | force_primary_instance | √ | √ | |||
设置主节点 | set_primary_instance | √ | √ | |||
删除元数据 | drop_metadata_schema | √ | √ |
结论:
核心差异:
1、5.7不支持persist,需要参数预置。
2、5.7不支持"recoveryMethod=clone"选项,需要单独实现alldump。
Mysqlshell修改点:
1、replica_set所有API最低版本要求改为5.7。
2、用global关键字替换persist关键字。
//8.0/mysql-shell-8.0.30/modules/adminapi/common/async_topology.cc
void fence_instance(mysqlshdk::mysql::IInstance *instance) {
try {
// fence with SET PERSIST but unfence with SET GLOBAL, so that instances are
// SRO if they restart
+ if(!instance->is_set_persist_supported()) {
+ instance->set_sysvar("SUPER_READ_ONLY", true,
+ mysqlshdk::mysql::Var_qualifier::GLOBAL);
+ } else {
instance->set_sysvar("SUPER_READ_ONLY", true,
mysqlshdk::mysql::Var_qualifier::PERSIST);
+ }
} catch (const shcore::Error &e) {
throw shcore::Exception::mysql_error_with_code(e.what(), e.code());
}
void unfence_instance(mysqlshdk::mysql::IInstance *instance, bool persist) {
try {
+ if(!instance->is_set_persist_supported()) {
+ persist=false;
+ }
instance->set_sysvar("SUPER_READ_ONLY", false,
persist ? mysqlshdk::mysql::Var_qualifier::PERSIST
: mysqlshdk::mysql::Var_qualifier::GLOBAL);
// Set SUPER_READ_ONLY=1 will also set READ_ONLY
instance->set_sysvar("READ_ONLY", false,
persist ? mysqlshdk::mysql::Var_qualifier::PERSIST
: mysqlshdk::mysql::Var_qualifier::GLOBAL);
} catch (const shcore::Error &e) {
throw shcore::Exception::mysql_error_with_code(e.what(), e.code());
}
}
//8.0/mysql-shell-8.0.30/modules/adminapi/common/preconditions.h
const mysqlshdk::utils::Version k_min_ar_version =
- mysqlshdk::utils::Version("8.0");
+ mysqlshdk::utils::Version("5.7");
//8.0/mysql-shell-8.0.30/modules/adminapi/replica_set/replica_set_impl.cc
void validate_version(const Instance &target_server) {
- if (target_server.get_version() < mysqlshdk::utils::Version(8, 0, 11) ||
+ if (target_server.get_version() < mysqlshdk::utils::Version(5, 7, 0) ||
target_server.get_version() >= mysqlshdk::utils::Version(8, 1, 0)) {
current_console()->print_info(
"MySQL version " + target_server.get_version().get_full() +
" detected at " + target_server.get_canonical_address() +
", but 8.0 is required for InnoDB ReplicaSets.");
throw shcore::Exception("Unsupported MySQL version",
SHERR_DBA_BADARG_VERSION_NOT_SUPPORTED);
}
}
teledb-go支持5.7所需工作:
1、修改Mysqlshell8.0.30,版本迭代维护
2、5.7mysql配置文件增加预置参数
3、teledb-go增加alldump的实现
4、5.7制品中加入Mysqlshell依赖(lib,bin**,share),5.7流水线依赖8.0的输出。**
8.0测试结果
cluster
配置实例
dba.configure_local_instance("RDS_agent:RWX6np48QajVX!2o@172.17.0.10:5731",{"clearReadOnly": "True"})
创建集群
dba.create_cluster('test_cluster_80',{
"multiPrimary": "false",
"force": "false",
"memberSslMode": "REQUIRED",
"localAddress": "172.17.0.10:5732",
"ipWhitelist": "172.0.0.0/8",
"communicationStack": "xcom"
}).status()
查询状态
dba.get_cluster('test_cluster_80').status()
添加实例
dba.get_cluster('test_cluster_80').add_instance('172.17.0.11:5731', {
"memberSslMode": "REQUIRED",
"recoveryMethod": "clone",
"memberWeight": 50,
"label": "172.17.0.11:5741",
"localAddress": "172.17.0.11:5732",
"ipWhitelist": "172.0.0.0/8",
})
删除实例
dba.get_cluster('test_cluster_80').remove_instance('172.17.0.11:5731',{"force": "True"})
解散集群
dba.get_cluster('test_cluster_80').dissolve({"force":"True", "interactive":"False"})
设置主节点
dba.get_cluster('test_cluster_80').set_primary_instance('172.17.0.11:5731')
重新加入实例
dba.get_cluster('test_cluster_80').rejoin_instance('172.17.0.11:5731',{"memberSslMode": "REQUIRED",
"ipWhitelist": "172.0.0.0/8",})
重启集群
dba.reboot_cluster_from_complete_outage('test_cluster_80')
从仲裁丢失中恢复群集
dba.get_cluster('test_cluster_80').force_quorum_using_partition_of('RDS_agent:Fj40qz0n68bfrBO6@172.17.0.10:5731')
重新扫描集群
dba.get_cluster('test_cluster_80').rescan({"addInstances": "auto"})
replica_set
配置实例
dba.configure_replica_set_instance("RDS_agent:H11u60z3gq0Mpcd3@172.17.0.11:5731")
创建集群
dba.create_replica_set("test_replica_set_80",{
"instanceLabel": "172.17.0.10:5741"
}).status({"extended":2})
查询状态
dba.get_replica_set().status({"extended":2})
添加实例
dba.get_replica_set().add_instance('172.17.0.11:5731',{
"recoveryMethod": "clone",
"label": "172.17.0.11:5741"})
重新加入实例
dba.get_replica_set().rejoin_instance('172.17.0.11:5731',{
"recoveryMethod": "clone"
})
删除实例
dba.get_replica_set().remove_instance('172.17.0.11:5731',{"force": "True"})
强制设置主节点
dba.get_replica_set().force_primary_instance('172.17.0.11:5731',{
"invalidateErrorInstances":"false"
})
设置主节点
dba.get_replica_set().set_primary_instance('172.17.0.11:5731', {"timeout": 100})
删除元数据
dba.drop_metadata_schema({'force': True, 'clearReadOnly': True})
5.7测试结果
cluster
配置实例
dba.configure_local_instance("RDS_agent:H11u60z3gq0Mpcd3@172.17.0.11:5731",{"clearReadOnly": "True"})
5.7版本中缺少auto.cnf文件,无法实现自动修改配置文件
需执行dba.configure_local_instance()前手动修改mysql配置文件,加入
binlog_checksum = NONE
transaction_write_set_extraction = XXHASH64
重启mysql
创建集群
dba.create_cluster('test_cluster_57',{
"multiPrimary": "false",
"force": "false",
"memberSslMode": "REQUIRED",
"localAddress": "172.17.0.11:5732",
"ipWhitelist": "172.0.0.0/8",
}).status()
查询状态
dba.get_cluster('test_cluster_57').status()
添加实例
dba.get_cluster('test_cluster_57').add_instance('172.17.0.10:5731', {
"memberSslMode": "REQUIRED",
"memberWeight": 50,
"label": "172.17.0.10:5741",
"localAddress": "172.17.0.10:5732",
"ipWhitelist": "172.0.0.0/8",
})
删除实例
dba.get_cluster('test_cluster_57').remove_instance('172.17.0.10:5731',{"force": "True"})
解散集群
dba.get_cluster('test_cluster_57').dissolve({"force":"True", "interactive":"False"})
设置主节点(不支持)
dba.get_cluster('test_cluster_57').set_primary_instance('172.17.0.10:5731')
重新加入实例
dba.get_cluster('test_cluster_57').rejoin_instance('172.17.0.10:5731',{"memberSslMode": "REQUIRED",
"ipWhitelist": "172.0.0.0/8",})
重启集群
dba.reboot_cluster_from_complete_outage('test_cluster_57')
从仲裁丢失中恢复群集
dba.get_cluster('test_cluster_57').force_quorum_using_partition_of("RDS_agent:H11u60z3gq0Mpcd3@172.17.0.11:5731")
重新扫描集群
dba.get_cluster('test_cluster_57').rescan({"addInstances": "auto"})
replica_set(5.7不支持)
修改mysqlshell源码支持5.7测试结果
cluster
配置实例
dba.configure_local_instance("RDS_agent:JONAu!83X1vfb75b@172.17.0.11:5731",{"clearReadOnly": "True"})
创建集群
dba.create_cluster('test_cluster_57',{
"multiPrimary": "false",
"force": "false",
"memberSslMode": "REQUIRED",
"localAddress": "172.17.0.11:5732",
"ipWhitelist": "172.0.0.0/8",
}).status()
查询状态
dba.get_cluster('test_cluster_57').status()
添加实例
dba.get_cluster('test_cluster_57').add_instance('172.17.0.10:5731', {
"memberSslMode": "REQUIRED",
"memberWeight": 50,
"label": "172.17.0.10:5741",
"localAddress": "172.17.0.10:5732",
"ipWhitelist": "172.0.0.0/8",
})
删除实例
dba.get_cluster('test_cluster_57').remove_instance('172.17.0.10:5731',{"force": "True"})
解散集群
dba.get_cluster('test_cluster_57').dissolve({"force":"True", "interactive":"False"})
设置主节点(不支持)
dba.get_cluster('test_cluster_57').set_primary_instance('172.17.0.10:5731')
重新加入实例
dba.get_cluster('test_cluster_57').rejoin_instance('172.17.0.10:5731',{"memberSslMode": "REQUIRED",
"ipWhitelist": "172.0.0.0/8",})
重启集群
dba.reboot_cluster_from_complete_outage('test_cluster_57')
从仲裁丢失中恢复群集
dba.get_cluster('test_cluster_57').force_quorum_using_partition_of("RDS_agent:JONAu!83X1vfb75b@172.17.0.11:5731")
重新扫描集群
dba.get_cluster('test_cluster_57').rescan({"addInstances": "auto"})
replica_set
配置实例
dba.configure_replica_set_instance("RDS_agent:JONAu!83X1vfb75b@172.17.0.11:5731")
创建集群
dba.create_replica_set("test_replica_set_57",{
"instanceLabel": "172.17.0.11:5741"
}).status({"extended":2})
查询状态
dba.get_replica_set().status({"extended":2})
添加实例
dba.get_replica_set().add_instance('172.17.0.10:5731',{
"label": "172.17.0.10:5741"})
重新加入实例
dba.get_replica_set().rejoin_instance('172.17.0.11:5731',{})
删除实例
dba.get_replica_set().remove_instance('172.17.0.10:5731',{"force": "True"})
强制设置主节点
dba.get_replica_set().force_primary_instance('172.17.0.10:5731',{
"invalidateErrorInstances":"false"
})
设置主节点
dba.get_replica_set().set_primary_instance('172.17.0.10:5731', {"timeout": 100})
删除元数据
dba.drop_metadata_schema({'force': True, 'clearReadOnly': True})