Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
5.5.45, 10.0.21, 10.1.6
-
None
Description
The mysql.server init script doesn't check all server configuration groups. This happens because it uses the following arguments to "my_print_defaults":
/usr/bin/my_print_defaults mysqld server mysql_server mysql.server
This causes a problem because the mysql.server script needs to use some of the server configuration options, such as datadir.
For example, let's say we have the following configuration file:
$ cat /etc/my.cnf.d/server.cnf
|
#
|
# These groups are read by MariaDB server.
|
# Use it for options that only the server (but not clients) should see
|
#
|
# See the examples of server my.cnf files in /usr/share/mysql/
|
#
|
|
# this is read by the standalone daemon and embedded servers
|
[server]
|
|
# this is only for the mysqld standalone daemon
|
[mysqld]
|
|
# this is only for embedded server
|
[embedded]
|
|
# This group is only read by MariaDB servers, not by MySQL.
|
# If you use the same .cnf file for MySQL and MariaDB,
|
# you can put MariaDB-only options here
|
[mariadb]
|
|
# This group is only read by MariaDB-10.0 servers.
|
# If you use the same .cnf file for MariaDB of different versions,
|
# use this group for options that older servers don't understand
|
[mariadb-10.0]
|
log_bin
|
binlog_format=ROW
|
server_id=1
|
skip_name_resolve
|
datadir=/exports/mysql
|
What does my_print_defaults give us with the arguments that mysql.server uses? Nothing, because it doesn't check the mariadb-10.0 configuration group:
$ /usr/bin/my_print_defaults mysqld server mysql_server mysql.server
|
If we instead use the --mysqld argument, then it finds the correct settings:
$ /usr/bin/my_print_defaults --mysqld
|
--log_bin
|
--binlog_format=ROW
|
--server_id=1
|
--skip_name_resolve
|
--datadir=/exports/mysql
|
A side-effect of this bug is that you can't set datadir in the mariadb-10.0 configuration group.
$ /usr/bin/my_print_defaults --mysqld | grep "datadir"
|
--datadir=/exports/mysql
|
$ sudo service mysql start
|
Starting MySQL. SUCCESS!
|
$ mysql -u root --execute="SHOW GLOBAL VARIABLES LIKE 'datadir'"
|
+---------------+-----------------+
|
| Variable_name | Value |
|
+---------------+-----------------+
|
| datadir | /var/lib/mysql/ |
|
+---------------+-----------------+
|