Details
-
Bug
-
Status: Closed (View Workflow)
-
Minor
-
Resolution: Fixed
-
5.5(EOL), 10.0(EOL), 10.1(EOL), 10.2(EOL), 10.3(EOL)
Description
When using a custom memory allocator, e.g.
[mysqld_safe]
|
malloc-lib=jemalloc
|
When starting MariaDB, the mysqld_safe script attempts to learn which lib directories to use by executing mysql_config command.
However this is only provided by the MariaDB-devel package, and so isn't installed on most production servers.
As such, we get an error each time we start MariaDB, in the form of:
180703 12:52:39 mysqld_safe Can not run mysql_config --variable=pkglibdir from '/usr/bin/mysql_config'
|
MariaDB still starts OK because the mysqld_safe script also looks in the normal lib directories, where jemalloc is installed to by CentOS.
I do not think we need to see this error, as it will be common for mysql_config not to be installed. Perhaps only show the error if the allocator library isn't found in any of the normal library directories?
Attachments
Issue Links
- relates to
-
MDEV-24130 Cannot launch mariadbd via mysqld_safe
-
- Closed
-
The mysqld_safe function "set_malloc_lib()" is still broken in multiple ways in 10.5.
The first issue is that if "malloc-lib" is set to "tcmalloc" or "jemalloc", it is calling the "get_mysql_config()" function which is also mostly broken.
The "get_mysql_config()" function is trying to execute "mysql_config" on the same path as the "mysqld_safe" script which won't work on most systems as it's now included on a separate package ("libmariadb-dev-compat" on Debian) and should ideally call it by it's new name "mariadb_config".
And even if the "get_mysql_config()" function is working, it will then fail as "set_malloc_lib()" is trying to call "mariadb_config" with a parameter that does not exist anymore ("--variable=pkglibdir") :
# mariadb_config --variable=pkglibdir
mariadb_config: unrecognized option '--variable=pkglibdir'
So the whole "get_mysql_config()" function should probably be removed as it's only used here and not functional at all.
–
Another issue (at least on modern Debian/Ubuntu) is that without finding the "$pkglibdir", it can't find the library as it's not looking in the right path (/usr/lib/x86_64-linux-gnu) in the "for libdir in ..." loop, forcing the whole mysqld_safe script to do a exit 1.
–
Yet another issue with how the function work is that if there are multiple libraries matching the regular expression on :
tmp=`echo "$libdir/lib$malloc_lib.so".[0-9]`
It will return the multiple filenames separated by spaces on the $where variable making the test [ -n "$where" ] fail, forcing the whole mysqld_safe script to do a exit 1.