Bảng 'Performance_schema.session_variables' không tồn tại


299

Sau khi nâng cấp MySQL lên 5.7.8-rc và đăng nhập vào máy chủ, tôi gặp lỗi:

Table 'performance_schema.session_variables' doesn't exist

Tôi không thể tìm thấy bất kỳ giải pháp cho việc này. Bạn có thể giúp ?


2
Một số khác. Có vẻ như bản nâng cấp của bạn không thành công. Bạn có thể muốn xem xét thực hiện lại quá trình nâng cấp (hoặc) cài đặt lại 5.7.8-rcphiên bản và khôi phục từ bản sao lưu đầy đủ DB.
Raul

2
bạn đã chạy mysql_upgradeđể đảm bảo rằng bất kỳ thay đổi nào đối với các bảng / dbs cốt lõi đã được thực hiện chưa?
Marc B

Vâng, tôi đã thực hiện mysql_upgrade, tôi cho lần thử cuối cùng và cài đặt lại. Nếu nó không hoạt động, tôi sẽ hạ cấp xuống phiên bản 5.6
Taz

28
Tôi gặp vấn đề tương tự, để giải quyết nó, tôi chạy mysql_upgrade -u root -p --force, sau đó tôi khởi động lại máy chủ DB.
robrebm

Nếu lệnh mysql_upTHER không hoạt động, thì bảng mysql.performance_schema có thể đã bị hỏng. Chúng tôi đã có vấn đề này. Để khắc phục sự cố, chúng tôi đã xóa máy chủ cơ sở dữ liệu bằng lệnh: apt-get purge mariadb-client-10.1 mariadb-common mariadb-server-10.1. Điều này loại bỏ tất cả các tệp dữ liệu nhị phân, cấu hình và dữ liệu. Tiếp theo chúng tôi cài đặt lại máy chủ cơ sở dữ liệu và nhập lại cơ sở dữ liệu. Sau đó, máy chủ cơ sở dữ liệu chạy mà không gặp vấn đề gì
Nadir Latif

Câu trả lời:


227

Các mysql_upTHER cũng làm việc cho tôi:

# mysql_upgrade -u root -p --force
# systemctl restart mysqld

Trân trọng, MSz.


25
Tôi đã cần phải khởi động lại mysqld ( mysql.server restartvì tôi đang sử dụng cài đặt homebrew trên os x), vì vậy điều này rất hữu ích. Nếu không, tôi đã có một lỗi về phiên bản có cấu trúc sai.
Geoffrey Wiseman

Hành vi giống hệt với Homebrew trên OS X 10.10.5 (Yosemite). Thực hiện nâng cấp cũng khắc phục sự cố trong Sequel Pro 1.1 (bản dựng 4499) khi cố tải cơ sở dữ liệu.
William Turrell

4
Native table 'performance_schema'.'session_variables' has the wrong structure
stephen

8
Nếu bạn đang sử dụng, brew servicesbạn có thể khởi động lại máy chủ của mình với brew services restart mysql.
Frederik Kammer

1
Điều này không hiệu quả với tôi, câu trả lời đúng được đưa ra bởi viq. chỉ cần thiết để kích hoạt tính tương thích chương trình.
kato2

482

Tôi đã có thể đăng nhập vào máy chủ mysql sau khi chạy lệnh @robrebm đề xuất:

mysql_upgrade -u root -p --force

Yêu cầu khởi động lại máy chủ MySQL.


6
Điều đó đã làm việc tốt. Cảm ơn. Tôi muốn biết lý do là gì.
diguage

2
Tôi đang nhận được Access denied for user 'root'@'localhost' (using password: YES) while connecting to the MySQL servermặc dù tôi đang sử dụng mật khẩu root chính xác. Có ai giúp không ?? : - /
sixty4bit

4
@ sixty4bit hãy thử xóa -p
Mike Mellor

1
@NevilleNazerane Tôi không quen với php dễ dàng, nhưng bạn sẽ có thể xác định vị trí nơi mysql được cài đặt và sau đó chỉ cần mở một dấu nhắc cdm và thay đổi thư mục đến vị trí đó. Bây giờ bạn sẽ có thể chạy lệnh.
Mihai Caracostea

4
@diguage Lý do là nâng cấp phiên bản của MySQL đã giới thiệu các lược đồ không tương thích phiên bản cho siêu dữ liệu nội bộ. Đối với tôi, tôi đang nâng cấp MySQL 5.6 lên MySQL 5.7 trên máy Mac bằng Homebrew và thư mục dữ liệu MySQL không thay đổi nên phiên bản mới MySQL đang đọc siêu dữ liệu nội bộ cũ nhưng không biết phải làm gì - lỗi đó chúng tôi đã thấy ở đây là một biểu hiện của vấn đề đó Sau mysql_upgradevà khởi động lại, mọi thứ đã hoạt động. Xem: dev.mysql.com/doc/refman/5.7/en/mysql-upTHER.html
Devy

110
mysql -u app -p
mysql> set @@global.show_compatibility_56=ON;

theo http://bugs.mysql.com/orms.php?id=78159 làm việc cho tôi.


1
Điều này làm việc hoàn hảo cho tôi! Và tôi đã không phải khởi động lại máy chủ mysql vốn đã quá cồng kềnh
anu.agg

3
Tôi xin lỗi, đây là một giải pháp có kích thước quá lớn: như sử dụng súng bazooka để bắn ruồi. Công tắc tương thích này có nhiều hiệu ứng hơn, bạn có thể không muốn tất cả chúng.
Tuncay Göncüoğlu

@Tuncay Göncüoğlu một số tác dụng phụ này là gì?
katzmopolitan

@katzmopolitan Đọc lên tại đây: dev.mysql.com/doc/refman/5.7/vi/ . Các thay đổi chủ yếu liên quan đến việc xử lý Information_SCHema (bảo mật, v.v.), nhưng có nhiều hơn thế.
Tuncay Göncüoğlu

Điều này làm việc cho tôi quá. Thông báo lỗi tôi nhận được là từ mysqldump. Khi tôi thực hiện thay đổi đề xuất, mysqldump đã hoạt động. Khi tôi có kết xuất, tôi chỉ cần thay đổi show_compabilities_56 trở lại thành OFF.
Bryan

23

Vì không có câu trả lời nào ở trên thực sự giải thích những gì đã xảy ra, tôi quyết định bấm nút và đưa thêm một số chi tiết cho vấn đề này.

Có, giải pháp là chạy lệnh Nâng cấp MySQL, như sau : mysql_upgrade -u root -p --force, nhưng chuyện gì đã xảy ra?

Nguyên nhân sâu xa của vấn đề này là do tham nhũng performance_schema, có thể do:

  • Tham nhũng hữu cơ (khối lượng kaboom, lỗi động cơ, vấn đề trình điều khiển hạt nhân, v.v.)
  • Tham nhũng trong bản vá mysql (không có gì lạ khi điều này xảy ra trong bản vá mysql, đặc biệt đối với các nâng cấp phiên bản chính)
  • Một "thả cơ sở dữ liệu Performance_schema" đơn giản rõ ràng sẽ gây ra vấn đề này và nó sẽ xuất hiện các triệu chứng giống như khi nó bị hỏng

Vấn đề này có thể đã xuất hiện trên cơ sở dữ liệu của bạn ngay cả trước khi vá, nhưng điều xảy ra trên MySQL 5.7.8 cụ thể là cờ show_compatibility_56đã thay đổi giá trị mặc định từ bị biến thành ONmặc định, thành OFF. Cờ này kiểm soát cách động cơ hoạt động trên các truy vấn để cài đặt và đọc các biến (phiên và toàn cầu) trên các Phiên bản MySQL khác nhau.

Do MySQL 5.7+ bắt đầu đọc và lưu trữ các biến này performance_schemathay vì bật information_schema, cờ này được giới thiệu như là ONbản phát hành đầu tiên để giảm bán kính nổ của thay đổi này và để người dùng biết về thay đổi và làm quen với nó.

OK, nhưng tại sao kết nối không thành công? Bởi vì tùy thuộc vào trình điều khiển bạn đang sử dụng (và cấu hình của nó), nó có thể sẽ chạy các lệnh cho mọi kết nối mới được khởi tạo vào cơ sở dữ liệu ( show variablesví dụ như , chẳng hạn). Vì một trong những lệnh này có thể cố gắng truy cập vào một lỗi bị hỏng performance_schema, toàn bộ kết nối sẽ hủy bỏ trước khi được khởi tạo hoàn toàn.

Vì vậy, tóm lại, bạn có thể (không thể nói bây giờ) đã performance_schemabị thiếu hoặc bị hỏng trước khi vá. Bản vá đến 5.7.8 sau đó buộc công cụ phải đọc các biến của bạn performance_schema(thay vì information_schema, nó đang đọc từ đâu vì cờ được bật ON). Kể từ khi performance_schemabị hỏng, các kết nối không thành công.

Chạy nâng cấp MySQL là cách tiếp cận tốt nhất, bất chấp thời gian chết. Bật cờ là một tùy chọn, nhưng nó đi kèm với tập hợp hàm ý riêng của nó như đã được chỉ ra trên chủ đề này.

Cả hai nên làm việc, nhưng cân nhắc hậu quả và biết lựa chọn của bạn :)


1
Cảm ơn. Tôi đã tự hỏi điều gì gây ra vấn đề này trước khi nhảy vào và thay đổi.
Ken Ingram

4

Thực hiện theo các bước sau mà không cần -p:

  1. mysql_upgrade -u root
  2. systemctl restart mysqld

Tôi đã có cùng một vấn đề và nó hoạt động!


Những công việc này! Chỉ systemctl restart mysqldkhông làm việc.
Ninja

sau đó sử dụngsystemctl restart mysql
BitDEVil2K16

1

Như câu hỏi Sixty4bit, nếu người dùng root mysql của bạn có vẻ bị định cấu hình sai, hãy thử cài đặt phần mở rộng cấu hình từ nguồn chính thức của mysql:

https://dev.mysql.com/doads/repo/apt/

Nó sẽ giúp bạn thiết lập mật khẩu người dùng root mới.

Đảm bảo cập nhật kho lưu trữ của bạn (debian / ubfox):

apt-get update

0

Đối với hệ thống của tôi, vấn đề cuối cùng là tôi vẫn cài đặt Mysql 5.6 và vì vậy mysql_upTHER.exe từ bản cài đặt đó đã được gọi thay vì phiên bản 5.7. Điều hướng đến C:\Program Files\MySQL\MySQL Server 5.7\binvà chạy.\mysql_upgrade.exe -u root


0

Nếu, trong khi sử dụng mysql_upgrade -u root -p --forcelệnh Bạn gặp lỗi này:

Could not create the upgrade info file '/var/lib/mysql/mysql_upgrade_info' in the MySQL Servers datadir, errno: 13

chỉ cần thêm lệnh sudotrước. Điều đó làm việc cho tôi, và tôi đã giải quyết vấn đề của mình. Vì vậy, đó là: sudo mysql_upgrade -u root -p --force:)


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.