sql >> Databáze >  >> RDS >> Mysql

Aktualizujte režim SQL v MySQL

MySQL změnilo výchozí hodnotu proměnné sql_mode od předchozích verzí, což narušuje stávající kód v několika aplikacích. Tento tutoriál vysvětluje, jak změnit sql_mode podle funkcí aplikace. Poskytuje také kroky k zachování této hodnoty při restartu serveru.

Poznámky :Můžete také sledovat výukové programy MySQL – Jak nainstalovat MySQL 8 na Ubuntu, Jak úplně odebrat MySQL z Ubuntu a Naučte se základní SQL dotazy pomocí MySQL.

Výchozí hodnota proměnné sql_mode v MySQL 8 je uvedena níže.

# Default - sql_mode
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

V mém případě možnost ONLY_FULL_GROUP_BY porušuje kód, proto jej pro demonstraci odstraním účel .

Přímá aktualizace

Můžeme přímo aktualizovat hodnotu sql_mode pomocí níže uvedených příkazů.

# Login
mysql -u root -p

# Globally
SET GLOBAL sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION";

# Session
SET SESSION sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION";

Hodnota sql_mode bude změněna pomocí výše uvedených dotazů. Problém je v tom, že proměnná získá zpět svou výchozí hodnotu při restartu serveru. Hodnotu můžeme zachovat, jak je uvedeno v další části.

Trvalá aktualizace

Hodnotu sql_mode můžeme zachovat aktualizací my.cnf soubor. Umístění tohoto souboru se liší v závislosti na prostředí serveru a verzi. Mezi nejčastější umístění tohoto souboru patří/etc/my. cnf , /etc/mysql /my.cnf a /usr /etc/my.cnf . Může být také na místní cestě uživatele ~/.my.cnf . Na svém systému s Ubuntu 18.04 LTS a MySQL 8 jsem našel tento soubor na adrese /etc/mysql /my.cnf .

Na Linux Mint 18 , umístění souboru je /usr /my.cnf . Soubor můžete také vyhledat pomocí příkazu, jak je uvedeno níže.

# Search the default config
mysqld --verbose --help | grep -A 1 "Default options"

# Output
Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf

Server MySQL se podívá na výše uvedená umístění pro výchozí konfigurace na systémové i místní úrovni. Aktualizujte soubor my.cnf, jak je znázorněno níže. Pro ukázku jsem použil nano editor účel .

# Update my.cnf
sudo nano /etc/mysql/my.cnf

# Scroll down and update the file as shown below

...
...
# # The MySQL Server configuration file. # # For explanations see # http://dev.mysql.com/doc/mysql/en/server-system-variables.html # * IMPORTANT: Additional settings that can override those from this file! # The files must end with '.cnf', otherwise they'll be ignored. # !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/ [mysqld] sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"

Nyní uložte soubor a ukončete editor. Nezapomeňte uvést [mysqld] nad proměnnou.

Restartujte server MySQL, abyste nastavili hodnotu proměnné sql_mode, jak jsme ji nakonfigurovali v souboru my.cnf, jak je uvedeno výše.

# Using init
sudo /etc/init.d/mysqld restart
# OR
sudo /etc/init.d/mysql restart

# Using service
sudo service mysql restart

# Using systemd
sudo systemctl restart mysqld.service
# OR
sudo systemctl restart mysql

Shrnutí

V tomto tutoriálu jsme aktualizovali hodnotu proměnné MySQL sql_mode a také jej trvale uchoval při restartu serveru.


  1. Knee-Jerk Performance Tuning:Stačí přidat SSD

  2. Aktualizace z MYSQL na MYSQLI

  3. Rozdělte hodnoty oddělené čárkami do sloupců v Oracle

  4. Závislosti serveru SQL