Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-8607

[PATCH] Init script doesn't check all applicable configuration groups

    XMLWordPrintable

    Details

      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

      See here: https://github.com/MariaDB/server/blob/2db62f686e148f09fe5fd0b385fc71f2a3c4a133/support-files/mysql.server.sh#L213

      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/ |
      +---------------+-----------------+

        Attachments

          Activity

            People

            Assignee:
            serg Sergei Golubchik
            Reporter:
            GeoffMontee Geoff Montee
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Dates

              Created:
              Updated:
              Resolved: