[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: |
|
||||||||
| Description |
|
When using a custom memory allocator, e.g.
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:
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") :
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 :
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 ] | |||
| 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 |