1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-29 05:21:33 +03:00

MDEV-18465 Logging of DDL statements during backup

Many of the changes was needed to be able to collect and print engine
name and table version id's in the ddl log.
This commit is contained in:
Monty
2021-03-30 17:06:55 +03:00
committed by Sergei Golubchik
parent 496a14e187
commit 83e529eced
46 changed files with 1841 additions and 145 deletions

View File

@ -507,6 +507,16 @@ bool Sql_cmd_alter_table_exchange_partition::
char part_file_name[2*FN_REFLEN+1];
char swap_file_name[FN_REFLEN+1];
char temp_file_name[FN_REFLEN+1];
char part_table_name[NAME_LEN + 1];
char part_db[NAME_LEN + 1];
char swap_table_name[NAME_LEN + 1];
char swap_db[NAME_LEN + 1];
uchar part_tabledef_version[MY_UUID_SIZE];
uchar swap_tabledef_version[MY_UUID_SIZE];
backup_log_info ddl_log;
bzero(&ddl_log, sizeof(ddl_log));
uint swap_part_id;
uint part_file_name_len;
Alter_table_prelocking_strategy alter_prelocking_strategy;
@ -576,6 +586,35 @@ bool Sql_cmd_alter_table_exchange_partition::
HTON_TABLE_MAY_NOT_EXIST_ON_SLAVE)
force_if_exists= 1;
ddl_log.org_table.str= part_table_name;
DBUG_ASSERT(part_table->s->table_name.length <= NAME_LEN);
ddl_log.org_table.length= part_table->s->table_name.length;
strmake(part_table_name, part_table->s->table_name.str, NAME_LEN);
ddl_log.org_database.str= part_db;
DBUG_ASSERT(part_table->s->db.length <= NAME_LEN);
ddl_log.org_database.length= part_table->s->db.length;
strmake(part_db, part_table->s->db.str, NAME_LEN);
ddl_log.new_table.str= swap_table_name;
DBUG_ASSERT(swap_table->s->table_name.length <= NAME_LEN);
ddl_log.new_table.length= swap_table->s->table_name.length;
strmake(swap_table_name, swap_table->s->table_name.str, NAME_LEN);
ddl_log.new_database.str= swap_db;
DBUG_ASSERT(swap_table->s->db.length <= NAME_LEN);
ddl_log.new_database.length= swap_table->s->db.length;
strmake(swap_db, swap_table->s->db.str, NAME_LEN);
memcpy(part_tabledef_version, part_table->s->tabledef_version.str,
MY_UUID_SIZE);
ddl_log.org_table_id.str= part_tabledef_version;
ddl_log.org_table_id.length= MY_UUID_SIZE;
memcpy(swap_tabledef_version, swap_table->s->tabledef_version.str,
MY_UUID_SIZE);
ddl_log.new_table_id.str= swap_tabledef_version;
ddl_log.new_table_id.length= MY_UUID_SIZE;
/* set lock pruning on first table */
partition_name= alter_info->partition_names.head();
if (unlikely(table_list->table->part_info->
@ -586,7 +625,6 @@ bool Sql_cmd_alter_table_exchange_partition::
if (unlikely(lock_tables(thd, table_list, table_counter, 0)))
DBUG_RETURN(true);
table_hton= swap_table->file->ht;
THD_STAGE_INFO(thd, stage_verifying_table);
@ -690,6 +728,15 @@ bool Sql_cmd_alter_table_exchange_partition::
(void) exchange_name_with_ddl_log(thd, part_file_name, swap_file_name,
temp_file_name, table_hton);
}
else
{
ddl_log.query= { C_STRING_WITH_LEN("EXCHANGE_PARTITION") };
ddl_log.org_partitioned= true;
ddl_log.new_partitioned= false;
ddl_log.org_storage_engine_name= *hton_name(table_hton);
ddl_log.new_storage_engine_name= *hton_name(table_hton);
backup_log_ddl(&ddl_log);
}
thd->variables.option_bits= save_option_bits;
err: