Browse Source

Add support for mysql 8 in db.sh and rebuild.sh (#2375)

Note: Mysql support is still missing for the installers!
Jaap Marcus 4 years ago
parent
commit
b3eeed589a
2 changed files with 114 additions and 30 deletions
  1. 107 28
      func/db.sh
  2. 7 2
      func/rebuild.sh

+ 107 - 28
func/db.sh

@@ -250,22 +250,60 @@ decrease_dbhost_values() {
 # Create MySQL database
 add_mysql_database() {
     mysql_connect $host
+    
+    mysql_ver_sub=$(echo $mysql_ver |cut -d '.' -f1)
+    mysql_ver_sub_sub=$(echo $mysql_ver |cut -d '.' -f2)
 
     query="CREATE DATABASE \`$database\` CHARACTER SET $charset"
     mysql_query "$query" > /dev/null
 
-    query="GRANT ALL ON \`$database\`.* TO \`$dbuser\`@\`%\`
-        IDENTIFIED BY '$dbpass'"
-    mysql_query "$query" > /dev/null
-
-    query="GRANT ALL ON \`$database\`.* TO \`$dbuser\`@localhost
-        IDENTIFIED BY '$dbpass'"
-    mysql_query "$query" > /dev/null
-
-    if [ "$(echo $mysql_ver |cut -d '.' -f2)" -ge 7 ]; then
-        md5=$(mysql_query "SHOW CREATE USER \`$dbuser\`" 2>/dev/null)
-        md5=$(echo "$md5" |grep password |cut -f8 -d \')
+    if [ "$mysql_fork" = "mysql" ] && [ "$mysql_ver_sub" -ge 8 ] ; then
+        query="CREATE USER \`$dbuser\`@\`%\`
+            IDENTIFIED BY '$dbpass'"
+        mysql_query "$query" > /dev/null
+    
+        query="CREATE USER \`$dbuser\`@localhost
+            IDENTIFIED BY '$dbpass'"
+        mysql_query "$query" > /dev/null
+    
+        query="GRANT ALL ON \`$database\`.* TO \`$dbuser\`@\`%\`"
+        mysql_query "$query" > /dev/null
+    
+        query="GRANT ALL ON \`$database\`.* TO \`$dbuser\`@localhost"
+        mysql_query "$query" > /dev/null
+    else
+        query="GRANT ALL ON \`$database\`.* TO \`$dbuser\`@\`%\`
+            IDENTIFIED BY '$dbpass'"
+        mysql_query "$query" > /dev/null
+    
+        query="GRANT ALL ON \`$database\`.* TO \`$dbuser\`@localhost
+            IDENTIFIED BY '$dbpass'"
+        mysql_query "$query" > /dev/null
+    fi
+    
+    
+      
+    if [ "$mysql_fork" = "mysql" ]; then
+        # mysql
+        if [ "$mysql_ver_sub" -ge 8 ] || { [ "$mysql_ver_sub" -eq 5 ] && [ "$mysql_ver_sub_sub" -ge 7 ]; } then
+            if [ "$mysql_ver_sub" -ge 8 ]; then
+                # mysql >= 8
+                md5=$(mysql_query "SHOW CREATE USER \`$dbuser\`" 2>/dev/null)
+                # echo $md5
+                md5=$(echo "$md5" |grep password |cut -f4 -d \')
+                # echo $md5
+            else
+                # mysql < 8
+                md5=$(mysql_query "SHOW CREATE USER \`$dbuser\`" 2>/dev/null)
+                md5=$(echo "$md5" |grep password |cut -f8 -d \')
+            fi
+        else
+            # mysql < 5.7
+            md5=$(mysql_query "SHOW GRANTS FOR \`$dbuser\`" 2>/dev/null)
+            md5=$(echo "$md5" |grep PASSW|tr ' ' '\n' |tail -n1 |cut -f 2 -d \')
+        fi
     else
+        # mariadb
         md5=$(mysql_query "SHOW GRANTS FOR \`$dbuser\`" 2>/dev/null)
         md5=$(echo "$md5" |grep PASSW|tr ' ' '\n' |tail -n1 |cut -f 2 -d \')
     fi
@@ -330,23 +368,64 @@ get_database_values() {
 
 # Change MySQL database password
 change_mysql_password() {
-    mysql_connect $HOST
-    query="GRANT ALL ON \`$database\`.* TO \`$DBUSER\`@\`%\`
-        IDENTIFIED BY '$dbpass'"
-    mysql_query "$query" > /dev/null
-
-    query="GRANT ALL ON \`$database\`.* TO \`$DBUSER\`@localhost
-        IDENTIFIED BY '$dbpass'"
-    mysql_query "$query" > /dev/null
-    
-if [ "$(echo $mysql_ver |cut -d '.' -f2)" -ge 7 ]; then
- 
-    md5=$(mysql_query "SHOW CREATE USER \`$DBUSER\`" 2>/dev/null)
-    md5=$(echo "$md5" |grep password |cut -f8 -d \')
-else
-    md5=$(mysql_query "SHOW GRANTS FOR \`$DBUSER\`" 2>/dev/null)
-    md5=$(echo "$md5" |grep PASSW|tr ' ' '\n' |tail -n1 |cut -f 2 -d \')
-fi
+  mysql_connect $HOST
+      
+      mysql_ver_sub=$(echo $mysql_ver |cut -d '.' -f1)
+      mysql_ver_sub_sub=$(echo $mysql_ver |cut -d '.' -f2)
+  
+      if [ "$mysql_fork" = "mysql" ]; then
+          # mysql
+          if [ "$mysql_ver_sub" -ge 8 ]; then
+              # mysql >= 8
+              query="SET PASSWORD FOR \`$DBUSER\`@\`%\` = '$dbpass'"
+              mysql_query "$query" > /dev/null
+              query="SET PASSWORD FOR \`$DBUSER\`@localhost = '$dbpass'"
+              mysql_query "$query" > /dev/null
+          else
+              # mysql < 8
+              query="GRANT ALL ON \`$database\`.* TO \`$DBUSER\`@\`%\`
+                  IDENTIFIED BY '$dbpass'"
+              mysql_query "$query" > /dev/null
+  
+              query="GRANT ALL ON \`$database\`.* TO \`$DBUSER\`@localhost
+                  IDENTIFIED BY '$dbpass'"
+              mysql_query "$query" > /dev/null
+          fi
+      else
+          # mariadb
+          query="GRANT ALL ON \`$database\`.* TO \`$DBUSER\`@\`%\`
+              IDENTIFIED BY '$dbpass'"
+          mysql_query "$query" > /dev/null
+  
+          query="GRANT ALL ON \`$database\`.* TO \`$DBUSER\`@localhost
+              IDENTIFIED BY '$dbpass'"
+          mysql_query "$query" > /dev/null
+      fi
+  
+      if [ "$mysql_fork" = "mysql" ]; then
+          # mysql
+          if [ "$mysql_ver_sub" -ge 8 ] || { [ "$mysql_ver_sub" -eq 5 ] && [ "$mysql_ver_sub_sub" -ge 7 ]; } then
+              if [ "$mysql_ver_sub" -ge 8 ]; then
+                  # mysql >= 8
+                  md5=$(mysql_query "SHOW CREATE USER \`$DBUSER\`" 2>/dev/null)
+                  # echo $md5
+                  md5=$(echo "$md5" |grep password |cut -f4 -d \')
+                  # echo $md5
+              else
+                  # mysql < 8
+                  md5=$(mysql_query "SHOW CREATE USER \`$DBUSER\`" 2>/dev/null)
+                  md5=$(echo "$md5" |grep password |cut -f8 -d \')
+              fi
+          else
+              # mysql < 5.7
+              md5=$(mysql_query "SHOW GRANTS FOR \`$DBUSER\`" 2>/dev/null)
+              md5=$(echo "$md5" |grep PASSW|tr ' ' '\n' |tail -n1 |cut -f 2 -d \')
+          fi
+      else
+          # mariadb
+          md5=$(mysql_query "SHOW GRANTS FOR \`$DBUSER\`" 2>/dev/null)
+          md5=$(echo "$md5" |grep PASSW|tr ' ' '\n' |tail -n1 |cut -f 2 -d \')
+      fi
 }
 
 # Change PostgreSQL database password

+ 7 - 2
func/rebuild.sh

@@ -719,7 +719,9 @@ rebuild_mysql_database() {
     mysql_query "CREATE DATABASE \`$DB\` CHARACTER SET $CHARSET" >/dev/null
     if [ "$mysql_fork" = "mysql" ]; then
         # mysql
-        if [ "$(echo $mysql_ver |cut -d '.' -f2)" -ge 7 ]; then
+        mysql_ver_sub=$(echo $mysql_ver |cut -d '.' -f1)
+        mysql_ver_sub_sub=$(echo $mysql_ver |cut -d '.' -f2)
+        if [ "$mysql_ver_sub" -ge 8 ] || { [ "$mysql_ver_sub" -eq 5 ] && [ "$mysql_ver_sub_sub" -ge 7 ]; } then
             # mysql >= 5.7
             mysql_query "CREATE USER IF NOT EXISTS \`$DBUSER\`" > /dev/null
             mysql_query "CREATE USER IF NOT EXISTS \`$DBUSER\`@localhost" > /dev/null
@@ -742,10 +744,13 @@ rebuild_mysql_database() {
             # mariadb = 10
             mysql_query "CREATE USER IF NOT EXISTS \`$DBUSER\` IDENTIFIED BY PASSWORD '$MD5'" > /dev/null
             mysql_query "CREATE USER IF NOT EXISTS \`$DBUSER\`@localhost IDENTIFIED BY PASSWORD '$MD5'" > /dev/null
-            query="UPDATE mysql.user SET Password='$MD5' WHERE User='$DBUSER'"
             if [ "$mysql_ver_sub_sub" -ge 4 ]; then
+                #mariadb >= 10.4
                 query="SET PASSWORD FOR '$DBUSER'@'%' = '$MD5';"
                 query2="SET PASSWORD FOR '$DBUSER'@'localhost' = '$MD5';"
+            else
+                #mariadb < 10.4
+                query="UPDATE mysql.user SET Password='$MD5' WHERE User='$DBUSER'"
             fi
         fi
     fi