MySQL 8.0.40
Source Code Documentation
rpl_replica.h
Go to the documentation of this file.
1/* Copyright (c) 2000, 2024, Oracle and/or its affiliates.
2
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License, version 2.0,
5 as published by the Free Software Foundation.
6
7 This program is designed to work with certain software (including
8 but not limited to OpenSSL) that is licensed under separate terms,
9 as designated in a particular file or component or in included license
10 documentation. The authors of MySQL hereby grant you an additional
11 permission to link the program and your derivative works with the
12 separately licensed software that they have either included with
13 the program or referenced in the documentation.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License, version 2.0, for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
23
24#ifndef RPL_REPLICA_H
25#define RPL_REPLICA_H
26
27#include <limits.h>
28#include <sys/types.h>
29#include <atomic>
30
31#include "m_string.h"
32#include "my_bitmap.h"
33#include "my_dbug.h"
34#include "my_inttypes.h"
35#include "my_psi_config.h"
36#include "my_thread.h" // my_start_routine
37#include "mysql.h" // MYSQL
39#include "mysql_com.h"
41#include "sql/current_thd.h"
42#include "sql/debug_sync.h"
43
44class Master_info;
45class Relay_log_info;
46class THD;
47struct LEX_MASTER_INFO;
48struct mysql_cond_t;
49struct mysql_mutex_t;
51
53
54typedef enum {
60
61/**
62 MASTER_DELAY can be at most (1 << 31) - 1.
63*/
64#define MASTER_DELAY_MAX (0x7FFFFFFF)
65#if INT_MAX < 0x7FFFFFFF
66#error "don't support platforms where INT_MAX < 0x7FFFFFFF"
67#endif
68
69/**
70 @defgroup Replication Replication
71 @{
72
73 @file
74*/
75
76/**
77 Some of defines are need in parser even though replication is not
78 compiled in (embedded).
79*/
80
81/**
82 The maximum is defined as (ULONG_MAX/1000) with 4 bytes ulong
83*/
84#define SLAVE_MAX_HEARTBEAT_PERIOD 4294967
85
86#define REPLICA_NET_TIMEOUT 60
87
88#define MAX_SLAVE_ERROR 14000
89
90#define MTS_WORKER_UNDEF ((ulong)-1)
91#define MTS_MAX_WORKERS 1024
92#define MAX_SLAVE_RETRY_PAUSE 5
93
94/*
95 When using tables to store the slave workers bitmaps,
96 we use a BLOB field. The maximum size of a BLOB is:
97
98 2^16-1 = 65535 bytes => (2^16-1) * 8 = 524280 bits
99*/
100#define MTS_MAX_BITS_IN_GROUP ((1L << 19) - 8) /* 524280 */
101
102extern bool server_id_supplied;
103
104/*****************************************************************************
105
106 MySQL Replication
107
108 Replication is implemented via two types of threads:
109
110 I/O Thread - One of these threads is started for each master server.
111 They maintain a connection to their master server, read log
112 events from the master as they arrive, and queues them into
113 a single, shared relay log file. A Master_info represents
114 each of these threads.
115
116 SQL Thread - One of these threads is started and reads from the relay log
117 file, executing each event. A Relay_log_info represents this
118 thread.
119
120 Buffering in the relay log file makes it unnecessary to reread events from
121 a master server across a slave restart. It also decouples the slave from
122 the master where long-running updates and event logging are concerned--ie
123 it can continue to log new events while a slow query executes on the slave.
124
125*****************************************************************************/
126
127/*
128 # MUTEXES in replication #
129
130 JAG: TODO: This guide needs to be updated after pushing WL#10406!
131
132 ## In Multisource_info (channel_map) ##
133
134 ### m_channel_map_lock ###
135
136 This rwlock is used to protect the multi source replication data structure
137 (channel_map). Any operation reading contents from the channel_map should
138 hold the rdlock during the operation. Any operation changing the
139 channel_map (either adding/removing channels to/from the channel_map)
140 should hold the wrlock during the operation.
141
142 [init_replica() does not need it it's called early].
143
144 ## In Master_info (mi) ##
145
146 ### m_channel_lock ###
147
148 It is used to SERIALIZE ALL administrative commands of replication: START
149 SLAVE, STOP SLAVE, CHANGE MASTER, RESET SLAVE, delete_slave_info_objects
150 (when mysqld stops)
151
152 This thus protects us against a handful of deadlocks, being the know ones
153 around lock_slave_threads and the mixed order they are acquired in some
154 operations:
155
156 + consider start_slave_thread() which, when starting the I/O thread,
157 releases mi->run_lock, keeps rli->run_lock, and tries to re-acquire
158 mi->run_lock.
159
160 + Same applies to stop_slave() where a stop of the I/O thread will
161 mi->run_lock, keeps rli->run_lock, and tries to re-acquire mi->run_lock.
162 For the SQL thread, the order is the opposite.
163
164 ### run_lock ###
165
166 Protects all information about the running state: slave_running, thd
167 and the existence of the I/O thread itself (to stop/start it, you need
168 this mutex).
169 Check the above m_channel_lock about locking order.
170
171 ### data_lock ###
172
173 Protects some moving members of the struct: counters (log name,
174 position).
175
176 ### sid_lock ###
177
178 Protects the retrieved GTID set and it's SID map from updates.
179
180 ## In Relay_log_info (rli) ##
181
182 ### run_lock ###
183
184 Same as Master_info's one. However, note that run_lock does not protect
185 Relay_log_info.run_state. That is protected by data_lock.
186 Check the above m_channel_lock about locking order.
187
188 ### data_lock ###
189
190 Protects some moving members of the struct: counters (log name,
191 position).
192
193 ## In MYSQL_BIN_LOG (mysql_bin_log,relay_log) ##
194
195 ### LOCK_log ###
196
197 This mutex should be taken when going to write to a log file. Notice that it
198 does not prevent other threads from reading from the file being written (the
199 "hot" file) or any other older file.
200
201 ### LOCK_index ###
202
203 This mutex should be taken when going to create/delete a log file (as those
204 operations will update the .index file).
205
206 ### LOCK_binlog_end_pos ###
207
208 This mutex protects the access to the binlog_end_pos variable. The variable
209 it set with the position that other threads reading from the currently active
210 log file (the "hot" one) should not cross.
211
212 ## Gtid_state (gtid_state, global_sid_map) ##
213
214 ### global_sid_lock ###
215
216 Protects all Gtid_state GTID sets (lost_gtids, executed_gtids,
217 gtids_only_in_table, previous_gtids_logged, owned_gtids) and the global SID
218 map from updates.
219
220 The global_sid_lock must not be taken after LOCK_reset_gtid_table.
221
222 ## Gtid_mode (gtid_mode) ##
223
224 ### Gtid_mode::lock ###
225
226 Used to arbitrate changes on server Gtid_mode.
227
228 # Order of acquisition #
229
230 Here, we list most major functions that acquire multiple locks.
231
232 Notation: For each function, we list the locks it takes, in the
233 order it takes them. If a function holds lock A while taking lock
234 B, then we write "A, B". If a function locks A, unlocks A, then
235 locks B, then we write "A | B". If function F1 invokes function F2,
236 then we write F2's name in parentheses in the list of locks for F1.
237
238 Sys_var_gtid_mode::global_update:
239 Gtid_mode::lock.wrlock, channel_map->wrlock, binlog.LOCK_log,
240 global_sid_lock->wrlock
241
242 change_master_cmd:
243 channel_map.wrlock, (change_master)
244
245 change_master:
246 mi.channel_wrlock, mi.run_lock, rli.run_lock, (global_init_info),
247 (purge_relay_logs), (init_relay_log_pos), rli.err_lock
248
249 global_init_info:
250 mi.data_lock, rli.data_lock
251
252 purge_relay_logs:
253 rli.data_lock, (relay_log.reset_logs)
254
255 relay_log.reset_logs:
256 .LOCK_log, .LOCK_index, .sid_lock->wrlock
257
258 init_relay_log_pos:
259 rli.data_lock
260
261 queue_event:
262 rli.LOCK_log, relay_log.sid_lock->rdlock, mi.data_lock
263
264 stop_slave:
265 channel_map rdlock,
266 ( mi.channel_wrlock, mi.run_lock, thd.LOCK_thd_data
267 | rli.run_lock, thd.LOCK_thd_data
268 | relay.LOCK_log
269 )
270
271 start_slave:
272 mi.channel_wrlock, mi.run_lock, rli.run_lock, rli.data_lock,
273 global_sid_lock->wrlock
274
275 mysql_bin_log.reset_logs:
276 .LOCK_log, .LOCK_index, global_sid_lock->wrlock
277
278 purge_relay_logs:
279 rli.data_lock, (relay.reset_logs) THD::LOCK_thd_data,
280 relay.LOCK_log, relay.LOCK_index, global_sid_lock->wrlock
281
282 reset_master:
283 (binlog.reset_logs) THD::LOCK_thd_data, binlog.LOCK_log,
284 binlog.LOCK_index, global_sid_lock->wrlock, LOCK_reset_gtid_table
285
286 reset_slave:
287 mi.channel_wrlock, mi.run_lock, rli.run_lock, (purge_relay_logs)
288 rli.data_lock, THD::LOCK_thd_data, relay.LOCK_log, relay.LOCK_index,
289 global_sid_lock->wrlock
290
291 purge_logs:
292 .LOCK_index, LOCK_thd_list, thd.linfo.lock
293
294 [Note: purge_logs contains a known bug: LOCK_index should not be
295 taken before LOCK_thd_list. This implies that, e.g.,
296 purge_source_logs_to_file can deadlock with reset_master. However,
297 although purge_first_log and reset_slave take locks in reverse
298 order, they cannot deadlock because they both first acquire
299 rli.data_lock.]
300
301 purge_source_logs_to_file, purge_source_logs_before_date, purge:
302 (binlog.purge_logs) binlog.LOCK_index, LOCK_thd_list, thd.linfo.lock
303
304 purge_first_log:
305 rli.data_lock, relay.LOCK_index, rli.log_space_lock,
306 (relay.purge_logs) LOCK_thd_list, thd.linfo.lock
307
308 MYSQL_BIN_LOG::new_file_impl:
309 .LOCK_log, .LOCK_index,
310 ( [ if binlog: LOCK_prep_xids ]
311 | global_sid_lock->wrlock
312 )
313
314 rotate_relay_log:
315 (relay.new_file_impl) relay.LOCK_log, relay.LOCK_index
316
317 kill_zombie_dump_threads:
318 LOCK_thd_list, thd.LOCK_thd_data
319
320 rli_init_info:
321 rli.data_lock,
322 ( relay.log_lock
323 | global_sid_lock->wrlock
324 | (relay.open_binlog)
325 | (init_relay_log_pos) rli.data_lock, relay.log_lock
326 )
327
328 So the DAG of lock acquisition order (not counting the buggy
329 purge_logs) is, empirically:
330
331 Gtid_mode::lock, channel_map lock, mi.run_lock, rli.run_lock,
332 ( rli.data_lock,
333 ( LOCK_thd_list,
334 (
335 ( binlog.LOCK_log, binlog.LOCK_index
336 | relay.LOCK_log, relay.LOCK_index
337 ),
338 ( rli.log_space_lock | global_sid_lock->wrlock )
339 | binlog.LOCK_log, binlog.LOCK_index, LOCK_prep_xids
340 | thd.LOCK_data
341 )
342 | mi.err_lock, rli.err_lock
343 )
344 )
345 )
346 | mi.data_lock, rli.data_lock
347*/
348
349extern ulong master_retry_count;
351extern char slave_skip_error_names[];
352extern bool use_slave_mask;
353extern char *replica_load_tmpdir;
354extern const char *master_info_file;
355extern const char *relay_log_info_file;
359extern char *opt_binlog_index_name;
360extern bool opt_skip_replica_start;
361extern bool opt_log_replica_updates;
362extern char *opt_replica_skip_errors;
364
365extern const char *relay_log_index;
366extern const char *relay_log_basename;
367
368/// @brief Helper class used to initialize the replica (includes init_replica())
369/// @details init_replica is called once during the mysqld start-up
371 public:
372 /// @brief Constructor, calls init_replica()
373 /// @param[in] opt_initialize Server option used to indicate whether mysqld
374 /// has been started with --initialize
375 /// @param[in] opt_skip_replica_start When true, skips the start of
376 /// replication threads
377 /// @param[in] filters Replication filters
378 /// @param[in] replica_skip_erors
380 Rpl_channel_filters &filters, char **replica_skip_erors);
381
382 /// @brief Gets initialization code set-up at replica initialization
383 /// @return Error code obtained during the replica initialization
384 int get_initialization_code() const;
385
386 private:
387 /// @brief This function starts replication threads
388 /// @param[in] skip_replica_start When true, skips the start of replication
389 /// threads threads
390 void start_replication_threads(bool skip_replica_start = true);
391
392 /// @brief Initializes replica PSI keys in case PSI interface is available
393 static void init_replica_psi_keys();
394
395 /// @brief Performs replica initialization, creates default replication
396 /// channel and sets channel filters
397 /// @returns Error code
398 int init_replica();
399
400 /// @brief In case debug mode is on, prints channel information
401 void print_channel_info() const;
402
403 /// @brief This function starts replication threads
404 void start_threads();
405
407 false; ///< Indicates whether to initialize replica
409 false; ///< Indicates whether replica threads should be started or not
410 int m_init_code = 0; ///< Replica initialization error code
411 int m_thread_mask = 0; ///< Thread mask indicating type of the thread
412};
413
414/*
415 3 possible values for Master_info::slave_running and
416 Relay_log_info::slave_running.
417 The values 0,1,2 are very important: to keep the diff small, I didn't
418 substitute places where we use 0/1 with the newly defined symbols. So don't
419 change these values. The same way, code is assuming that in Relay_log_info we
420 use only values 0/1. I started with using an enum, but enum_variable=1; is not
421 legal so would have required many line changes.
422*/
423#define MYSQL_SLAVE_NOT_RUN 0
424#define MYSQL_SLAVE_RUN_NOT_CONNECT 1
425#define MYSQL_SLAVE_RUN_CONNECT 2
426
427/*
428 If the following is set, if first gives an error, second will be
429 tried. Otherwise, if first fails, we fail.
430*/
431#define SLAVE_FORCE_ALL 4
432
433/* @todo: see if you can change to int */
434bool start_slave_cmd(THD *thd);
435bool stop_slave_cmd(THD *thd);
436bool change_master_cmd(THD *thd);
437int change_master(THD *thd, Master_info *mi, LEX_MASTER_INFO *lex_mi,
438 bool preserve_logs = false);
439bool reset_slave_cmd(THD *thd);
440bool show_slave_status_cmd(THD *thd);
441bool flush_relay_logs_cmd(THD *thd);
442/**
443 Re-encrypt previous relay logs with current master key for all slave channels.
444
445 @retval false Success.
446 @retval true Error.
447*/
449int flush_relay_logs(Master_info *mi, THD *thd);
450int reset_slave(THD *thd, Master_info *mi, bool reset_all);
451int reset_slave(THD *thd);
453/**
454 Call mi->init_info() and/or mi->rli->init_info(), which will read
455 the replication configuration from repositories.
456
457 This takes care of creating a transaction context in case table
458 repository is needed.
459
460 @param mi The Master_info object to use.
461
462 @param ignore_if_no_info If this is false, and the repository does
463 not exist, it will be created. If this is true, and the repository
464 does not exist, nothing is done.
465
466 @param thread_mask Indicate which repositories will be initialized:
467 if (thread_mask&SLAVE_IO)!=0, then mi->init_info is called; if
468 (thread_mask&SLAVE_SQL)!=0, then mi->rli->init_info is called.
469
470 @param force_load repositories will only read information if they
471 are not yet initialized. When true this flag forces the repositories
472 to load information from table or file.
473
474 @param skip_received_gtid_set_recovery When true, skips the received GTID
475 set recovery.
476
477 @retval 0 Success
478 @retval nonzero Error
479*/
481 Master_info *mi, bool ignore_if_no_info, int thread_mask,
482 bool skip_received_gtid_set_recovery = false, bool force_load = false);
483void end_info(Master_info *mi);
484/**
485 Clear the information regarding the `Master_info` and `Relay_log_info` objects
486 represented by the parameter, meaning, setting to `NULL` all attributes that
487 are not meant to be kept between slave resets.
488
489 @param mi the `Master_info` reference that holds both `Master_info` and
490 `Relay_log_info` data.
491 */
492void clear_info(Master_info *mi);
493int remove_info(Master_info *mi);
494/**
495 Resets the information regarding the `Master_info` and `Relay_log_info`
496 objects represented by the parameter, meaning, setting to `NULL` all
497 attributes that are not meant to be kept between slave resets and persisting
498 all other attribute values in the repository.
499
500 @param mi the `Master_info` reference that holds both `Master_info` and
501 `Relay_log_info` data.
502
503 @returns true if an error occurred and false otherwiser.
504 */
505bool reset_info(Master_info *mi);
506
507/**
508 This method flushes the current configuration for the channel into the
509 connection metadata repository. It will also flush the current contents
510 of the relay log file if instructed to.
511
512 @param mi the `Master_info` reference that holds both `Master_info` and
513 `Relay_log_info` data.
514
515 @param force shall the method ignore the server settings that limit flushes
516 to this repository
517
518 @param need_lock shall the method take the associated data lock and log lock
519 if false ownership is asserted
520
521 @param flush_relay_log should the method also flush the relay log file
522
523 @param skip_repo_persistence if this method shall skip the repository flush
524 This won't skip the relay log flush if
525 flush_relay_log = true
526
527 @returns 0 if no error occurred, !=0 if an error occurred
528*/
529int flush_master_info(Master_info *mi, bool force, bool need_lock = true,
530 bool flush_relay_log = true,
531 bool skip_repo_persistence = false);
532void add_replica_skip_errors(const char *arg);
533void set_replica_skip_errors(char **replica_skip_errors_ptr);
534int add_new_channel(Master_info **mi, const char *channel);
535/**
536 Terminates the slave threads according to the given mask.
537
538 @param mi the master info repository
539 @param thread_mask the mask identifying which thread(s) to terminate
540 @param stop_wait_timeout the timeout after which the method returns and error
541 @param need_lock_term
542 If @c false the lock will not be acquired before waiting on
543 the condition. In this case, it is assumed that the calling
544 function acquires the lock before calling this function.
545
546 @return the operation status
547 @retval 0 OK
548 @retval ER_REPLICA_NOT_RUNNING
549 The slave is already stopped
550 @retval ER_STOP_REPLICA_SQL_THREAD_TIMEOUT
551 There was a timeout when stopping the SQL thread
552 @retval ER_STOP_REPLICA_IO_THREAD_TIMEOUT
553 There was a timeout when stopping the IO thread
554 @retval ER_ERROR_DURING_FLUSH_LOGS
555 There was an error while flushing the log/repositories
556*/
557int terminate_slave_threads(Master_info *mi, int thread_mask,
558 ulong stop_wait_timeout,
559 bool need_lock_term = true);
560bool start_slave_threads(bool need_lock_slave, bool wait_for_start,
561 Master_info *mi, int thread_mask);
562bool start_slave(THD *thd);
563int stop_slave(THD *thd);
564bool start_slave(THD *thd, LEX_SLAVE_CONNECTION *connection_param,
565 LEX_MASTER_INFO *master_param, int thread_mask_input,
566 Master_info *mi, bool set_mts_settings);
567int stop_slave(THD *thd, Master_info *mi, bool net_report, bool for_one_channel,
568 bool *push_temp_table_warning);
569/*
570 cond_lock is usually same as start_lock. It is needed for the case when
571 start_lock is 0 which happens if start_slave_thread() is called already
572 inside the start_lock section, but at the same time we want a
573 mysql_cond_wait() on start_cond, start_lock
574*/
576 mysql_mutex_t *start_lock, mysql_mutex_t *cond_lock,
577 mysql_cond_t *start_cond,
578 std::atomic<uint> *slave_running,
579 std::atomic<ulong> *slave_run_id, Master_info *mi);
580
581bool show_slave_status(THD *thd, Master_info *mi);
582bool show_slave_status(THD *thd);
583
584const char *print_slave_db_safe(const char *db);
585
586void end_slave(); /* release slave threads */
587void delete_slave_info_objects(); /* clean up slave threads data */
590
591/// @brief Rotates the relay log
592/// @details Locking order:
593/// a) log_lock, log_space_lock
594/// b) log_lock, end_pos_lock
595/// @param mi Pointer to connection metadata object
596/// @param log_master_fd Information on whether rotate came from:
597/// - true - the origin is replica, this function will insert a source FDE
598/// - false - the origin is the source, we don't need to insert FDE as it
599/// will be send by the source
600/// @param need_lock When true, we acquire relay log lock,
601/// otherwise the caller must hold it
602/// @param need_log_space_lock When true, we acquire the log protecting
603/// data structures responsible for handling the relay_log_space_limit,
604/// otherwise the caller must hold it
605int rotate_relay_log(Master_info *mi, bool log_master_fd = true,
606 bool need_lock = true, bool need_log_space_lock = true);
607typedef enum {
613 ulong event_len, bool flush_mi = true);
614
616 std::string binlog_name, uint64_t position,
617 unsigned long &inc_pos, bool &do_flush_mi);
618
619extern "C" void *handle_slave_io(void *arg);
620extern "C" void *handle_slave_sql(void *arg);
621
622/*
623 SYNPOSIS
624 connect_to_master()
625
626 IMPLEMENTATION
627 Try to connect until successful or replica killed or we have retried
628
629 @param[in] thd The thread.
630 @param[in] mysql MySQL connection handle
631 @param[in] mi The Master_info object of the failed connection which
632 needs to be reconnected to the new source.
633 @param[in] reconnect If its need to reconnect to existing source.
634 @param[in] host The Host name or ip address of the source to which
635 connection need to be made.
636 @param[in] port The Port of the source to which connection need to
637 be made.
638 @param[in] is_io_thread To determine if its IO or Monitor IO thread.
639
640 @retval 0 Success connecting to the source.
641 @retval # Error connecting to the source.
642*/
644 bool suppress_warnings,
645 const std::string &host = std::string(),
646 const uint port = 0, bool is_io_thread = true);
647
648bool net_request_file(NET *net, const char *fname);
649
650extern bool replicate_same_server_id;
651
653
654/* the master variables are defaults read from my.cnf or command line */
655extern uint report_port;
656extern const char *master_info_file;
657extern const char *relay_log_info_file;
658extern char *report_user;
660
662/**
663 Processing rli->gaq to find out the low-water-mark (lwm) coordinates
664 which is stored into the central recovery table. rli->data_lock will be
665 required, so the caller should not hold rli->data_lock.
666
667 @param rli pointer to Relay-log-info of Coordinator
668 @param force if true then hang in a loop till some progress
669 @retval false Success
670 @retval true Error
671*/
672bool mta_checkpoint_routine(Relay_log_info *rli, bool force);
673bool sql_slave_killed(THD *thd, Relay_log_info *rli);
674
675/*
676 Check if the error is caused by network.
677 @param[in] errorno Number of the error.
678 RETURNS:
679 true network error
680 false not network error
681*/
682bool is_network_error(uint errorno);
683
684int init_replica_thread(THD *thd, SLAVE_THD_TYPE thd_type);
685
686/**
687 @} (end of group Replication)
688*/
689#endif
Definition: rpl_mi.h:87
Definition: rpl_rli.h:203
Helper class used to initialize the replica (includes init_replica())
Definition: rpl_replica.h:370
int m_init_code
Replica initialization error code.
Definition: rpl_replica.h:410
int m_thread_mask
Thread mask indicating type of the thread.
Definition: rpl_replica.h:411
bool m_opt_skip_replica_start
Indicates whether replica threads should be started or not.
Definition: rpl_replica.h:408
bool m_opt_initialize_replica
Indicates whether to initialize replica.
Definition: rpl_replica.h:406
The class is a container for all the per-channel filters, both a map of Rpl_filter objects and a list...
Definition: rpl_msr.h:473
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:34
Declarations for the Debug Sync Facility.
bool stop_slave_cmd(THD *thd)
Entry point for the STOP SLAVE command.
Definition: rpl_replica.cc:833
char * replica_load_tmpdir
Definition: rpl_replica.cc:186
QUEUE_EVENT_RESULT
Definition: rpl_replica.h:607
bool opt_log_replica_updates
Definition: mysqld.cc:1233
bool sql_slave_killed(THD *thd, Relay_log_info *rli)
The function analyzes a possible killed status and makes a decision whether to accept it or not.
Definition: rpl_replica.cc:2278
int heartbeat_queue_event(bool is_valid, Master_info *&mi, std::string binlog_name, uint64_t position, unsigned long &inc_pos, bool &do_flush_mi)
Definition: rpl_replica.cc:7496
const char * relay_log_basename
Definition: rpl_replica.cc:191
bool net_request_file(NET *net, const char *fname)
Definition: rpl_replica.cc:2385
bool start_slave_threads(bool need_lock_slave, bool wait_for_start, Master_info *mi, int thread_mask)
Definition: rpl_replica.cc:2065
bool mta_checkpoint_routine(Relay_log_info *rli, bool force)
Processing rli->gaq to find out the low-water-mark (lwm) coordinates which is stored into the central...
Definition: rpl_replica.cc:6451
void clear_info(Master_info *mi)
Clear the information regarding the Master_info and Relay_log_info objects represented by the paramet...
Definition: rpl_replica.cc:1405
void set_replica_skip_errors(char **replica_skip_errors_ptr)
Change arg to the string with the nice, human-readable skip error values.
Definition: rpl_replica.cc:1595
void start_threads()
This function starts replication threads.
Definition: rpl_replica.cc:510
bool change_master_cmd(THD *thd)
Entry point for the CHANGE MASTER command.
Definition: rpl_replica.cc:10984
char * opt_relay_logname
Definition: mysqld.cc:1653
void end_info(Master_info *mi)
Definition: rpl_replica.cc:1393
bool replicate_same_server_id
Definition: rpl_replica.cc:187
int init_replica_thread(THD *thd, SLAVE_THD_TYPE thd_type)
Definition: rpl_replica.cc:4052
int remove_info(Master_info *mi)
Definition: rpl_replica.cc:1425
char * report_password
Definition: rpl_replica.h:659
ReplicaInitializer(bool opt_initialize, bool opt_skip_replica_start, Rpl_channel_filters &filters, char **replica_skip_erors)
Constructor, calls init_replica()
Definition: rpl_replica.cc:440
const char * print_slave_db_safe(const char *db)
Definition: rpl_replica.cc:2398
ulong master_retry_count
Definition: mysqld.cc:1649
int change_master(THD *thd, Master_info *mi, LEX_MASTER_INFO *lex_mi, bool preserve_logs)
Execute a CHANGE MASTER statement.
Definition: rpl_replica.cc:10470
bool reencrypt_relay_logs()
Re-encrypt previous relay logs with current master key for all slave channels.
Definition: rpl_replica.cc:8747
QUEUE_EVENT_RESULT queue_event(Master_info *mi, const char *buf, ulong event_len, bool do_flush_mi)
Store an event received from the master connection into the relay log.
Definition: rpl_replica.cc:7601
int disconnect_slave_event_count
Definition: rpl_replica.cc:237
bool flush_relay_logs_cmd(THD *thd)
Entry point for FLUSH RELAYLOGS command or to flush relaylogs for the FLUSH LOGS command.
Definition: rpl_replica.cc:8679
char * report_user
Definition: mysqld.cc:1652
static void init_replica_psi_keys()
Initializes replica PSI keys in case PSI interface is available.
Definition: rpl_replica.cc:545
int stop_slave(THD *thd)
Function to stop a slave for all channels.
Definition: rpl_replica.cc:688
int add_new_channel(Master_info **mi, const char *channel)
This function is first called when the Master_info object corresponding to a channel in a multisource...
Definition: rpl_replica.cc:10819
void * handle_slave_io(void *arg)
Slave IO thread entry point.
Definition: rpl_replica.cc:5329
bool reset_slave_cmd(THD *thd)
Entry function for RESET SLAVE command.
Definition: rpl_replica.cc:9300
bool is_network_error(uint errorno)
Definition: rpl_replica.cc:2404
void add_replica_skip_errors(const char *arg)
Definition: rpl_replica.cc:1644
ulonglong relay_log_space_limit
Definition: rpl_replica.cc:188
bool opt_skip_replica_start
If set, slave is not autostarted.
Definition: mysqld.cc:1228
const char * relay_log_info_file
Definition: rpl_replica.h:657
int rotate_relay_log(Master_info *mi, bool log_master_fd, bool need_lock, bool need_log_space_lock)
Rotates the relay log.
Definition: rpl_replica.cc:8574
void start_replication_threads(bool skip_replica_start=true)
This function starts replication threads.
Definition: rpl_replica.cc:504
bool show_slave_status(THD *thd)
Method to the show the replication status in all channels.
Definition: rpl_replica.cc:3732
void print_channel_info() const
In case debug mode is on, prints channel information.
Definition: rpl_replica.cc:483
bool reset_info(Master_info *mi)
Resets the information regarding the Master_info and Relay_log_info objects represented by the parame...
Definition: rpl_replica.cc:1446
int load_mi_and_rli_from_repositories(Master_info *mi, bool ignore_if_no_info, int thread_mask, bool skip_received_gtid_set_recovery, bool force_load)
Call mi->init_info() and/or mi->rli->init_info(), which will read the replication configuration from ...
Definition: rpl_replica.cc:1283
const char * relay_log_index
Definition: rpl_replica.cc:190
int init_replica()
Performs replica initialization, creates default replication channel and sets channel filters.
Definition: rpl_replica.cc:558
int flush_relay_logs(Master_info *mi, THD *thd)
flushes the relay logs of a replication channel.
Definition: rpl_replica.cc:8634
void delete_slave_info_objects()
Free all resources used by slave threads at time of executing shutdown.
Definition: rpl_replica.cc:2192
bool mts_recovery_groups(Relay_log_info *rli)
Definition: rpl_replica.cc:6197
bool start_slave_cmd(THD *thd)
Entry point to the START SLAVE command.
Definition: rpl_replica.cc:735
int flush_master_info(Master_info *mi, bool force, bool need_lock, bool do_flush_relay_log, bool skip_repo_persistence)
This method flushes the current configuration for the channel into the connection metadata repository...
Definition: rpl_replica.cc:1484
char * report_host
Definition: mysqld.cc:1652
uint report_port
Definition: mysqld.cc:1648
bool opt_relaylog_index_name_supplied
Definition: mysqld.cc:1658
bool start_slave_thread(PSI_thread_key thread_key, my_start_routine h_func, mysql_mutex_t *start_lock, mysql_mutex_t *cond_lock, mysql_cond_t *start_cond, std::atomic< uint > *slave_running, std::atomic< ulong > *slave_run_id, Master_info *mi)
Definition: rpl_replica.cc:1989
void set_slave_thread_options(THD *thd)
Set slave thread default options.
Definition: rpl_replica.cc:3981
int get_initialization_code() const
Gets initialization code set-up at replica initialization.
Definition: rpl_replica.cc:438
bool server_id_supplied
Definition: mysqld.cc:1188
int abort_slave_event_count
Definition: rpl_replica.h:652
char * opt_relaylog_index_name
Definition: rpl_replica.h:356
int connect_to_master(THD *thd, MYSQL *mysql, Master_info *mi, bool reconnect, bool suppress_warnings, const std::string &host, const uint port, bool is_io_thread)
Definition: rpl_replica.cc:8343
int terminate_slave_threads(Master_info *mi, int thread_mask, ulong stop_wait_timeout, bool need_lock_term)
Terminates the slave threads according to the given mask.
Definition: rpl_replica.cc:1716
int init_recovery(Master_info *mi)
Definition: rpl_replica.cc:1163
char slave_skip_error_names[]
Definition: rpl_replica.cc:184
void end_slave()
Definition: rpl_replica.cc:2161
MY_BITMAP slave_error_mask
Definition: rpl_replica.cc:183
char * opt_binlog_index_name
Definition: mysqld.cc:1687
bool show_slave_status_cmd(THD *thd)
Entry point for SHOW REPLICA STATUS command.
Definition: rpl_replica.cc:3936
void * handle_slave_sql(void *arg)
Slave SQL thread entry point.
Definition: rpl_replica.cc:6965
const char * master_info_file
Definition: rpl_replica.h:656
bool use_slave_mask
Definition: rpl_replica.cc:182
void set_slave_thread_default_charset(THD *thd, Relay_log_info const *rli)
Definition: rpl_replica.cc:4029
bool opt_relay_logname_supplied
Definition: mysqld.cc:1663
bool start_slave(THD *thd)
Function to start a slave for all channels.
Definition: rpl_replica.cc:626
char * opt_replica_skip_errors
Definition: mysqld.cc:1234
@ QUEUE_EVENT_OK
Definition: rpl_replica.h:608
@ QUEUE_EVENT_ERROR_QUEUING
Definition: rpl_replica.h:609
@ QUEUE_EVENT_ERROR_FLUSHING_INFO
Definition: rpl_replica.h:610
unsigned int PSI_thread_key
Instrumented thread key.
Definition: psi_thread_bits.h:50
Some integer typedefs for easier portability.
unsigned long long int ulonglong
Definition: my_inttypes.h:56
Defines various enable/disable and HAVE_ macros related to the performance schema instrumentation sys...
Defines to make different thread packages compatible.
void *(* my_start_routine)(void *)
Definition: my_thread.h:72
static int reconnect(void)
Definition: mysql.cc:3045
This file defines the client API to MySQL and also the ABI of the dynamically linked libmysqlclient.
Common definition between mysql server & client.
const char * host
Definition: mysqladmin.cc:59
bool opt_initialize
Definition: mysqld.cc:1227
Definition: buf0block_hint.cc:30
constexpr value_type reset_slave
Definition: classic_protocol_constants.h:314
bool is_valid(const dd::Spatial_reference_system *srs, const Geometry *g, const char *func_name, bool *is_valid) noexcept
Decides if a geometry is valid.
Definition: is_valid.cc:95
Definition: instrumented_condition_variable.h:32
Definition: buffer.h:45
Performance schema instrumentation interface.
required uint64 port
Definition: replication_asynchronous_connection_failover.proto:33
SLAVE_THD_TYPE
Definition: rpl_replica.h:54
@ SLAVE_THD_SQL
Definition: rpl_replica.h:56
@ SLAVE_THD_IO
Definition: rpl_replica.h:55
@ SLAVE_THD_WORKER
Definition: rpl_replica.h:57
@ SLAVE_THD_MONITOR
Definition: rpl_replica.h:58
Structure to hold parameters for CHANGE MASTER, START SLAVE, and STOP SLAVE.
Definition: sql_lex.h:350
Definition: mysql.h:299
Definition: my_bitmap.h:43
Definition: mysql_com.h:913
Definition: task.h:427
An instrumented cond structure.
Definition: mysql_cond_bits.h:50
An instrumented mutex structure.
Definition: mysql_mutex_bits.h:50
Definition: sql_lex.h:2457
unsigned int uint
Definition: uca9-dump.cc:75