Tabel 'performance_schema.session_variables' tidak ada


299

Setelah memutakhirkan MySQL ke 5.7.8-rc dan masuk ke server saya mendapat kesalahan:

Table 'performance_schema.session_variables' doesn't exist

Saya tidak dapat menemukan solusi untuk ini. Bisakah kamu menolong ?


2
Yang lainnya. Sepertinya peningkatan Anda tidak berhasil. Anda mungkin ingin mempertimbangkan untuk melakukan proses pemutakhiran lagi (atau) menginstal ulang 5.7.8-rcversi dan pemulihan dari cadangan lengkap DB.
Rahul

2
apakah Anda menjalankan mysql_upgradeuntuk memastikan bahwa setiap perubahan pada tabel inti / dbs telah dilakukan?
Marc B

ya, saya buat mysql_upgrade, saya coba terakhir dan pasang kembali. Jika tidak berhasil, saya akan menurunkan versi ke versi 5,6
Taz

28
Saya mengalami masalah yang sama, untuk menyelesaikannya, saya jalankan mysql_upgrade -u root -p --force, lalu saya restart server DB.
robregonm

Jika perintah mysql_upgrade tidak berfungsi, maka tabel mysql.performance_schema mungkin rusak. Kami punya masalah ini. Untuk memperbaiki masalah, kami menghapus server database menggunakan perintah: apt-get purge mariadb-client-10.1 mariadb-common mariadb-server-10.1. Ini menghapus semua biner database, konfigurasi, dan file data. Selanjutnya kita menginstal ulang server database dan mengimpor kembali basis data. Setelah itu server database berjalan tanpa masalah
Nadir Latif

Jawaban:


227

Mysql_upgrade bekerja untuk saya juga:

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

Salam, MSz.


25
Saya memang perlu me-restart mysqld ( mysql.server restart, karena saya menggunakan instalasi homebrew di os x), jadi ini sangat membantu. Kalau tidak, saya mendapat kesalahan tentang session_variables memiliki struktur yang salah.
Geoffrey Wiseman

Perilaku identik dengan Homebrew pada OS X 10.10.5 (Yosemite). Melakukan peningkatan juga memperbaiki kerusakan di Sequel Pro 1.1 (build 4499) ketika mencoba memuat basis data.
William Turrell

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

8
Jika Anda menggunakan, brew servicesAnda dapat memulai kembali server Anda dengan brew services restart mysql.
Frederik Kammer

1
Ini tidak berfungsi untuk saya, jawaban yang benar diberikan oleh viq. hanya diperlukan untuk mengaktifkan kompatibilitas acara.
kato2

482

Saya dapat masuk ke server mysql setelah menjalankan perintah @robregonm yang disarankan:

mysql_upgrade -u root -p --force

Diperlukan restart server MySQL.


6
Itu bekerja dengan baik. Terima kasih. Saya ingin tahu apa alasannya.
diguage

2
Saya mendapatkan Access denied for user 'root'@'localhost' (using password: YES) while connecting to the MySQL servermeskipun saya menggunakan kata sandi root yang benar. Ada bantuan ?? : - /
sixty4bit

4
@ sixty4bit coba hapus -p
Mike Mellor

1
@NevilleNazerane Saya tidak terbiasa dengan php mudah, tetapi Anda harus dapat menemukan di mana mysql terinstal dan kemudian hanya membuka prompt cdm dan mengubah direktori ke lokasi itu. Sekarang Anda harus dapat menjalankan perintah.
Mihai Caracostea

4
@diguage Alasannya adalah peningkatan versi MySQL telah memperkenalkan skema versi yang tidak kompatibel untuk metadata internal. Bagi saya, saya meningkatkan MySQL 5.6 ke MySQL 5.7 pada Mac menggunakan Homebrew dan direktori data MySQL tidak berubah sehingga versi baru MySQL membaca metadata internal lama tetapi tidak tahu apa yang harus dilakukan - kesalahan yang kami lihat di sini adalah manifestasi dari masalah itu. Setelah mysql_upgradedan restart, semuanya bekerja. Lihat: dev.mysql.com/doc/refman/5.7/en/mysql-upgrade.html
Devy

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

sesuai http://bugs.mysql.com/bug.php?id=78159 bekerja untuk saya.


1
Ini bekerja dengan baik untuk saya! Dan saya tidak perlu me-restart server mysql yang akan sangat merepotkan
anu.agg

3
Maaf, ini adalah solusi yang agak terlalu besar: seperti menggunakan bazoka untuk menembak lalat. Switch kompatibilitas ini memiliki lebih banyak efek, Anda mungkin tidak menginginkan semuanya.
Tuncay Göncüoğlu

@Tuncay Göncüoğlu apa sajakah efek samping ini?
katzmopolitan

@katzmopolitan Baca di sini: dev.mysql.com/doc/refman/5.7/en/… . Perubahan sebagian besar terkait dengan penanganan INFORMATION_SCHEMA (keamanan dll), tetapi ada lebih banyak.
Tuncay Göncüoğlu

Ini juga berhasil bagi saya. Pesan kesalahan yang saya dapatkan adalah dari mysqldump. Setelah saya membuat perubahan yang disarankan mysqldump bekerja. Setelah saya memiliki dump, saya hanya mengubah show_compatibility_56 kembali ke OFF.
Bryan

23

Karena tidak ada jawaban di atas yang benar-benar menjelaskan apa yang terjadi, saya memutuskan untuk berpura-pura dan membawa lebih banyak detail untuk masalah ini.

Ya, solusinya adalah menjalankan perintah Upgrade MySQL, sebagai berikut:, mysql_upgrade -u root -p --forcetetapi apa yang terjadi?

Akar penyebab masalah ini adalah korupsi performance_schema, yang dapat disebabkan oleh:

  • Korupsi organik (volume terjadi kaboom, bug mesin, masalah driver kernel dll)
  • Korupsi selama mysql Patch (bukan tidak pernah terjadi hal ini terjadi selama patch mysql, khususnya untuk peningkatan versi utama)
  • Sederhana "jatuhkan database performance_schema" jelas akan menyebabkan masalah ini, dan itu akan menyajikan gejala yang sama seolah-olah rusak

Masalah ini mungkin telah ada pada database Anda bahkan sebelum tambalan, tetapi apa yang terjadi pada MySQL 5.7.8 secara khusus adalah bahwa flag show_compatibility_56mengubah nilai defaultnya dari yang diubah menjadi ONdefault, menjadi OFF. Bendera ini mengontrol perilaku mesin pada kueri untuk pengaturan dan membaca variabel (sesi dan global) di berbagai Versi MySQL.

Karena MySQL 5.7+ mulai membaca dan menyimpan variabel-variabel ini dan performance_schemabukannya menyala information_schema, flag ini diperkenalkan sebagai ONrilis pertama untuk mengurangi radius ledakan perubahan ini dan untuk memberi tahu pengguna tentang perubahan tersebut dan membiasakan diri dengannya.

OK, tapi mengapa koneksi gagal? Karena tergantung pada driver yang Anda gunakan (dan konfigurasinya), itu mungkin berakhir menjalankan perintah untuk setiap koneksi baru yang dimulai ke database (seperti show variables, misalnya). Karena salah satu dari perintah ini dapat mencoba mengakses yang rusak performance_schema, seluruh koneksi dibatalkan sebelum diinisiasi sepenuhnya.

Jadi, secara ringkas, Anda mungkin (tidak mungkin memberi tahu sekarang) performance_schemaapakah ada yang hilang atau rusak sebelum ditambal. Tambalan ke 5.7.8 kemudian memaksa mesin untuk membaca variabel Anda dari performance_schema(alih-alih information_schema, darimana pembacaannya karena bendera yang diputar ON). Karena performance_schemarusak, koneksi gagal.

Menjalankan peningkatan MySQL adalah pendekatan terbaik, meskipun ada downtime. Menyalakan bendera adalah salah satu opsi, tetapi ia datang dengan implikasinya sendiri seperti yang ditunjukkan pada utas ini.

Keduanya harus bekerja, tetapi konsekuensinya dan tahu pilihan Anda :)


1
Terima kasih. Saya bertanya-tanya apa yang menyebabkan masalah ini sebelum melompat dan membuat perubahan.
Ken Ingram

4

Ikuti langkah-langkah ini tanpa -p:

  1. mysql_upgrade -u root
  2. systemctl restart mysqld

Saya punya masalah yang sama dan berhasil!


Ini bekerja! Hanya systemctl restart mysqldsaja tidak berhasil.
Ninja

lalu gunakansystemctl restart mysql
BitDEVil2K16

1

Sebagai pertanyaan sixty4bit, jika pengguna root mysql Anda terlihat salah konfigurasi, coba instal ekstensi konfigurator dari sumber resmi mysql:

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

Ini akan membantu Anda mengatur kata sandi pengguna root baru.

Pastikan untuk memperbarui repositori Anda (debian / ubuntu):

apt-get update

0

Untuk sistem saya masalah akhirnya adalah bahwa saya masih menginstal Mysql 5.6 dan mysql_upgrade.exe dari instalasi itu dipanggil bukan yang untuk 5.7. Arahkan ke C:\Program Files\MySQL\MySQL Server 5.7\bindan jalankan.\mysql_upgrade.exe -u root


0

Jika, saat menggunakan mysql_upgrade -u root -p --forceperintah, Anda mendapatkan kesalahan ini:

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

tambahkan saja sudosebelum perintah. Itu berhasil bagi saya, dan saya memecahkan masalah saya. Jadi, ini: sudo mysql_upgrade -u root -p --force:)


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.