ตาราง 'performance_schema.session_variables' ไม่มีอยู่


299

หลังจากอัปเกรด MySQL เป็น 5.7.8-rc และเข้าสู่เซิร์ฟเวอร์ฉันพบข้อผิดพลาด:

Table 'performance_schema.session_variables' doesn't exist

ฉันไม่พบวิธีแก้ปัญหาสำหรับเรื่องนี้ คุณช่วยได้ไหม


2
อีกอันหนึ่ง ดูเหมือนว่าการอัปเกรดของคุณจะไม่สำเร็จ คุณอาจต้องการพิจารณาดำเนินการอัพเกรดอีกครั้ง (หรือ) ติดตั้ง5.7.8-rcเวอร์ชันใหม่และกู้คืนจากการสำรองข้อมูลเต็มรูปแบบของฐานข้อมูล
ราหุล

2
คุณเรียกใช้mysql_upgradeเพื่อให้แน่ใจว่ามีการเปลี่ยนแปลงใด ๆ ในตารางหลัก / dbs หรือไม่
Marc B

ใช่ฉันทำmysql_upgradeฉันลองครั้งสุดท้ายแล้วติดตั้งใหม่อีกครั้ง ถ้ามันจะไม่ทำงานผมจะปรับลด 5.6 รุ่น
Taz

28
ฉันพบปัญหาเดียวกันเพื่อแก้ปัญหาฉันรันmysql_upgrade -u root -p --forceแล้วฉันรีสตาร์ทเซิร์ฟเวอร์ DB
robregonm

หากคำสั่ง mysql_upgrade ไม่ทำงานตาราง mysql.performance_schema อาจเสียหาย เรามีปัญหานี้ ในการแก้ไขปัญหาเราได้ลบเซิร์ฟเวอร์ฐานข้อมูลโดยใช้คำสั่ง: apt-get purge mariadb-client-10.1 mariadb-common mariadb-server-10.1 สิ่งนี้จะลบฐานข้อมูลไบนารีฐานข้อมูลและไฟล์ข้อมูลทั้งหมด ต่อไปเราติดตั้งเซิร์ฟเวอร์ฐานข้อมูลและนำกลับฐานข้อมูล หลังจากนั้นเซิร์ฟเวอร์ฐานข้อมูลจะทำงานโดยไม่มีปัญหา
Nadir Latif

คำตอบ:


227

mysql_upgrade ใช้ได้สำหรับฉันเช่นกัน:

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

ขอแสดงความนับถือ MSz


25
ฉันต้องรีสตาร์ท mysqld ( mysql.server restartเนื่องจากฉันใช้การติดตั้ง homebrew บนระบบปฏิบัติการ x) ดังนั้นสิ่งนี้จึงมีประโยชน์ มิฉะนั้นฉันได้รับข้อผิดพลาดเกี่ยวกับ session_variables ที่มีโครงสร้างที่ไม่ถูกต้อง
Geoffrey Wiseman

พฤติกรรมที่เหมือนกันกับ Homebrew บน OS X 10.10.5 (Yosemite) การอัพเกรดจะแก้ไขข้อผิดพลาดใน Sequel Pro 1.1 (build 4499) เมื่อพยายามโหลดฐานข้อมูล
William Turrell

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

8
หากคุณกำลังใช้คุณสามารถเริ่มต้นเซิร์ฟเวอร์ของคุณด้วยbrew services brew services restart mysql
Frederik Kammer

1
วิธีนี้ใช้ไม่ได้สำหรับฉันคำตอบที่ถูกต้องจะได้รับจาก viq ต้องการเพียงเพื่อเปิดใช้งานความเข้ากันได้ของรายการ
kato2

482

ฉันสามารถเข้าสู่เซิร์ฟเวอร์ mysql หลังจากใช้คำสั่ง @robregonm ที่แนะนำ:

mysql_upgrade -u root -p --force

จำเป็นต้องรีสตาร์ทเซิร์ฟเวอร์ MySQL


6
มันใช้งานได้ดี ขอบคุณฉันอยากรู้ว่าเหตุผลคืออะไร
diguage

2
ฉันได้รับAccess denied for user 'root'@'localhost' (using password: YES) while connecting to the MySQL serverแม้ว่าฉันจะใช้รหัสผ่านรูทที่ถูกต้อง ความช่วยเหลือใด ๆ ?? : - /
sixty4bit

4
@ sixty4bit ลองลบ -p
Mike Mellor

1
@NevilleNazerane ฉันไม่คุ้นเคยกับ PHP ง่าย แต่คุณควรจะสามารถค้นหาตำแหน่งที่ติดตั้ง mysql จากนั้นเพียงเปิดพรอมต์ cdm และเปลี่ยนไดเรกทอรีเป็นตำแหน่งนั้น ตอนนี้คุณควรจะสามารถเรียกใช้คำสั่ง
Mihai Caracostea

4
@diguage เหตุผลก็คือการอัพเกรดเวอร์ชั่นของ MySQL ได้เปิดตัว schema ที่เข้ากันไม่ได้กับ metadata ภายใน สำหรับฉันฉันกำลังอัพเกรด MySQL 5.6 เป็น MySQL 5.7 บน Mac โดยใช้ Homebrew และไดเรกทอรีข้อมูล MySQL ไม่เปลี่ยนแปลงดังนั้น MySQL รุ่นใหม่อ่านเมตาดาต้าภายในเก่า แต่ไม่รู้ว่าจะต้องทำอย่างไร - ข้อผิดพลาดที่เราเห็นที่นี่คือ รายการของปัญหาที่ หลังจากmysql_upgradeรีสตาร์ททุกอย่างทำงานได้ ดู: dev.mysql.com/doc/refman/5.7/en/mysql-upgrade.html
Devy

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

ตามhttp://bugs.mysql.com/bug.php?id=78159ทำงานให้ฉัน


1
มันทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน! และฉันไม่ต้องรีสตาร์ทเซิร์ฟเวอร์ mysql ซึ่งจะยุ่งยากมาก
anu.agg

3
ฉันขอโทษนี่เป็นวิธีแก้ปัญหาที่ค่อนข้างใหญ่เกินไป: เหมือนกับการใช้ปืนยิงรถถังเพื่อยิงทันที สวิตช์ความเข้ากันได้นี้มีเอฟเฟกต์มากมายคุณอาจไม่ต้องการทั้งหมด
Tuncay Göncüoğlu

@Tuncay Göncüoğluผลข้างเคียงของอะไรบ้าง?
katzmopolitan

@katzmopolitan อ่านที่นี่: dev.mysql.com/doc/refman/5.7/en/... การเปลี่ยนแปลงส่วนใหญ่เกี่ยวข้องกับการจัดการ INFORMATION_SCHEMA (ความปลอดภัย ฯลฯ ) แต่มีอีกมาก
Tuncay Göncüoğlu

มันก็ใช้ได้กับฉันเช่นกัน ข้อความแสดงข้อผิดพลาดที่ฉันได้รับมาจาก mysqldump เมื่อฉันทำการเปลี่ยนแปลงที่แนะนำ mysqldump เมื่อฉันมีการถ่ายโอนข้อมูลฉันเพียงแค่เปลี่ยน show_compatibility_56 กลับไปเป็นปิด
ไบรอัน

23

เนื่องจากไม่มีคำตอบข้างต้นอธิบายถึงสิ่งที่เกิดขึ้นจริงฉันตัดสินใจที่จะพูดสอดและนำรายละเอียดเพิ่มเติมมาที่ปัญหานี้

ใช่ทางออกคือการรันคำสั่ง MySQL Upgrade ดังนี้: mysql_upgrade -u root -p --forceแต่เกิดอะไรขึ้น

สาเหตุที่แท้จริงสำหรับปัญหานี้คือความเสียหายของperformance_schemaซึ่งอาจเกิดจาก:

  • ความเสียหายจากออร์แกนิก (ปริมาณมากไป kaboom, ข้อผิดพลาดของเครื่องยนต์, ปัญหาเคอร์เนลไดรเวอร์ ฯลฯ )
  • ความเสียหายระหว่าง mysql Patch (ไม่เคยได้ยินมาก่อนว่าจะเกิดขึ้นในระหว่างการแก้ไข mysql โดยเฉพาะสำหรับการอัพเกรดเวอร์ชั่นใหญ่ ๆ )
  • "ฐานข้อมูลการลดลง performance_schema" อย่างง่ายจะทำให้เกิดปัญหานี้และมันจะแสดงอาการแบบเดียวกันกับว่ามันได้รับความเสียหาย

ปัญหานี้อาจจะได้รับในปัจจุบันในฐานข้อมูลของคุณแม้กระทั่งก่อนที่แพทช์ แต่สิ่งที่เกิดขึ้นใน MySQL 5.7.8 โดยเฉพาะคือว่าธงshow_compatibility_56เปลี่ยนค่าเริ่มต้นจากการถูกเปิดโดยค่าเริ่มต้นไปON OFFการตั้งค่าสถานะนี้ควบคุมการทำงานของเอ็นจินสำหรับเคียวรีสำหรับการตั้งค่าและการอ่านตัวแปร (เซสชันและโกลบอล) บน MySQL เวอร์ชันต่างๆ

เนื่องจาก MySQL 5.7+ เริ่มอ่านและเก็บตัวแปรเหล่านี้performance_schemaแทนการเปิดinformation_schemaแฟล็กนี้จึงถูกนำมาใช้ในONการเผยแพร่ครั้งแรกเพื่อลดรัศมีการระเบิดของการเปลี่ยนแปลงนี้และเพื่อให้ผู้ใช้ทราบเกี่ยวกับการเปลี่ยนแปลงและทำความคุ้นเคยกับมัน

ตกลง แต่ทำไมการเชื่อมต่อจึงล้มเหลว เนื่องจากขึ้นอยู่กับไดรเวอร์ที่คุณใช้ (และการกำหนดค่า) มันอาจจบลงด้วยการรันคำสั่งสำหรับการเชื่อมต่อใหม่ทุกครั้งที่เริ่มต้นไปยังฐานข้อมูล (เช่นshow variablesเป็นต้น) เนื่องจากหนึ่งในคำสั่งเหล่านี้สามารถพยายามเข้าถึงความเสียหายperformance_schemaการเชื่อมต่อทั้งหมดจึงยกเลิกก่อนที่จะเริ่มต้นอย่างสมบูรณ์

ดังนั้นโดยสรุปคุณอาจ (เป็นไปไม่ได้ที่จะบอกได้ในตอนนี้) ว่ามีการperformance_schemaสูญหายหรือเสียหายก่อนการปะแก้ แพตช์เป็น 5.7.8 จากนั้นบังคับให้เอ็นจิ้นอ่านตัวแปรของคุณออกจากperformance_schema(แทนที่จะเป็นinformation_schemaตำแหน่งที่อ่านจากเนื่องจากมีการเปลี่ยนสถานะON) เนื่องจากperformance_schemaเสียหายการเชื่อมต่อจึงล้มเหลว

การรันการอัพเกรด MySQL เป็นวิธีการที่ดีที่สุดแม้จะมีการหยุดทำงาน การเปิดใช้งานการตั้งค่าสถานะเป็นหนึ่งตัวเลือก แต่มันมาพร้อมกับชุดของความหมายตามที่ชี้ไปที่เธรดนี้แล้ว

ทั้งสองควรทำงาน แต่น้ำหนักผลที่ตามมาและรู้ว่าตัวเลือกของคุณ :)


1
ขอบคุณ ฉันสงสัยว่าอะไรทำให้เกิดปัญหานี้ก่อนที่จะกระโดดและทำการเปลี่ยนแปลง
Ken Ingram

4

ทำตามขั้นตอนเหล่านี้โดยไม่-p:

  1. mysql_upgrade -u root
  2. systemctl restart mysqld

ฉันมีปัญหาเดียวกันและใช้งานได้!


มันใช้งานได้! ใช้งานsystemctl restart mysqldไม่ได้เท่านั้น
Ninja

จากนั้นใช้systemctl restart mysql
BitDEVil2K16

1

ในฐานะที่เป็นคำถามหกสิบ4บิตหากผู้ใช้รูท mysql ของคุณดูเหมือนจะตั้งค่าผิดพลาดให้ลองติดตั้งส่วนขยายของตัวกำหนดค่าจากซอร์สทางการของ mysql:

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

มันจะช่วยให้คุณตั้งค่ารหัสผ่านผู้ใช้รูทใหม่

อย่าลืมอัปเดตที่เก็บข้อมูลของคุณ (debian / ubuntu):

apt-get update

0

สำหรับระบบของฉันปัญหาก็คือฉันยังคงติดตั้ง Mysql 5.6 อยู่ดังนั้น mysql_upgrade.exe จากการติดตั้งนั้นก็ถูกเรียกใช้แทน 5.7 นำทางไปยังC:\Program Files\MySQL\MySQL Server 5.7\binและเรียกใช้.\mysql_upgrade.exe -u root


0

หากในขณะที่ใช้mysql_upgrade -u root -p --forceคำสั่งคุณจะได้รับข้อผิดพลาดนี้:

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

เพียงเพิ่มsudoคำสั่งก่อนหน้า นั่นได้ผลสำหรับฉันและฉันแก้ไขปัญหาของฉัน ดังนั้นมันคือsudo mysql_upgrade -u root -p --force:)


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.