Details
-
Bug
-
Status: Closed (View Workflow)
-
Critical
-
Resolution: Fixed
-
10.4.7, 10.4.8, 10.4.11, 10.4(EOL)
-
None
Description
When the server is started with --plugin-load-add=server_audit and it has records in mysql.plugin referring non-existent libraries, it hangs on a release build or crashes on a debug build.
10.4 9e0ed0fa |
Trying to lock mutex at /data/src/10.4/sql/sql_plugin.cc, line 2399, when the mutex was alread
|
y locked at /data/src/10.4/sql/sql_plugin.cc, line 1854 in thread T@1
|
190701 20:58:06 [ERROR] mysqld got signal 6 ;
|
|
#5 0x00007f1adb13042a in __GI_abort () at abort.c:89
|
#6 0x00005620a7381932 in safe_mutex_lock (mp=0x5620a80e95e0 <LOCK_plugin>, my_flags=0, file=0x5620a747d330 "/data/src/10.4/sql/sql_plugin.cc", line=2399) at /data/src/10.4/mysys/thr_mutex.c:265
|
#7 0x00005620a6889ef5 in inline_mysql_mutex_lock (that=0x5620a80e95e0 <LOCK_plugin>, src_file=0x5620a747d330 "/data/src/10.4/sql/sql_plugin.cc", src_line=2399) at /data/src/10.4/include/mysql/psi/mysql_thread.h:710
|
#8 0x00005620a6890a99 in plugin_foreach_with_mask (thd=0x5620ab294120, func=0x5620a69e269f <acquire_plugins(THD*, plugin_ref, void*)>, type=5, state_mask=8, arg=0x7ffee2db8700) at /data/src/10.4/sql/sql_plugin.cc:2399
|
#9 0x00005620a69e28a1 in mysql_audit_acquire_plugins (thd=0x5620ab294120, event_class_mask=0x7ffee2db8700) at /data/src/10.4/sql/sql_audit.cc:120
|
#10 0x00005620a69e2f19 in mysql_audit_notify (thd=0x5620ab294120, event_class=0, event=0x7ffee2db8770) at /data/src/10.4/sql/sql_audit.cc:417
|
#11 0x00005620a67fd6d7 in mysql_audit_general (thd=0x5620ab294120, event_subtype=1, error_code=1126, msg=0x7ffee2db8fb0 "Can't open shared library '/data/bld/10.4-debug/lib/plugin/bar.so' (errno: 0, cannot open shared object file: No such file or directory)") at /data/src/10.4/sql/sql_audit.h:191
|
#12 0x00005620a68004e1 in THD::raise_condition (this=0x5620ab294120, sql_errno=1126, sqlstate=0x5620a74935dd "HY000", level=Sql_state_errno_level::WARN_LEVEL_ERROR, ucid=..., msg=0x7ffee2db8fb0 "Can't open shared library '/data/bld/10.4-debug/lib/plugin/bar.so' (errno: 0, cannot open shared object file: No such file or directory)") at /data/src/10.4/sql/sql_class.cc:1076
|
#13 0x00005620a674e464 in THD::raise_condition (this=0x5620ab294120, sql_errno=1126, sqlstate=0x0, level=Sql_state_errno_level::WARN_LEVEL_ERROR, msg=0x7ffee2db8fb0 "Can't open shared library '/data/bld/10.4-debug/lib/plugin/bar.so' (errno: 0, cannot open shared object file: No such file or directory)") at /data/src/10.4/sql/sql_class.h:4354
|
#14 0x00005620a67413ff in my_message_sql (error=1126, str=0x7ffee2db8fb0 "Can't open shared library '/data/bld/10.4-debug/lib/plugin/bar.so' (errno: 0, cannot open shared object file: No such file or directory)", MyFlags=64) at /data/src/10.4/sql/mysqld.cc:3371
|
#15 0x00005620a736d933 in my_error (nr=1126, MyFlags=64) at /data/src/10.4/mysys/my_error.c:125
|
#16 0x00005620a688b4ce in plugin_dl_add (dl=0x7ffee2db9b50, MyFlags=64) at /data/src/10.4/sql/sql_plugin.cc:753
|
#17 0x00005620a688c4ff in plugin_add (tmp_root=0x7ffee2dba5c0, if_not_exists=false, name=0x7ffee2db9b40, dl=0x7ffee2db9b50, MyFlags=64) at /data/src/10.4/sql/sql_plugin.cc:1100
|
#18 0x00005620a688ed03 in plugin_load (tmp_root=0x7ffee2dba5c0) at /data/src/10.4/sql/sql_plugin.cc:1855
|
#19 0x00005620a688e641 in plugin_init (argc=0x5620a80e5fd8 <remaining_argc>, argv=0x5620aa5f3a48, flags=0) at /data/src/10.4/sql/sql_plugin.cc:1734
|
#20 0x00005620a6744cce in init_server_components () at /data/src/10.4/sql/mysqld.cc:5202
|
#21 0x00005620a6745e99 in mysqld_main (argc=12, argv=0x5620aa5f3a48) at /data/src/10.4/sql/mysqld.cc:5725
|
#22 0x00005620a673a730 in main (argc=12, argv=0x7ffee2dbb008) at /data/src/10.4/sql/main.cc:25
|
The test case below is artificial, but there is a quite real-life scenario which represents the problem.
- on Debian/Ubuntu, install mariadb-server and mariadb-plugin-spider packages;
- add plugin-load-add=server_audit at the end of /etc/mysql/my.cnf;
- uninstall mariadb-plugin-spider
- restart the service => it hangs upon restart
Run the test case below with --plugin-load-add=server_audit
It seems important, installing it via INSTALL SONAME doesn't cause the same effect.
insert into mysql.plugin values ('foo','bar.so'); |
|
--source include/restart_mysqld.inc
|
|
# Cleanup
|
delete from mysql.plugin where name = 'foo'; |
Couldn't reproduce on 10.2-10.3.
Attachments
Issue Links
- duplicates
-
MDEV-20442 Failed to upgrade from 10.3.9 to 10.4.7
-
- Closed
-
-
MDEV-25864 After upgrading from 10.2.14 to 10.4.12, wait almost 24 hours can not open database.
-
- Closed
-
- relates to
-
MDEV-19917 Spider doesn't remove itself from mysql.plugin upon uninstallation
-
- Closed
-
-
MDEV-22406 Galera node freezes when query_response_time plugin loading
-
- Open
-
-
MDEV-21211 plugin loading error deadlock with server_audit enabled
-
- Closed
-
There is another, more "natural" way to reproduce similar hang.
1. INSTALL audit plugin "manually":
openxs@ao756:~/dbs/maria10.4$ bin/mysqld_safe --no-defaults --port=3308 --socket=/tmp/mariadb.sock &
[1] 8424
openxs@ao756:~/dbs/maria10.4$ 190810 15:53:56 mysqld_safe Logging to '/home/openxs/dbs/maria10.4/data/ao756.err'.
190810 15:53:56 mysqld_safe Starting mysqld daemon with databases from /home/openxs/dbs/maria10.4/data
openxs@ao756:~/dbs/maria10.4$ bin/mysql -uroot --socket=/tmp/mariadb.sock Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.4.8-MariaDB Source distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> select * from mysql.plugin;
Empty set (0,001 sec)
MariaDB [(none)]> INSTALL SONAME 'server_audit';
Query OK, 0 rows affected (0,049 sec)
MariaDB [(none)]> select * from mysql.plugin;
+--------------+-----------------+
| name | dl |
+--------------+-----------------+
| SERVER_AUDIT | server_audit.so |
+--------------+-----------------+
1 row in set (0,000 sec)
MariaDB [(none)]> shutdown;
Query OK, 0 rows affected (0,000 sec)
MariaDB [(none)]> exit
Bye
[1]+ Done bin/mysqld_safe --no-defaults --port=3308 --socket=/tmp/mariadb.sock
2. Restart server adding plugin_,load-add to my.cnf or command line:
openxs@ao756:~/dbs/maria10.4$ bin/mysqld_safe --no-defaults --port=3308 --socket=/tmp/mariadb.sock --plugin_load_add=server_audit --server_audit=FORCE_PLUS_PERMANENT --server-audit-logging=1 &
[1] 8861
openxs@ao756:~/dbs/maria10.4$ 190810 15:54:31 mysqld_safe Logging to '/home/openxs/dbs/maria10.4/data/ao756.err'.
190810 15:54:31 mysqld_safe Starting mysqld daemon with databases from /home/openxs/dbs/maria10.4/data
openxs@ao756:~/dbs/maria10.4$ bin/mysql -uroot --socket=/tmp/mariadb.sock ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mariadb.sock' (2)
openxs@ao756:~/dbs/maria10.4$ tail data/ao756.err
Version: '10.4.8-MariaDB' socket: '/tmp/mariadb.sock' port: 3308 Source distribution
190810 15:54:06 server_audit: MariaDB Audit Plugin version 1.4.8 STARTED.
190810 15:54:06 server_audit: Query cache is enabled with the TABLE events. Some table reads can be veiled.2019-08-10 15:54:18 0 [Note] /home/openxs/dbs/maria10.4/bin/mysqld (initiated by: root[root] @ localhost []): Normal shutdown
2019-08-10 15:54:18 0 [Note] Event Scheduler: Purging the queue. 0 events
190810 15:54:18 server_audit: STOPPED
2019-08-10 15:54:18 0 [Note] /home/openxs/dbs/maria10.4/bin/mysqld: Shutdown complete
2019-08-10 15:54:32 0 [Note] Plugin 'FEEDBACK' is disabled.
190810 15:54:32 server_audit: MariaDB Audit Plugin version 1.4.8 STARTED.
190810 15:54:32 server_audit: Query cache is enabled with the TABLE events. Some table reads can be veiled.
190810 15:54:32 server_audit: logging started to the file server_audit.log.
openxs@ao756:~/dbs/maria10.4$
So, it hangs.
3. Attach gdb and see this:
openxs@ao756:~/dbs/maria10.4$ ps aux | grep 10.4 | grep mysqld
openxs 8949 0.0 1.4 470040 56780 pts/21 Sl 15:54 0:00 /home/openxs/dbs/maria10.4/bin/mysqld --no-defaults --basedir=/home/openxs/dbs/maria10.4 --datadir=/home/openxs/dbs/maria10.4/data --plugin-dir=/home/openxs/dbs/maria10.4/lib/plugin --plugin_load_add=server_audit --server_audit=FORCE_PLUS_PERMANENT --server-audit-logging=1 --log-error=/home/openxs/dbs/maria10.4/data/ao756.err --pid-file=ao756.pid --socket=/tmp/mariadb.sock --port=3308
openxs@ao756:~/dbs/maria10.4$ sudo gdb -p 8949
[sudo] password for openxs:
GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".
Attaching to process 8949
[New LWP 8950]
[New LWP 8951]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
__lll_lock_wait () at ../sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:135
135 ../sysdeps/unix/sysv/linux/x86_64/lowlevellock.S: No such file or directory.
(gdb) bt
#0 __lll_lock_wait () at ../sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:135
#1 0x00007fcefc35defe in __GI___pthread_mutex_lock (
mutex=mutex@entry=0x561661eb7ce0 <LOCK_plugin>)
at ../nptl/pthread_mutex_lock.c:135
#2 0x00005616610b73c4 in inline_mysql_mutex_lock (
src_file=0x5616615db9d0 "/home/openxs/git/server/sql/sql_plugin.cc",
src_line=2405, that=0x561661eb7ce0 <LOCK_plugin>)
at /home/openxs/git/server/include/mysql/psi/mysql_thread.h:712
#3 plugin_foreach_with_mask (thd=thd@entry=0x561662d97a88,
func=func@entry=0x56166117df80 <acquire_plugins(THD*, plugin_ref, void*)>,
type=type@entry=5, state_mask=state_mask@entry=8,
arg=arg@entry=0x7fff8ed7dc00)
at /home/openxs/git/server/sql/sql_plugin.cc:2405
#4 0x000056166117e035 in mysql_audit_acquire_plugins (thd=0x561662d97a88,
event_class_mask=0x7fff8ed7dc00)
at /home/openxs/git/server/sql/sql_audit.cc:120
#5 0x000056166117e52f in mysql_audit_notify (thd=thd@entry=0x561662d97a88,
event_class=event_class@entry=0, event=event@entry=0x7fff8ed7dc60)
at /home/openxs/git/server/sql/sql_audit.cc:433
#6 0x000056166105d477 in mysql_audit_general (event_subtype=1,
msg=0x7fff8ed7e180 "Plugin 'SERVER_AUDIT' already installed",
error_code=1968, thd=0x561662d97a88)
at /home/openxs/git/server/sql/sql_audit.h:192
---Type <return> to continue, or q <return> to quit---
#7 THD::raise_condition (this=this@entry=0x561662d97a88,
sql_errno=sql_errno@entry=1968, sqlstate=0x5616615e31d8 "HY000",
sqlstate@entry=0x0, level=Sql_state_errno_level::WARN_LEVEL_ERROR,
ucid=...,
msg=msg@entry=0x7fff8ed7e180 "Plugin 'SERVER_AUDIT' already installed")
at /home/openxs/git/server/sql/sql_class.cc:1078
#8 0x0000561660fed554 in THD::raise_condition (
msg=0x7fff8ed7e180 "Plugin 'SERVER_AUDIT' already installed",
level=<optimized out>, sqlstate=0x0, sql_errno=1968, this=0x561662d97a88)
at /home/openxs/git/server/sql/sql_class.h:4355
#9 my_message_sql (error=1968,
str=0x7fff8ed7e180 "Plugin 'SERVER_AUDIT' already installed", MyFlags=64)
at /home/openxs/git/server/sql/mysqld.cc:3371
#10 0x000056166151dc5f in my_error (nr=nr@entry=1968, MyFlags=MyFlags@entry=64)
at /home/openxs/git/server/mysys/my_error.c:125
#11 0x00005616610b538a in plugin_add (tmp_root=tmp_root@entry=0x7fff8ed7f060,
if_not_exists=if_not_exists@entry=false, name=name@entry=0x7fff8ed7e6c0,
dl=dl@entry=0x7fff8ed7e6d0, MyFlags=MyFlags@entry=64)
at /home/openxs/git/server/sql/sql_plugin.cc:1095
#12 0x00005616610b5aae in plugin_load (tmp_root=tmp_root@entry=0x7fff8ed7f060)
at /home/openxs/git/server/sql/sql_plugin.cc:1859
#13 0x00005616610ba3dd in plugin_init (
argc=argc@entry=0x561661eb5188 <remaining_argc>, argv=0x561662c96e50,
---Type <return> to continue, or q <return> to quit---
flags=0) at /home/openxs/git/server/sql/sql_plugin.cc:1735
#14 0x0000561660ff1b19 in init_server_components ()
at /home/openxs/git/server/sql/mysqld.cc:5203
#15 0x0000561660ff835a in mysqld_main (argc=12, argv=0x561662c96e50)
at /home/openxs/git/server/sql/mysqld.cc:5726
#16 0x00007fcefb505830 in __libc_start_main (
main=0x561660fd5a00 <main(int, char**)>, argc=12, argv=0x7fff8ed7fc78,
init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>,
stack_end=0x7fff8ed7fc68) at ../csu/libc-start.c:291
#17 0x0000561660fec199 in _start ()
(gdb)