MySQL 9.1.0
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 "my_bitmap.h"
32#include "my_dbug.h"
33#include "my_inttypes.h"
34#include "my_psi_config.h"
35#include "my_thread.h" // my_start_routine
36#include "mysql.h" // MYSQL
38#include "mysql_com.h"
40#include "sql/current_thd.h"
41#include "sql/debug_sync.h"
42
43class Master_info;
44class Relay_log_info;
45class THD;
46struct LEX_SOURCE_INFO;
47struct mysql_cond_t;
48struct mysql_mutex_t;
50
51const long mts_online_stat_period = 60 * 2;
52
54
55typedef enum {
61
62/**
63 SOURCE_DELAY can be at most (1 << 31) - 1.
64*/
65#define SOURCE_DELAY_MAX (0x7FFFFFFF)
66#if INT_MAX < 0x7FFFFFFF
67#error "don't support platforms where INT_MAX < 0x7FFFFFFF"
68#endif
69
70/**
71 @defgroup Replication Replication
72 @{
73
74 @file
75*/
76
77/**
78 Some of defines are need in parser even though replication is not
79 compiled in (embedded).
80*/
81
82/**
83 The maximum is defined as (ULONG_MAX/1000) with 4 bytes ulong
84*/
85#define REPLICA_MAX_HEARTBEAT_PERIOD 4294967
86
87#define REPLICA_NET_TIMEOUT 60
88
89#define MAX_SLAVE_ERROR 14000
90
91#define MTS_WORKER_UNDEF ((ulong)-1)
92#define MTS_MAX_WORKERS 1024
93#define MAX_SLAVE_RETRY_PAUSE 5
94
95/*
96 When using tables to store the slave workers bitmaps,
97 we use a BLOB field. The maximum size of a BLOB is:
98
99 2^16-1 = 65535 bytes => (2^16-1) * 8 = 524280 bits
100*/
101#define MTS_MAX_BITS_IN_GROUP ((1L << 19) - 8) /* 524280 */
102
103extern bool server_id_supplied;
104
105/*****************************************************************************
106
107 MySQL Replication
108
109 Replication is implemented via two types of threads:
110
111 I/O Thread - One of these threads is started for each master server.
112 They maintain a connection to their master server, read log
113 events from the master as they arrive, and queues them into
114 a single, shared relay log file. A Master_info represents
115 each of these threads.
116
117 SQL Thread - One of these threads is started and reads from the relay log
118 file, executing each event. A Relay_log_info represents this
119 thread.
120
121 Buffering in the relay log file makes it unnecessary to reread events from
122 a master server across a slave restart. It also decouples the slave from
123 the master where long-running updates and event logging are concerned--ie
124 it can continue to log new events while a slow query executes on the slave.
125
126*****************************************************************************/
127
128/*
129 # MUTEXES in replication #
130
131 JAG: TODO: This guide needs to be updated after pushing WL#10406!
132
133 ## In Multisource_info (channel_map) ##
134
135 ### m_channel_map_lock ###
136
137 This rwlock is used to protect the multi source replication data structure
138 (channel_map). Any operation reading contents from the channel_map should
139 hold the rdlock during the operation. Any operation changing the
140 channel_map (either adding/removing channels to/from the channel_map)
141 should hold the wrlock during the operation.
142
143 [init_replica() does not need it it's called early].
144
145 ## In Master_info (mi) ##
146
147 ### m_channel_lock ###
148
149 It is used to SERIALIZE ALL administrative commands of replication: START
150 SLAVE, STOP REPLICA, CHANGE REPLICATION SOURCE, RESET REPLICA,
151 delete_slave_info_objects (when mysqld stops)
152
153 This thus protects us against a handful of deadlocks, being the know ones
154 around lock_slave_threads and the mixed order they are acquired in some
155 operations:
156
157 + consider start_slave_thread() which, when starting the I/O thread,
158 releases mi->run_lock, keeps rli->run_lock, and tries to re-acquire
159 mi->run_lock.
160
161 + Same applies to stop_slave() where a stop of the I/O thread will
162 mi->run_lock, keeps rli->run_lock, and tries to re-acquire mi->run_lock.
163 For the SQL thread, the order is the opposite.
164
165 ### run_lock ###
166
167 Protects all information about the running state: slave_running, thd
168 and the existence of the I/O thread itself (to stop/start it, you need
169 this mutex).
170 Check the above m_channel_lock about locking order.
171
172 ### data_lock ###
173
174 Protects some moving members of the struct: counters (log name,
175 position).
176
177 ### tsid_lock ###
178
179 Protects the retrieved GTID set and it's TSID map from updates.
180
181 ## In Relay_log_info (rli) ##
182
183 ### run_lock ###
184
185 Same as Master_info's one. However, note that run_lock does not protect
186 Relay_log_info.run_state. That is protected by data_lock.
187 Check the above m_channel_lock about locking order.
188
189 ### data_lock ###
190
191 Protects some moving members of the struct: counters (log name,
192 position).
193
194 ## In MYSQL_BIN_LOG (mysql_bin_log,relay_log) ##
195
196 ### LOCK_log ###
197
198 This mutex should be taken when going to write to a log file. Notice that it
199 does not prevent other threads from reading from the file being written (the
200 "hot" file) or any other older file.
201
202 ### LOCK_index ###
203
204 This mutex should be taken when going to create/delete a log file (as those
205 operations will update the .index file).
206
207 ### LOCK_binlog_end_pos ###
208
209 This mutex protects the access to the binlog_end_pos variable. The variable
210 it set with the position that other threads reading from the currently active
211 log file (the "hot" one) should not cross.
212
213 ## Gtid_state (gtid_state, global_tsid_map) ##
214
215 ### global_tsid_lock ###
216
217 Protects all Gtid_state GTID sets (lost_gtids, executed_gtids,
218 gtids_only_in_table, previous_gtids_logged, owned_gtids) and the global TSID
219 map from updates.
220
221 The global_tsid_lock must not be taken after LOCK_reset_gtid_table.
222
223 ## Gtid_mode (gtid_mode) ##
224
225 ### Gtid_mode::lock ###
226
227 Used to arbitrate changes on server Gtid_mode.
228
229 # Order of acquisition #
230
231 Here, we list most major functions that acquire multiple locks.
232
233 Notation: For each function, we list the locks it takes, in the
234 order it takes them. If a function holds lock A while taking lock
235 B, then we write "A, B". If a function locks A, unlocks A, then
236 locks B, then we write "A | B". If function F1 invokes function F2,
237 then we write F2's name in parentheses in the list of locks for F1.
238
239 Sys_var_gtid_mode::global_update:
240 Gtid_mode::lock.wrlock, channel_map->wrlock, binlog.LOCK_log,
241 global_tsid_lock->wrlock
242
243 change_master_cmd:
244 channel_map.wrlock, (change_master)
245
246 change_master:
247 mi.channel_wrlock, mi.run_lock, rli.run_lock, (global_init_info),
248 (purge_relay_logs), (init_relay_log_pos), rli.err_lock
249
250 global_init_info:
251 mi.data_lock, rli.data_lock
252
253 purge_relay_logs:
254 rli.data_lock, (relay_log.reset_logs)
255
256 relay_log.reset_logs:
257 .LOCK_log, .LOCK_index, .tsid_lock->wrlock
258
259 init_relay_log_pos:
260 rli.data_lock
261
262 queue_event:
263 rli.LOCK_log, relay_log.tsid_lock->rdlock, mi.data_lock
264
265 stop_slave:
266 channel_map rdlock,
267 ( mi.channel_wrlock, mi.run_lock, thd.LOCK_thd_data
268 | rli.run_lock, thd.LOCK_thd_data
269 | relay.LOCK_log
270 )
271
272 start_slave:
273 mi.channel_wrlock, mi.run_lock, rli.run_lock, rli.data_lock,
274 global_tsid_lock->wrlock
275
276 mysql_bin_log.reset_logs:
277 .LOCK_log, .LOCK_index, global_tsid_lock->wrlock
278
279 purge_relay_logs:
280 rli.data_lock, (relay.reset_logs) THD::LOCK_thd_data,
281 relay.LOCK_log, relay.LOCK_index, global_tsid_lock->wrlock
282
283 reset_binary_logs_and_gtids:
284 (binlog.reset_logs) THD::LOCK_thd_data, binlog.LOCK_log,
285 binlog.LOCK_index, global_tsid_lock->wrlock, LOCK_reset_gtid_table
286
287 reset_slave:
288 mi.channel_wrlock, mi.run_lock, rli.run_lock, (purge_relay_logs)
289 rli.data_lock, THD::LOCK_thd_data, relay.LOCK_log, relay.LOCK_index,
290 global_tsid_lock->wrlock
291
292 purge_logs:
293 .LOCK_index, LOCK_thd_list, thd.linfo.lock
294
295 [Note: purge_logs contains a known bug: LOCK_index should not be
296 taken before LOCK_thd_list. This implies that, e.g.,
297 purge_source_logs_to_file can deadlock with reset_binary_logs_and_gtids.
298 However, although purge_first_log and reset_slave take locks in reverse order,
299 they cannot deadlock because they both first acquire 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_tsid_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_tsid_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_tsid_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 source_retry_count;
351extern char slave_skip_error_names[];
352extern bool use_slave_mask;
353extern char *replica_load_tmpdir;
357extern char *opt_binlog_index_name;
358extern bool opt_skip_replica_start;
359extern bool opt_log_replica_updates;
360extern char *opt_replica_skip_errors;
363
364extern const char *relay_log_index;
365extern const char *relay_log_basename;
366
367/// @brief Helper class used to initialize the replica (includes init_replica())
368/// @details init_replica is called once during the mysqld start-up
370 public:
371 /// @brief Constructor, calls init_replica()
372 /// @param[in] opt_initialize Server option used to indicate whether mysqld
373 /// has been started with --initialize
374 /// @param[in] opt_skip_replica_start When true, skips the start of
375 /// replication threads
376 /// @param[in] filters Replication filters
377 /// @param[in] replica_skip_erors TBD
379 Rpl_channel_filters &filters, char **replica_skip_erors);
380
381 /// @brief Gets initialization code set-up at replica initialization
382 /// @return Error code obtained during the replica initialization
383 int get_initialization_code() const;
384
385 private:
386 /// @brief This function starts replication threads
387 /// @param[in] skip_replica_start When true, skips the start of replication
388 /// threads threads
389 void start_replication_threads(bool skip_replica_start = true);
390
391 /// @brief Initializes replica PSI keys in case PSI interface is available
392 static void init_replica_psi_keys();
393
394 /// @brief Performs replica initialization, creates default replication
395 /// channel and sets channel filters
396 /// @returns Error code
397 int init_replica();
398
399 /// @brief In case debug mode is on, prints channel information
400 void print_channel_info() const;
401
402 /// @brief This function starts replication threads
403 void start_threads();
404
406 false; ///< Indicates whether to initialize replica
408 false; ///< Indicates whether replica threads should be started or not
409 int m_init_code = 0; ///< Replica initialization error code
410 int m_thread_mask = 0; ///< Thread mask indicating type of the thread
411};
412
413/*
414 3 possible values for Master_info::slave_running and
415 Relay_log_info::slave_running.
416 The values 0,1,2 are very important: to keep the diff small, I didn't
417 substitute places where we use 0/1 with the newly defined symbols. So don't
418 change these values. The same way, code is assuming that in Relay_log_info we
419 use only values 0/1. I started with using an enum, but enum_variable=1; is not
420 legal so would have required many line changes.
421*/
422#define MYSQL_SLAVE_NOT_RUN 0
423#define MYSQL_SLAVE_RUN_NOT_CONNECT 1
424#define MYSQL_SLAVE_RUN_CONNECT 2
425
426/*
427 If the following is set, if first gives an error, second will be
428 tried. Otherwise, if first fails, we fail.
429*/
430#define SLAVE_FORCE_ALL 4
431
432/* @todo: see if you can change to int */
433bool start_slave_cmd(THD *thd);
434bool stop_slave_cmd(THD *thd);
435bool change_master_cmd(THD *thd);
436int change_master(THD *thd, Master_info *mi, LEX_SOURCE_INFO *lex_mi,
437 bool preserve_logs = false);
438bool reset_slave_cmd(THD *thd);
439bool show_slave_status_cmd(THD *thd);
440bool flush_relay_logs_cmd(THD *thd);
441/**
442 Re-encrypt previous relay logs with current master key for all slave channels.
443
444 @retval false Success.
445 @retval true Error.
446*/
448int flush_relay_logs(Master_info *mi, THD *thd);
449int reset_slave(THD *thd, Master_info *mi, bool reset_all);
450int reset_slave(THD *thd);
452/**
453 Call mi->init_info() and/or mi->rli->init_info(), which will read
454 the replication configuration from repositories.
455
456 This takes care of creating a transaction context in case table
457 repository is needed.
458
459 @param mi The Master_info object to use.
460
461 @param ignore_if_no_info If this is false, and the repository does
462 not exist, it will be created. If this is true, and the repository
463 does not exist, nothing is done.
464
465 @param thread_mask Indicate which repositories will be initialized:
466 if (thread_mask&REPLICA_IO)!=0, then mi->init_info is called; if
467 (thread_mask&REPLICA_SQL)!=0, then mi->rli->init_info is called.
468
469 @param force_load repositories will only read information if they
470 are not yet initialized. When true this flag forces the repositories
471 to load information from table or file.
472
473 @param skip_received_gtid_set_and_relaylog_recovery When true, skips the
474 received GTID set and relay log recovery.
475
476 @retval 0 Success
477 @retval nonzero Error
478*/
480 Master_info *mi, bool ignore_if_no_info, int thread_mask,
481 bool skip_received_gtid_set_and_relaylog_recovery = false,
482 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_REPLICA_CONNECTION *connection_param,
565 LEX_SOURCE_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/* the master variables are defaults read from my.cnf or command line */
652extern uint report_port;
653extern char *report_user;
655
657/**
658 Processing rli->gaq to find out the low-water-mark (lwm) coordinates
659 which is stored into the central recovery table. rli->data_lock will be
660 required, so the caller should not hold rli->data_lock.
661
662 @param rli pointer to Relay-log-info of Coordinator
663 @param force if true then hang in a loop till some progress
664 @retval false Success
665 @retval true Error
666*/
667bool mta_checkpoint_routine(Relay_log_info *rli, bool force);
668bool sql_slave_killed(THD *thd, Relay_log_info *rli);
669
670/*
671 Check if the error is caused by network.
672 @param[in] errorno Number of the error.
673 RETURNS:
674 true network error
675 false not network error
676*/
677bool is_network_error(uint errorno);
678
679int init_replica_thread(THD *thd, SLAVE_THD_TYPE thd_type);
680
681/// @brief Enables metric collection for replication structures
682/// It affects new and already created and running channels
684
685/// @brief Disables metric collection for replication structures
686/// It affects new and already created and running channels
688
689/**
690 @} (end of group Replication)
691*/
692#endif
Definition: rpl_mi.h:87
Definition: rpl_rli.h:206
Helper class used to initialize the replica (includes init_replica())
Definition: rpl_replica.h:369
int m_init_code
Replica initialization error code.
Definition: rpl_replica.h:409
int m_thread_mask
Thread mask indicating type of the thread.
Definition: rpl_replica.h:410
bool m_opt_skip_replica_start
Indicates whether replica threads should be started or not.
Definition: rpl_replica.h:407
bool m_opt_initialize_replica
Indicates whether to initialize replica.
Definition: rpl_replica.h:405
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:684
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:36
bool stop_slave_cmd(THD *thd)
Entry point for the STOP REPLICA command.
Definition: rpl_replica.cc:835
char * replica_load_tmpdir
Definition: rpl_replica.cc:194
QUEUE_EVENT_RESULT
Definition: rpl_replica.h:607
bool opt_log_replica_updates
Definition: mysqld.cc:1257
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:2272
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:7435
const char * relay_log_basename
Definition: rpl_replica.cc:199
bool net_request_file(NET *net, const char *fname)
Definition: rpl_replica.cc:2379
bool start_slave_threads(bool need_lock_slave, bool wait_for_start, Master_info *mi, int thread_mask)
Definition: rpl_replica.cc:2064
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:6408
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:1407
ulong source_retry_count
Definition: mysqld.cc:1658
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:1594
void start_threads()
This function starts replication threads.
Definition: rpl_replica.cc:507
bool change_master_cmd(THD *thd)
Entry point for the CHANGE REPLICATION SOURCE command.
Definition: rpl_replica.cc:10960
int load_mi_and_rli_from_repositories(Master_info *mi, bool ignore_if_no_info, int thread_mask, bool skip_received_gtid_set_and_relaylog_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:1285
char * opt_relay_logname
Definition: mysqld.cc:1660
void end_info(Master_info *mi)
Definition: rpl_replica.cc:1395
bool replicate_same_server_id
Definition: rpl_replica.cc:195
int init_replica_thread(THD *thd, SLAVE_THD_TYPE thd_type)
Definition: rpl_replica.cc:4036
int remove_info(Master_info *mi)
Definition: rpl_replica.cc:1427
char * report_password
Definition: rpl_replica.h:654
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:437
const char * print_slave_db_safe(const char *db)
Definition: rpl_replica.cc:2392
bool reencrypt_relay_logs()
Re-encrypt previous relay logs with current master key for all slave channels.
Definition: rpl_replica.cc:8716
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:7538
void disable_applier_metric_collection()
Disables metric collection for replication structures It affects new and already created and running ...
Definition: rpl_replica.cc:11339
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:8648
char * report_user
Definition: mysqld.cc:1659
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:689
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:10808
void * handle_slave_io(void *arg)
Slave IO thread entry point.
Definition: rpl_replica.cc:5297
bool reset_slave_cmd(THD *thd)
Entry function for RESET REPLICA command.
Definition: rpl_replica.cc:9291
bool is_network_error(uint errorno)
Definition: rpl_replica.cc:2398
void add_replica_skip_errors(const char *arg)
Definition: rpl_replica.cc:1643
void enable_applier_metric_collection()
Enables metric collection for replication structures It affects new and already created and running c...
Definition: rpl_replica.cc:11335
ulonglong relay_log_space_limit
Definition: rpl_replica.cc:196
bool opt_skip_replica_start
If set, slave is not autostarted.
Definition: mysqld.cc:1252
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:8542
void start_replication_threads(bool skip_replica_start=true)
This function starts replication threads.
Definition: rpl_replica.cc:501
bool show_slave_status(THD *thd)
Method to the show the replication status in all channels.
Definition: rpl_replica.cc:3726
void print_channel_info() const
In case debug mode is on, prints channel information.
Definition: rpl_replica.cc:480
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:1448
bool opt_collect_replica_applier_metrics
Definition: mysqld.cc:1260
const char * relay_log_index
Definition: rpl_replica.cc:198
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:8602
void delete_slave_info_objects()
Free all resources used by slave threads at time of executing shutdown.
Definition: rpl_replica.cc:2191
bool mts_recovery_groups(Relay_log_info *rli)
Definition: rpl_replica.cc:6152
int change_master(THD *thd, Master_info *mi, LEX_SOURCE_INFO *lex_mi, bool preserve_logs)
Execute a CHANGE REPLICATION SOURCE statement.
Definition: rpl_replica.cc:10454
bool start_slave_cmd(THD *thd)
Entry point to the START REPLICA command.
Definition: rpl_replica.cc:736
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:1483
char * report_host
Definition: mysqld.cc:1659
uint report_port
Definition: mysqld.cc:1657
bool opt_relaylog_index_name_supplied
Definition: mysqld.cc:1665
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:1988
void set_slave_thread_options(THD *thd)
Set slave thread default options.
Definition: rpl_replica.cc:3967
int get_initialization_code() const
Gets initialization code set-up at replica initialization.
Definition: rpl_replica.cc:435
bool server_id_supplied
Definition: mysqld.cc:1212
char * opt_relaylog_index_name
Definition: rpl_replica.h:354
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:8315
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:1715
int init_recovery(Master_info *mi)
Definition: rpl_replica.cc:1165
char slave_skip_error_names[]
Definition: rpl_replica.cc:192
void end_slave()
Definition: rpl_replica.cc:2160
MY_BITMAP slave_error_mask
Definition: rpl_replica.cc:191
char * opt_binlog_index_name
Definition: mysqld.cc:1689
bool show_slave_status_cmd(THD *thd)
Entry point for SHOW REPLICA STATUS command.
Definition: rpl_replica.cc:3922
void * handle_slave_sql(void *arg)
Slave SQL thread entry point.
Definition: rpl_replica.cc:6914
bool use_slave_mask
Definition: rpl_replica.cc:190
void set_slave_thread_default_charset(THD *thd, Relay_log_info const *rli)
Definition: rpl_replica.cc:4013
bool opt_relay_logname_supplied
Definition: mysqld.cc:1670
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:1258
@ 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()
Definition: mysql.cc:3375
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:65
bool opt_initialize
Definition: mysqld.cc:1251
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
const long mts_online_stat_period
Definition: rpl_replica.h:51
SLAVE_THD_TYPE
Definition: rpl_replica.h:55
@ SLAVE_THD_SQL
Definition: rpl_replica.h:57
@ SLAVE_THD_IO
Definition: rpl_replica.h:56
@ SLAVE_THD_WORKER
Definition: rpl_replica.h:58
@ SLAVE_THD_MONITOR
Definition: rpl_replica.h:59
Declarations for the Debug Sync Facility.
Structure to hold parameters for CHANGE REPLICATION SOURCE, START REPLICA, and STOP REPLICA.
Definition: sql_lex.h:354
Definition: mysql.h:300
Definition: my_bitmap.h:43
Definition: mysql_com.h:914
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:2567