[MDEV-16676] Using malloc-lib=jemalloc in MariaDB 10.2 causes non-critical error about missing mysql_config on startup Created: 2018-07-03  Updated: 2020-11-05  Resolved: 2020-10-17

Status: Closed
Project: MariaDB Server
Component/s: Server
Affects Version/s: 5.5, 10.0, 10.1, 10.2, 10.3
Fix Version/s: 10.2.35, 10.3.26, 10.4.16, 10.5.7

Type: Bug Priority: Minor
Reporter: Tom Parrott Assignee: Anel Husakovic
Resolution: Fixed Votes: 1
Labels: beginner-friendly

Issue Links:
Relates
relates to MDEV-24130 Cannot launch mariadbd via mysqld_safe Closed

 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?



 Comments   
Comment by Jean Weisbuch [ 2020-07-09 ]

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.

Comment by Anel Husakovic [ 2020-09-03 ]

danblack please review patch

Comment by Anel Husakovic [ 2020-10-06 ]

danblack, jb-boin here is a new patch 1b7e953ae5bd14 based on jb-boin observation of using ldconfig -, thanks jb-boin.

Comment by Anel Husakovic [ 2020-10-07 ]

New patch 09f46e87d25799f9b addressing the location of ldconfig and review from previous commit.

Comment by Anel Husakovic [ 2020-10-17 ]

Pushed to 10.2 with 95bb3cb886cb64be3ee5a

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