Loại bỏ nghiêm ngặt_trans_tables mysql

Nếu bạn còn nhớ bài viết của tôi Cách Vô hiệu hóa Chế độ Nghiêm ngặt của MySQL trên Laravel Forge (Ubuntu), thì bạn sẽ nhớ rằng MySQL 5. 7 đã giới thiệu một thứ mà chúng tôi tình cờ gọi là "chế độ nghiêm ngặt", đây thực sự là sự kết hợp của các chế độ mới, tóm lại, làm cho MySQL xử lý các truy vấn của bạn nghiêm ngặt hơn một chút so với trước đây

Trong bài viết trước tôi đã trình bày cách vô hiệu hóa nó trên Ubuntu, nhưng kể từ đó, Adam Wathan đã thêm một tính năng vào Laravel cho phép bạn xác định xem bạn có đang sử dụng chế độ "nghiêm ngặt" hay không và cũng cho phép bạn tùy chỉnh chính xác chế độ nào bạn muốn.

Nếu tôi có thể đặt tùy chọn cấu hình trong mã thay vì trên máy chủ mà không ảnh hưởng đến hiệu suất, thì tôi sẽ luôn thích nó hơn--tôi sẽ bớt phải làm một việc mỗi khi triển khai sang một máy chủ mới. Vì vậy, tôi hoàn toàn vui mừng vì tính năng mới này

Điều đáng chú ý là bạn có thể sử dụng tính năng này không chỉ để tắt chế độ nghiêm ngặt trên 5. 7; . 6. Có thể là khôn ngoan khi kích hoạt nó trên bất kỳ ứng dụng nào chạy trên 5. 6 để bạn có thể chuẩn bị cho 5. 7, xem có gì bị hỏng khi bạn bật một số chế độ nghiêm ngặt hơn không

mysql 5. 7 và chế độ "nghiêm ngặt"

Trước khi nói về tính năng này, hãy nhanh chóng tìm hiểu "chế độ nghiêm ngặt" nghĩa là gì

MySQL có "chế độ", mỗi chế độ kích hoạt hoặc vô hiệu hóa một hành vi nhất định. Ví dụ:

    'connections' => [
        'mysql' => [
            // Behave like MySQL 5.6
            'strict' => false,

            // Behave like MySQL 5.7
            'strict' => true,
        ]
    ]
0 là một chế độ mà bạn đoán nó sẽ báo lỗi khi bạn chia cho 0 trong phép toán chia SQL. Nếu không bật chế độ này, bạn sẽ chỉ nhận được kết quả
    'connections' => [
        'mysql' => [
            // Behave like MySQL 5.6
            'strict' => false,

            // Behave like MySQL 5.7
            'strict' => true,
        ]
    ]
1 một cách âm thầm

"Chế độ nghiêm ngặt", đây thực sự chỉ là danh sách các chế độ 5. 7 được bật theo mặc định, bao gồm các chế độ sau

ONLY_FULL_GROUP_BY
STRICT_TRANS_TABLES
NO_ZERO_IN_DATE
NO_ZERO_DATE
ERROR_FOR_DIVISION_BY_ZERO
NO_AUTO_CREATE_USER
NO_ENGINE_SUBSTITUTION

Bạn có thể tìm hiểu thêm về các chế độ này tại tài liệu về MySQL

Trước 5. 7, chế độ duy nhất được bật là

    'connections' => [
        'mysql' => [
            // Behave like MySQL 5.6
            'strict' => false,

            // Behave like MySQL 5.7
            'strict' => true,
        ]
    ]
2

Kích hoạt và vô hiệu hóa chế độ nghiêm ngặt trong Laravel 5. 2

Với tính năng mới này, Laravel hiện có khả năng thực hiện ba việc. Vô hiệu hóa chế độ "nghiêm ngặt", trở về <= 5. 6 hành vi; . 7 hành vi;

Các cài đặt này nằm trong

    'connections' => [
        'mysql' => [
            // Behave like MySQL 5.6
            'strict' => false,

            // Behave like MySQL 5.7
            'strict' => true,
        ]
    ]
3 trong phần
    'connections' => [
        'mysql' => [
            // Behave like MySQL 5.6
            'strict' => false,

            // Behave like MySQL 5.7
            'strict' => true,
        ]
    ]
4. Để bắt đầu, hãy xem xét bật và tắt chế độ "nghiêm ngặt"

    'connections' => [
        'mysql' => [
            // Behave like MySQL 5.6
            'strict' => false,

            // Behave like MySQL 5.7
            'strict' => true,
        ]
    ]

Tùy chỉnh chế độ nào được bật

Nhưng nếu bạn không hài lòng với cả 5. 6 hoặc 5. Chế độ mặc định của 7?

    'connections' => [
        'mysql' => [
            // Ignore this key and rely on the strict key
            'modes' => null,

            // Explicitly disable all modes, overriding strict setting
            'modes' => [],

            // Explicitly enable specific modes, overriding strict setting
            'modes' => [
                'STRICT_TRANS_TABLES',
                'ONLY_FULL_GROUP_BY',
            ],
        ]
    ]

Thế thôi nhé mọi người

Giờ đây, bạn có khả năng kiểm soát hoàn toàn chế độ nào được bật trên máy chủ MySQL của ứng dụng, bằng mã, mà không cần chạm vào dòng cấu hình máy chủ. cứ thế

Theo mặc định, tôi khuyên bạn nên để tất cả chúng trên. Nhưng có thể có những trường hợp với các trường hợp sử dụng cụ thể hoặc các dự án cũ mà bạn cần tùy chỉnh danh sách này và giờ đây điều đó có thể thực hiện được--và thậm chí còn đơn giản

Chế độ nghiêm ngặt trong MySQL và MariaDB kiểm soát việc xử lý các giá trị không hợp lệ hoặc bị thiếu trong các truy vấn thay đổi dữ liệu. Điều này bao gồm các câu lệnh INSERT, UPDATE và CREATE TABLE. Với chế độ nghiêm ngặt của MySQL được bật, là trạng thái mặc định, dữ liệu không hợp lệ hoặc bị thiếu có thể gây ra cảnh báo hoặc lỗi khi cố gắng xử lý truy vấn

Khi chế độ nghiêm ngặt bị tắt, cùng một truy vấn sẽ được điều chỉnh các giá trị không hợp lệ hoặc bị thiếu và tạo ra một cảnh báo đơn giản. Đây có vẻ là kết quả ưa thích, tuy nhiên khi tắt chế độ nghiêm ngặt, một số hành động nhất định có thể gây ra kết quả không mong muốn. Chẳng hạn, khi giá trị được chèn vượt quá giới hạn ký tự tối đa, nó sẽ bị cắt bớt để phù hợp với giới hạn

Có nhiều lý do tại sao chế độ nghiêm ngặt của MySQL có thể cần phải bị vô hiệu hóa. Phổ biến nhất là khi một máy chủ đang chạy WHMCS — một yêu cầu của công cụ đó

  • Các hướng dẫn này dành riêng cho việc vô hiệu hóa chế độ nghiêm ngặt của MySQL trên máy chủ Liquid Web được quản lý bằng cPanel hoặc máy chủ Windows
  • Máy chủ phải chạy MySQL 5. X hoặc MariaDB 10. X trở lên
  • Truy cập dòng lệnh và cấp gốc thông qua SSH sẽ cần thiết để làm theo hướng dẫn này trên máy chủ Linux

Cách tốt nhất là thực hiện một số hình thức sao lưu trước khi sửa đổi tệp máy chủ. Nó đảm bảo bạn có cách hoàn nguyên các thay đổi nếu xảy ra sự cố. Sao lưu cũng có lợi vì chúng giúp theo dõi các thay đổi

Trong khi đăng nhập vào SSH với người dùng root trên Linux, hãy sử dụng lệnh mở rộng cú đúp Bash sau để tạo một bản sao lưu của tệp trong thư mục Linux gốc của nó

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

Người dùng Windows phải định vị và sao lưu tệp my. tập tin ini. Từ menu Bắt đầu, chọn Cài đặt > Cập nhật & Bảo mật > Sao lưu > Thêm ổ đĩa, sau đó chọn ổ đĩa ngoài hoặc vị trí mạng nơi bạn lưu trữ các bản sao lưu của mình

Bước 2. Vô hiệu hóa Chế độ nghiêm ngặt của MySQL

Tùy thuộc vào máy chủ và cấu hình hiện tại, bạn có thể cần chỉnh sửa một hoặc cả hai tệp sau trên máy chủ. Nói chung, các dòng cấu hình có liên quan chỉ nằm trong một trong số chúng. Tuy nhiên, nó có thể ở một trong hai mà không gây ra sự cố, vì vậy, tốt nhất bạn nên kiểm tra cả hai

Để chỉnh sửa tệp trong Linux, bạn sẽ mở tệp bằng trình chỉnh sửa dòng lệnh yêu thích của mình. Hướng dẫn này sử dụng Vim

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

Trong tệp, định vị dòng sau

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

Dòng này đang đặt biến sql_mode. Thay thế nó bằng dòng sau để tắt chế độ nghiêm ngặt của MySQL

Sau khi điều chỉnh này được thực hiện hoặc bạn đã xác nhận tệp không cần điều chỉnh, hãy lưu và đóng tệp. Nhấn Esc để vào chế độ lệnh và gõ. wq để ghi và thoát tệp

Quá trình này tương tự đối với Windows, nhưng bạn cần định vị và mở tệp my. ini từ File Explorer. Vị trí tiêu chuẩn cho nó là C. \ProgramData\MySQL\MySQL Server X. X. Thư mục ProgramData bị ẩn. Để hiển thị một thư mục ẩn, nhấp vào tab Xem từ Thanh Menu và nhấp vào hộp kiểm bên cạnh Các mục ẩn trong phần Hiển thị/ẩn.
Sau khi bạn xác định vị trí của tôi. ini, mở nó bằng Notepad hoặc Notepad++ và tìm dòng sau.

sql-mode = "STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

Thay thế dòng này trong tệp bằng dòng sau để thay đổi chế độ thành trống

Bước 3. Khởi động lại dịch vụ MySQL

Bạn cần khởi động lại dịch vụ MySQL để những thay đổi này có hiệu lực vì dịch vụ này sẽ chỉ đọc các tệp cấu hình khi tải lần đầu

Đối với máy chủ CentOS 7, hãy sử dụng lệnh này

Đối với CentOS 6 trở về trước, hãy sử dụng lệnh sau

/etc/init.d/mysql restart

Sau khi ban hành lệnh này trên máy chủ, dịch vụ MySQL sẽ được khởi động lại và sẽ tải các thay đổi đã thực hiện. Chế độ nghiêm ngặt của MySQL hiện đã bị tắt

Bạn có thể chạy lệnh sau để xác minh rằng quy trình đã được hoàn tất đúng cách

________số 8

Dưới đây là một ví dụ đầu ra bạn sẽ nhận được

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

Để khởi động lại MySQL trong Windows, hãy tìm kiếm và mở ứng dụng Công cụ quản trị. Bấm đúp vào Dịch vụ. Xác định vị trí và chọn MySQL. Bạn được trình bày với các tùy chọn sau ở bên trái

  • Dừng dịch vụ. Dừng dịch vụ đã chọn
  • Tạm dừng dịch vụ. Tạm dừng dịch vụ đã chọn
  • Khởi động lại dịch vụ. Khởi động lại dịch vụ đã chọn

Nhấp vào Khởi động lại dịch vụ và đợi trạng thái thay đổi trở lại Đã bắt đầu

Vô hiệu hóa Chế độ nghiêm ngặt trong MySQL là một nhiệm vụ đơn giản, bất kể tại sao quản trị viên cần vô hiệu hóa nó. Hướng dẫn này giúp bạn tắt Chế độ nghiêm ngặt của MySQL cho máy chủ Linux hoặc Windows