[MDEV-16671] mariabackup crashes if my.cnf has a plugin-load command Created: 2018-07-03  Updated: 2018-09-07  Resolved: 2018-09-07

Status: Closed
Project: MariaDB Server
Component/s: Backup
Affects Version/s: 10.2.16
Fix Version/s: 10.2.18, 10.3.10

Type: Bug Priority: Major
Reporter: Sergei Petrunia Assignee: Vladislav Vaintroub
Resolution: Fixed Votes: 0
Labels: None


 Description   

I have a my.cnf like so:

[mysqld]
skip-slave-start
 
bind-address=0.0.0.0
datadir=/home/ubuntu/data-mariadb-10.2
plugin-dir=/home/ubuntu/mariadb-10.2/storage/rocksdb
plugin-load=ha_rocksdb.so
 
log-error
lc_messages_dir=/home/ubuntu/mariadb-10.2/sql/share
 
default-storage-engine=rocksdb
default-tmp-storage-engine=MyISAM
 
log-bin=pslp
binlog-format=row
tmpdir=/tmp
port=3306
socket=/tmp/mysql.sock
gdb
server-id=12

I ran mariabackup --backup to create a backup:

./mariadb-10.2/extra/mariabackup/mariabackup --defaults-file=~/my-mariadb-10.2.cnf --user=root --socket=/tmp/mysql.sock  --backup

Then I run mariabackup --prepare

./mariadb-10.2/extra/mariabackup/mariabackup --defaults-file=~/my-mariadb-10.2.cnf --user=root --socket=/tmp/mysql.sock  --prepare

and it crashes:

Program received signal SIGSEGV, Segmentation fault.
0x0000000000000000 in ?? ()
(gdb) wher
#0  0x0000000000000000 in ?? ()
#1  0x00005555564fe40e in my_hash_insert (info=0x5555570ed4a0 <ignore_db_dirs_hash>, record=0x555557ba0180 "\220\001\272WUU") at /home/ubuntu/mariadb-10.2/mysys/hash.c:391
#2  0x0000555555c7ce0f in ignore_db_dirs_append (dirname_arg=0x7ffff50a1904 "#rocksdb") at /home/ubuntu/mariadb-10.2/sql/sql_show.cc:813
#3  0x00007ffff4bdef1d in myrocks::rocksdb_init_func (p=0x555557bd39c0) at /home/ubuntu/mariadb-10.2/storage/rocksdb/ha_rocksdb.cc:4437
#4  0x0000555555e57b2d in ha_initialize_handlerton (plugin=0x55555799f1f8) at /home/ubuntu/mariadb-10.2/sql/handler.cc:520
#5  0x0000555555c06b38 in plugin_initialize (tmp_root=0x7fffffffd460, plugin=0x55555799f1f8, argc=0x7fffffffd7bc, argv=0x5555579990a0, options_only=false)
    at /home/ubuntu/mariadb-10.2/sql/sql_plugin.cc:1416
#6  0x0000555555c07765 in plugin_init (argc=0x7fffffffd7bc, argv=0x5555579990a0, flags=2) at /home/ubuntu/mariadb-10.2/sql/sql_plugin.cc:1697
#7  0x0000555555a5d577 in encryption_plugin_init (argc=15, argv=0x5555579990a0) at /home/ubuntu/mariadb-10.2/extra/mariabackup/encryption_plugin.cc:155
#8  0x0000555555a5d4c8 in encryption_plugin_prepare_init (argc=14, argv=0x55555799f018) at /home/ubuntu/mariadb-10.2/extra/mariabackup/encryption_plugin.cc:143
#9  0x0000555555a408a8 in xtrabackup_prepare_func (argv=0x55555799f018) at /home/ubuntu/mariadb-10.2/extra/mariabackup/xtrabackup.cc:4976
#10 0x0000555555a42a8d in main_low (argv=0x55555799f018) at /home/ubuntu/mariadb-10.2/extra/mariabackup/xtrabackup.cc:5793
#11 0x0000555555a4229f in main (argc=5, argv=0x7fffffffe4f8) at /home/ubuntu/mariadb-10.2/extra/mariabackup/xtrabackup.cc:5586



 Comments   
Comment by Sergei Petrunia [ 2018-07-03 ]

It crashes because ignore_db_dirs_hash is not initialized:

(gdb) p ignore_db_dirs_hash
$3 = {key_offset = 0, key_length = 0, blength = 0, records = 0, flags = 0, array = {buffer = 0x0, elements = 0, max_element = 0, alloc_increment = 0, size_of_element = 0, 
    malloc_flags = 0}, get_key = 0x0, hash_function = 0x0, free = 0x0, charset = 0x0}

Comment by Sergei Petrunia [ 2018-07-03 ]

Takeaways from discussion with wlad:

  • mariabackup --prepare starts a haf-featured server in order to apply InnoDB's redo log.
  • It may need to load encryption plugins
  • However it does not need to load other kinds of plugins (e.g. MyRocks plugin).
  • Starting MyRocks on a partially-initialized server causes a crash.

I could run mariabackup -prepare without -defaults-file and it worked:

./mariadb-10.2/extra/mariabackup/mariabackup  --user=root --socket=/tmp/mysql.sock  --prepare

Generated at Thu Feb 08 08:30:40 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.