Cách chính xác để hoàn nguyên chế độ nghiêm ngặt Mysql 5.7 trở lại như thế nào trong phiên bản 5.6?


10

Tôi đã nâng cấp máy chủ của chúng tôi lên Ubuntu 16, bao gồm Mysql 5.7 và theo mặc định, Chế độ nghiêm ngặt được bật (mặc dù không có mục nào cho nó trong bất kỳ tệp cấu hình nào).

Chúng tôi đang gặp sự cố khi nhập cơ sở dữ liệu đang được sản xuất theo mysql 5.6 trở về trước và do chế độ nghiêm ngặt. Theo mặc định, đây là những gì được kích hoạt:

STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ONLY_FULL_GROUP_BY

Làm cách nào tôi có thể định cấu hình mysql 5.7 để hoạt động chính xác như đã làm trong 5.6 hoặc để cơ sở dữ liệu từ 5.6 tương thích với 5.7?


Hãy thử câu trả lời này: stackoverflow.com/a 432426883/534883 mặc dù nó dành cho OSX, nó hoạt động cho Ubuntu của tôi.
Hố

Câu trả lời:


34

Để tắt chế độ SQL nghiêm ngặt, hãy SSH vào máy chủ của bạn rootvà tạo tệp này:

/etc/mysql/conf.d/disable_strict_mode.cnf

Mở tệp và nhập hai dòng sau:

[mysqld]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

Khởi động lại MySQL bằng lệnh này:

sudo service mysql restart

Thay đổi này vô hiệu hóa hai cài đặt chế độ SQL STRICT_TRANS_TABLESONLY_FULL_GROUP_BYđược thêm vào MySQL 5.7 và gây ra sự cố cho một số ứng dụng cũ.

Xác nhận chế độ SQL nghiêm ngặt bị vô hiệu hóa

Bạn có thể xác nhận chế độ SQL nghiêm ngặt bị vô hiệu hóa bằng cách chạy lệnh này dưới dạng root:

 sudo mysql -i -BN -e 'SELECT @@sql_mode' | grep -E 'ONLY_FULL_GROUP_BY|STRICT_TRANS_TABLES'

Nếu chế độ nghiêm ngặt bị tắt, bạn sẽ không thấy bất kỳ đầu ra nào từ lệnh đó.

Nếu vô hiệu hóa chế độ nghiêm ngặt gây ra bất kỳ vấn đề nào cho bạn, bạn có thể kích hoạt lại bằng cách xóa tệp đó và khởi động lại MySQL.

Nguồn: Cách vô hiệu hóa chế độ SQL nghiêm ngặt trong MySQL 5.7


2
Đây là một câu trả lời đúng, và điều này nên được đánh dấu là chấp nhận.
budhajeewa

Tại sao chạy lệnh mysql trả về : mysql: [ERROR] Found option without preceding group in config file /etc/mysql/conf.d/disable_strict_mode.cnf at line 1!?
Abhishek Saini

1
@AbhishekSaini, hãy xem cái nàycái này .
Song phương

1
Đây là một câu trả lời. Hãy xem đây là một câu trả lời.
Lasitha Benaragama

0

Đặt sql_modetrong /etc/mysql/mysql.conf.d/mysqld.cnfmà không có STRICT_TRANS_TABLES.

Thêm vào dưới [mysqld]:

sql_mode = NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.