Câu hỏi Cách chính xác để hoàn nguyên chế độ nghiêm ngặt của MySQL về MySQL là 5,6 như thế nào?


Tôi đã nâng cấp máy chủ của mình 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 nhập 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 trong sản xuất dưới mysql 5.6 trở xuống và đó là do chế độ nghiêm ngặt. Theo mặc định, dưới đây là những gì được bậ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 thế nào tôi có thể cấu hình mysql 5.7 để làm việc chính xác như nó đã làm trong 5.6 hoặc để cơ sở dữ liệu từ 5.6 tương thích với 5.7?


8
2017-08-13 14:00


gốc


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


Các câu trả lời:


Để tắt chế độ SQL nghiêm ngặt, hãy SSH vào máy chủ của bạn như root và 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_TABLES và ONLY_FULL_GROUP_BY, đã được thêm vào trong MySQL 5.7 và gây ra sự cố cho một số ứng dụng cũ hơn.

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ị tắt bằng cách chạy lệnh này 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ỳ sự cố nào cho bạn, bạn có thể bật lại nó bằng cách xóa tệp đó và khởi động lại MySQL.

Nguồn: Làm thế nào để vô hiệu hóa chế độ SQL nghiêm ngặt trong MySQL 5.7


30
2017-08-13 14:15



Đây là câu trả lời đúng và điều này cần được đánh dấu là đã được 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
@AbhishekSaini, hãy xem điều này và điều này. - Bilal
Đây là câu trả lời. Vui lòng xem đây là câu trả lời. - ambarox


Để sửa đổi sql_mode, hãy mở /etc/mysql/mysql.conf.d/mysqlid.cnf

Thêm dưới [musqld] sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"


0
2018-01-24 11:02