diff --git a/include/MySQL_HostGroups_Manager.h b/include/MySQL_HostGroups_Manager.h index 4b1514bc8..069e2e5d5 100644 --- a/include/MySQL_HostGroups_Manager.h +++ b/include/MySQL_HostGroups_Manager.h @@ -6,6 +6,7 @@ #include #include +#include #include "thread.h" #include "wqueue.h" @@ -313,6 +314,7 @@ class MySQL_HostGroups_Manager { umap_mysql_errors mysql_errors_umap; public: + std::mutex galera_set_writer_mutex; pthread_rwlock_t gtid_rwlock; std::unordered_map gtid_map; struct ev_async * gtid_ev_async; diff --git a/lib/MySQL_HostGroups_Manager.cpp b/lib/MySQL_HostGroups_Manager.cpp index 6056dad19..5afe66db1 100644 --- a/lib/MySQL_HostGroups_Manager.cpp +++ b/lib/MySQL_HostGroups_Manager.cpp @@ -4493,7 +4493,7 @@ void MySQL_HostGroups_Manager::update_galera_set_read_only(char *_hostname, int sprintf(query, q, info->reader_hostgroup, _hostname, _port, info->writer_hostgroup, info->backup_writer_hostgroup, info->offline_hostgroup); mydb->execute(query); //free(query); - q=(char *)"DELETE FROM mysql_servers_incoming WHERE hostname='%s' AND port=%d AND hostgroup_id in (%d, %d, %d) FROM mysql_galera_hostgroups WHERE writer_hostgroup=%d)"; + q=(char *)"DELETE FROM mysql_servers_incoming WHERE hostname='%s' AND port=%d AND hostgroup_id in (%d, %d, %d)"; //query=(char *)malloc(strlen(q)+strlen(_hostname)+64); sprintf(query,q,_hostname,_port, info->offline_hostgroup, info->backup_writer_hostgroup, info->writer_hostgroup, info->writer_hostgroup); mydb->execute(query); @@ -4555,8 +4555,7 @@ Galera_Info *MySQL_HostGroups_Manager::get_galera_node_info(int hostgroup) { } void MySQL_HostGroups_Manager::update_galera_set_writer(char *_hostname, int _port, int _writer_hostgroup) { - std::mutex local_mutex; - std::lock_guard lock(local_mutex); + std::lock_guard lock(galera_set_writer_mutex); int cols=0; int affected_rows=0; SQLite3_result *resultset=NULL; @@ -4566,7 +4565,7 @@ void MySQL_HostGroups_Manager::update_galera_set_writer(char *_hostname, int _po q=(char *)"SELECT hostgroup_id FROM mysql_servers JOIN mysql_galera_hostgroups ON hostgroup_id=writer_hostgroup OR hostgroup_id=reader_hostgroup OR hostgroup_id=backup_writer_hostgroup OR hostgroup_id=offline_hostgroup WHERE hostname='%s' AND port=%d"; query=(char *)malloc(strlen(q)+strlen(_hostname)+32); sprintf(query,q,_hostname,_port); - mydb->execute_statement(query, &error, &cols , &affected_rows , &resultset); + mydb->execute_statement(query, &error, &cols , &affected_rows , &resultset); if (error) { free(error); error=NULL; diff --git a/lib/ProxySQL_Admin.cpp b/lib/ProxySQL_Admin.cpp index bd0e9c366..7c0f13dad 100644 --- a/lib/ProxySQL_Admin.cpp +++ b/lib/ProxySQL_Admin.cpp @@ -9955,6 +9955,7 @@ void ProxySQL_Admin::load_mysql_servers_to_runtime() { } // commit all the changes MyHGM->commit(); + GloAdmin->save_mysql_servers_runtime_to_database(true); // clean up if (resultset) delete resultset;