Browse code

Use iniset for changing my.conf and avoid deprecated config options

The mysql config file is using INI format so use the iniset function to
manipulate it. This change also rearranges the config updates a bit
allowing us to make mulitple changes in a single sudo call. This reduces
the number of required process forks, and the number of times the 'functions'
file needs to be sourced a bit.

The "log-slow-queries" option is deprecated since mysql 5.1.29 and got
removed with 5.6.x. Use the newer slow-query-log-file/slow-query-log
settings instead. They are available since 5.1.12. This fixes a problem
with running devstack with mysql-5.6, which is e.g. part of openSUSE
13.1.

Change-Id: Iea28bf05c664b5387d51dae1a63a780344623596

Ralf Haferkamp authored on 2014/04/03 15:27:33
Showing 1 changed files
... ...
@@ -83,36 +83,28 @@ function configure_database_mysql {
83 83
 
84 84
     # Now update ``my.cnf`` for some local needs and restart the mysql service
85 85
 
86
-    # Change ‘bind-address’ from localhost (127.0.0.1) to any (0.0.0.0)
87
-    sudo sed -i '/^bind-address/s/127.0.0.1/0.0.0.0/g' $MY_CONF
86
+    # Change ‘bind-address’ from localhost (127.0.0.1) to any (0.0.0.0) and
87
+    # set default db type to InnoDB
88
+    sudo bash -c "source $TOP_DIR/functions && \
89
+        iniset $MY_CONF mysqld bind-address 0.0.0.0 && \
90
+        iniset $MY_CONF mysqld default-storage-engine InnoDB"
88 91
 
89
-    # Set default db type to InnoDB
90
-    if sudo grep -q "default-storage-engine" $MY_CONF; then
91
-        # Change it
92
-        sudo bash -c "source $TOP_DIR/functions; iniset $MY_CONF mysqld default-storage-engine InnoDB"
93
-    else
94
-        # Add it
95
-        sudo sed -i -e "/^\[mysqld\]/ a \
96
-default-storage-engine = InnoDB" $MY_CONF
97
-    fi
98 92
 
99 93
     if [[ "$DATABASE_QUERY_LOGGING" == "True" ]]; then
100 94
         echo_summary "Enabling MySQL query logging"
101 95
 
102
-        # Turn on slow query log
103
-        sudo sed -i '/log.slow.queries/d' $MY_CONF
104
-        sudo sed -i -e "/^\[mysqld\]/ a \
105
-            log-slow-queries = /var/log/mysql/mysql-slow.log" $MY_CONF
106
-
107
-        # Log all queries (any query taking longer than 0 seconds)
108
-        sudo sed -i '/long.query.time/d' $MY_CONF
109
-        sudo sed -i -e "/^\[mysqld\]/ a \
110
-            long-query-time = 0" $MY_CONF
111
-
112
-        # Log all non-indexed queries
113
-        sudo sed -i '/log.queries.not.using.indexes/d' $MY_CONF
114
-        sudo sed -i -e "/^\[mysqld\]/ a \
115
-            log-queries-not-using-indexes" $MY_CONF
96
+        sudo sed -e '/log.slow.queries/d' \
97
+            -e '/long.query.time/d' \
98
+            -e '/log.queries.not.using.indexes/d' \
99
+            -i $MY_CONF
100
+
101
+        # Turn on slow query log, log all queries (any query taking longer than
102
+        # 0 seconds) and log all non-indexed queries
103
+        sudo bash -c "source $TOP_DIR/functions && \
104
+            iniset $MY_CONF mysqld slow-query-log 1 && \
105
+            iniset $MY_CONF mysqld slow-query-log-file /var/log/mysql/mysql-slow.log && \
106
+            iniset $MY_CONF mysqld long-query-time 0 && \
107
+            iniset $MY_CONF mysqld log-queries-not-using-indexes 1"
116 108
 
117 109
     fi
118 110