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

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

    Details

    • Type: Bug
    • Status: Open
    • Priority: Major
    • Resolution: Unresolved
    • Affects Version/s: 10.0.21, 10.1.6, 5.5.45
    • Fix Version/s: 10.1, 10.0, 5.5
    • Component/s: Scripts & Clients
    • Labels:
      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

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

        Gliffy Diagrams

          Attachments

            Activity

            Hide
            GeoffMontee Geoff Montee added a comment -

            Pull request for 5.5 is here: https://github.com/MariaDB/server/pull/92

            Show
            GeoffMontee Geoff Montee added a comment - Pull request for 5.5 is here: https://github.com/MariaDB/server/pull/92

              People

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

                Dates

                • Created:
                  Updated: