sql >> Database teknologi >  >> RDS >> Mysql

Sådan deaktiveres MySQL Strict Mode

MySQL's og MariaDB's strenge tilstand kontrollerer, hvordan ugyldige eller manglende værdier i dataændrende forespørgsler håndteres; dette inkluderer INSERT-, UPDATE- og CREATE TABLE-sætninger. Med MySQL strict mode aktiveret, som er standardtilstanden, kan ugyldige eller manglende data forårsage advarsler eller fejl, når du forsøger at behandle forespørgslen.

Når streng tilstand er deaktiveret, vil den samme forespørgsel få sine ugyldige eller manglende værdier justeret og vil frembringe en simpel advarsel. Dette kan virke som det foretrukne resultat, men med streng tilstand deaktiveret kan visse handlinger forårsage uventede resultater; for eksempel, når værdien, der indsættes, overstiger den maksimale tegngrænse, afkortes den, så den passer til grænsen.

Der er forskellige grunde til, at MySQL's strenge tilstand muligvis skal deaktiveres, men den mest almindelige er, når en server kører WHMCS - dette er et krav til dette værktøj.

Tjek før flyvning

  • Disse instruktioner er specifikt beregnet til at deaktivere MySQL strict mode på en administreret Liquid Web-server med cPanel.
  • Serveren skal køre enten MySQL 5.6/5.7 eller MariaDB 10.x
  • Kommandolinje- og rodniveauadgang via SSH vil være nødvendig for at følge denne vejledning.

Trin #1:Lav sikkerhedskopier, altid!

Når du ændrer filer på en server, er det altid bedst at tage en form for backup på forhånd. Dette sikrer, at du har en måde at fortryde ændringer, hvis noget går galt; det er også en fordel, fordi det hjælper med at spore, hvornår og hvilke ændringer der blev foretaget.

Mens du er logget på SSH med root-brugeren, skal du gøre følgende:

cp -a /usr/my.cnf{,.strict.bak}
cp -a /etc/my.cnf{,.strict.bak}

Ovenstående kommando bruger 'BASH brace expansion' for at lave en sikkerhedskopi af filen i dens oprindelige mappe.

Trin #2:Deaktiver MySQL Strict Mode

Afhængigt af serveren og de aktuelle konfigurationer skal du muligvis redigere en eller begge af følgende filer på serveren. Generelt er de relevante konfigurationslinjer kun i én af dem, men det kan være i begge uden at forårsage problemer; så generelt er det bedst at tjekke begge dele.

For at redigere filerne åbner du filen med din foretrukne kommandolinjeeditor. I dette eksempel bruger vi 'vim'.

vim /usr/my.cnf
vim /etc/my.cnf

I vim kan du trykke på "a" eller "i" for at gå ind i tekstindsættelsestilstand; ved at trykke på escape-tasten (Esc) på dit tastatur vender du tilbage til kommandotilstand. For en genopfriskning af redigering af filer med vim, se vores ny brugervejledning:Oversigt over Vim Text Editor.

Inden for hver fil ovenfor vil du lede efter en linje med følgende indhold:

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

Hvis du finder en linje, der ligner ovenstående, der indstiller variablen `sql_mode`, skal du erstatte den med følgende linje for at deaktivere MySQL strict mode.

sql_mode=""

Når denne justering er foretaget, eller du har bekræftet, at filen ikke skal justeres, gemmer og lukker du filen.

Trin #3:Genstart MySQL-tjenesten

Til sidst, for at gøre disse ændringer effektive, skal du genstarte MySQL-tjenesten, da den kun læser konfigurationsfilerne, når den indlæses. For at tvinge MySQL til at bruge de nye konfigurationsfiler skal du gøre følgende:

For CentOS 7-servere:
systemctl restart mysql

For CentOS 6 og tidligere:
/etc/init.d/mysql restart

Efter at have udstedt denne kommando på serveren genstartes MySQL-tjenesten og indlæser de foretagne ændringer. Hvis alle anvisningerne blev fulgt og fuldført, skulle MySQL strict mode nu være deaktiveret.

For at bekræfte, at processen blev gennemført korrekt, kan du køre følgende:

mysql -e "SELECT @@sql_mode;"

Outputtet kan ligne følgende:

+--------------------------------------------+
| @@sql_mode
+--------------------------------------------+
| NO_AUTO_CREATE_USER
+--------------------------------------------+

Hvis du har spørgsmål eller ikke er tryg ved at foretage disse ændringer selv, er du velkommen til at kontakte Heroic Support®.


  1. Django + Psychopg2:InterfaceError:kun protokol 3 understøttes

  2. Relationelt databasestyringssystem (RDBMS):MSSQL vs MySQL

  3. Automatisk generering af svarfil

  4. Få det aktuelle år, den aktuelle måned og den aktuelle dag i MySQL