Kaynağa Gözat

MySQL 5.7 support. Fixes #959. Thanks Maks Skamasle!

Serghey Rodin 9 yıl önce
ebeveyn
işleme
04d617d756
2 değiştirilmiş dosya ile 26 ekleme ve 43 silme
  1. 13 6
      func/db.sh
  2. 13 37
      func/rebuild.sh

+ 13 - 6
func/db.sh

@@ -25,17 +25,20 @@ mysql_connect() {
             chmod 660 $mycnf
         fi
     fi
-    err="/tmp/e.mysql"
-    mysql --defaults-file=$mycnf -e 'SELECT VERSION()' >/dev/null 2> $err
+    mysql_out=$(mktemp)
+    mysql --defaults-file=$mycnf -e 'SELECT VERSION()' > $mysql_out 2>&1
     if [ '0' -ne "$?" ]; then
         if [ "$notify" != 'no' ]; then
-            echo -e "Can't connect to MySQL $HOST\n$(cat $err)" |\
+            echo -e "Can't connect to MySQL $HOST\n$(cat $mysql_out)" |\
                 $SENDMAIL -s "$subj" $email
         fi
+        rm -f $mysql_out
         echo "Error: Connection to $HOST failed"
         log_event  "$E_CONNECT" "$ARGUMENTS"
         exit $E_CONNECT
     fi
+    mysql_ver=$(cat $mysql_out |tail -n1 |cut -f 1 -d -)
+    rm -f $mysql_out
 }
 
 mysql_query() {
@@ -199,9 +202,13 @@ add_mysql_database() {
         IDENTIFIED BY '$dbpass'"
     mysql_query "$query" > /dev/null
 
-    query="SHOW GRANTS FOR \`$dbuser\`"
-    md5=$(mysql_query "$query" 2>/dev/null)
-    md5=$(echo "$md5" |grep 'PASSWORD' |tr ' ' '\n' |tail -n1 |cut -f 2 -d \')
+    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
 }
 
 # Create PostgreSQL database

+ 13 - 37
func/rebuild.sh

@@ -531,44 +531,20 @@ rebuild_mail_domain_conf() {
 
 # Rebuild MySQL
 rebuild_mysql_database() {
-
-    host_str=$(grep "HOST='$HOST'" $VESTA/conf/mysql.conf)
-    eval $host_str
-    if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ]; then
-        echo "Error: mysql config parsing failed"
-        if [ ! -z "$SENDMAIL" ]; then
-            echo "Can't parse MySQL DB config" | $SENDMAIL -s "$subj" $email
-        fi
-        log_event "$E_PARSING" "$ARGUMENTS"
-        exit $E_PARSING
-    fi
-
-    query='SELECT VERSION()'
-    mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
-    if [ '0' -ne "$?" ]; then
-        echo "Error: Database connection to $HOST failed"
-        if [ ! -z "$SENDMAIL" ]; then
-            echo "Database connection to MySQL host $HOST failed" |\
-                $SENDMAIL -s "$subj" $email
-        fi
-        log_event  "$E_CONNECT" "$ARGUMENTS"
-        exit $E_CONNECT
+    mysql_connect $HOST
+    mysql_query "CREATE DATABASE \`$DB\` CHARACTER SET $CHARSET" >/dev/null
+    if [ "$(echo $mysql_ver |cut -d '.' -f2)" -ge 7 ]; then
+        mysql_query "CREATE USER IF NOT EXISTS \`$DBUSER\`" >/dev/null
+        mysql_query "CREATE USER IF NOT EXISTS \`$DBUSER\`@localhost" >/dev/null
+        query="UPDATE mysql.user SET authentication_string='$MD5'"
+        query="$query WHERE User='$DBUSER'"
+    else
+        query="UPDATE mysql.user SET Password='$MD5' WHERE User='$DBUSER'"
     fi
-
-    query="CREATE DATABASE \`$DB\` CHARACTER SET $CHARSET"
-    mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
-
-    query="GRANT ALL ON \`$DB\`.* TO \`$DBUSER\`@\`%\`"
-    mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
-
-    query="GRANT ALL ON \`$DB\`.* TO \`$DBUSER\`@localhost"
-    mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
-
-    query="UPDATE mysql.user SET Password='$MD5' WHERE User='$DBUSER';"
-    mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
-
-    query="FLUSH PRIVILEGES;"
-    mysql -h $HOST -u $USER -p$PASSWORD -e "$query" > /dev/null 2>&1
+    mysql_query "GRANT ALL ON \`$DB\`.* TO \`$DBUSER\`@\`%\`" >/dev/null
+    mysql_query "GRANT ALL ON \`$DB\`.* TO \`$DBUSER\`@localhost" >/dev/null
+    mysql_query "$query" >/dev/null
+    mysql_query "FLUSH PRIVILEGES" >/dev/null
 }
 
 # Rebuild PostgreSQL