mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 13:32:33 +01:00
aae4932775
As reported in MDEV-11969 "there's no way to ditch knowledge" about some domain that is no longer updated on a server. Besides being of annoyance to clutter output in DBA console stale domains can prevent the slave to connect the master as MDEV-12012 witnesses. What domain is obsolete must be evaluated by the user (DBA) according to whether the domain info is still relevant and will the domain ever receive any update. This patch introduces a method to discard obsolete gtid domains from the server binlog state. The removal requires no event group from such domain present in existing binlog files though. If there are any the containing logs must be first PURGEd in order for FLUSH BINARY LOGS DELETE_DOMAIN_ID=(list-of-domains) succeed. Otherwise the command returns an error. The list of obsolete domains can be computed through intersecting two sets - the earliest (first) binlog's Gtid_list and the current value of @@global.gtid_binlog_state - and extracting the domain id components from the intersection list items. The new DELETE_DOMAIN_ID featured FLUSH continues to rotate binlog omitting the deleted domains from the active binlog file's Gtid_list. Notice though when the command is ineffective - that none of requested to delete domain exists in the binlog state - rotation does not occur. Obsolete domain deletion is not harmful for connected slaves as long as master side binlog files *purge* is synchronized with FLUSH-DELETE_DOMAIN_ID. The slaves must have the last event from purged files processed as usual, in order not to bump later into requesting a gtid from a file which was already gone. While the command is not replicated (as ordinary FLUSH BINLOG LOGS is) slaves, even though having extra domains, won't suffer from reconnection errors thanks to master-slave gtid connection protocol allowing the master to be ignorant about a gtid domain. Should at failover such slave to be promoted into master role it may run the ex-master's FLUSH BINARY LOGS DELETE_DOMAIN_ID=(list-of-domains) to clean its own binlog state. NOTES. suite/perfschema/r/start_server_low_digest.result is re-recorded as consequence of internal parser codes changes.
91 lines
3.2 KiB
C
91 lines
3.2 KiB
C
/* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; version 2 of the License.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
|
|
|
|
#ifndef SQL_REPL_INCLUDED
|
|
#define SQL_REPL_INCLUDED
|
|
|
|
#include "rpl_filter.h"
|
|
|
|
#ifdef HAVE_REPLICATION
|
|
#include "slave.h"
|
|
|
|
typedef struct st_slave_info
|
|
{
|
|
uint32 server_id;
|
|
uint32 rpl_recovery_rank, master_id;
|
|
char host[HOSTNAME_LENGTH*SYSTEM_CHARSET_MBMAXLEN+1];
|
|
char user[USERNAME_LENGTH+1];
|
|
char password[MAX_PASSWORD_LENGTH*SYSTEM_CHARSET_MBMAXLEN+1];
|
|
uint16 port;
|
|
THD* thd;
|
|
} SLAVE_INFO;
|
|
|
|
struct slave_connection_state;
|
|
|
|
extern my_bool opt_show_slave_auth_info;
|
|
extern char *master_host, *master_info_file;
|
|
extern bool server_id_supplied;
|
|
|
|
extern int max_binlog_dump_events;
|
|
extern my_bool opt_sporadic_binlog_dump_fail;
|
|
|
|
int start_slave(THD* thd, Master_info* mi, bool net_report);
|
|
int stop_slave(THD* thd, Master_info* mi, bool net_report);
|
|
bool change_master(THD* thd, Master_info* mi, bool *master_info_added);
|
|
bool mysql_show_binlog_events(THD* thd);
|
|
int reset_slave(THD *thd, Master_info* mi);
|
|
int reset_master(THD* thd, rpl_gtid *init_state, uint32 init_state_len,
|
|
ulong next_log_number);
|
|
bool purge_master_logs(THD* thd, const char* to_log);
|
|
bool purge_master_logs_before_date(THD* thd, time_t purge_time);
|
|
bool log_in_use(const char* log_name);
|
|
void adjust_linfo_offsets(my_off_t purge_offset);
|
|
void show_binlogs_get_fields(THD *thd, List<Item> *field_list);
|
|
bool show_binlogs(THD* thd);
|
|
extern int init_master_info(Master_info* mi);
|
|
void kill_zombie_dump_threads(uint32 slave_server_id);
|
|
int check_binlog_magic(IO_CACHE* log, const char** errmsg);
|
|
|
|
struct LOAD_FILE_IO_CACHE : public IO_CACHE
|
|
{
|
|
THD* thd;
|
|
my_off_t last_pos_in_file;
|
|
bool wrote_create_file, log_delayed;
|
|
int (*real_read_function)(struct st_io_cache *,uchar *,size_t);
|
|
};
|
|
|
|
int log_loaded_block(IO_CACHE* file, uchar *Buffer, size_t Count);
|
|
int init_replication_sys_vars();
|
|
void mysql_binlog_send(THD* thd, char* log_ident, my_off_t pos, ushort flags);
|
|
|
|
#ifdef HAVE_PSI_INTERFACE
|
|
extern PSI_mutex_key key_LOCK_slave_state, key_LOCK_binlog_state;
|
|
#endif
|
|
void rpl_init_gtid_slave_state();
|
|
void rpl_deinit_gtid_slave_state();
|
|
void rpl_init_gtid_waiting();
|
|
void rpl_deinit_gtid_waiting();
|
|
int gtid_state_from_binlog_pos(const char *name, uint32 pos, String *out_str);
|
|
int rpl_append_gtid_state(String *dest, bool use_binlog);
|
|
int rpl_load_gtid_state(slave_connection_state *state, bool use_binlog);
|
|
bool rpl_gtid_pos_check(THD *thd, char *str, size_t len);
|
|
bool rpl_gtid_pos_update(THD *thd, char *str, size_t len);
|
|
#else
|
|
|
|
struct LOAD_FILE_IO_CACHE : public IO_CACHE { };
|
|
|
|
#endif /* HAVE_REPLICATION */
|
|
|
|
#endif /* SQL_REPL_INCLUDED */
|