InnoDB: Lỗi: Bảng không được tìm thấy trong bảng mys mys. Không thể tìm thấy bảng innodb_table_stats 'sau khi nâng cấp lên mysql 5.6


41

Tôi đã nâng cấp lên mysql 5.6 từ 5.5 và hiện tại nhật ký của tôi bị lấp đầy bởi những thông báo như vậy khi khởi động

Tôi tìm thấy một giải pháp khả thi ở đây, nhưng nó không có vẻ chính thức. http://forums.mysql.com/read.php?22,578559,579891#msg-579891

2013-12-06 21:08:00 7f87b1d26700 InnoDB: Error: Table "mysql"."innodb_table_stats" not found.
2013-12-06 21:08:00 7f87b1d26700 InnoDB: Recalculation of persistent statistics requested for table "drupal"."sessions" but the required persistent statistics storage is not present or is corrupted. Using transient stats instead.
2013-12-06 21:08:07 7f903c09c700 InnoDB: Error: Table "mysql"."innodb_table_stats" not found.

Bất kỳ giải pháp chính thức hoặc sửa chữa 100%?


lặp lại với chuỗi trong stackoverflow.com/questions/15767652/, Bạn có thể tải xuống tệp .sql để tự tạo bảng.
Ben Lin

mọi thứ có thể đã chuyển từ câu hỏi này. @ 2018, cập nhật một mysql cũ, cùng một vấn đề. Tìm thấy để chạy: mysql_upgrade -u root -p --force && systemctl restart mysqldnâng cấp lược đồ mysql và tất cả các dbs, giải quyết vấn đề này
ProxiBlue

Câu trả lời:


67

Trước đây tôi đã giải quyết vấn đề này trong: Không thể mở bảng mysql / innodb_index_stats

Các bảng này được tạo cho bạn khi bạn cài đặt MySQL 5.6. Tuy nhiên, việc nâng cấp từ MySQL 5.5 không tạo ra các bảng này. Dưới đây là các kịch bản để tạo chúng bằng tay:

innodb_index_stats

USE mysql;
CREATE TABLE `innodb_index_stats` (
  `database_name` varchar(64) COLLATE utf8_bin NOT NULL,
  `table_name` varchar(64) COLLATE utf8_bin NOT NULL,
  `index_name` varchar(64) COLLATE utf8_bin NOT NULL,
  `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `stat_name` varchar(64) COLLATE utf8_bin NOT NULL,
  `stat_value` bigint(20) unsigned NOT NULL,
  `sample_size` bigint(20) unsigned DEFAULT NULL,
  `stat_description` varchar(1024) COLLATE utf8_bin NOT NULL,
  PRIMARY KEY (`database_name`,`table_name`,`index_name`,`stat_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0;

innodb_table_stats

USE mysql;
CREATE TABLE `innodb_table_stats` (
  `database_name` varchar(64) COLLATE utf8_bin NOT NULL,
  `table_name` varchar(64) COLLATE utf8_bin NOT NULL,
  `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `n_rows` bigint(20) unsigned NOT NULL,
  `clustered_index_size` bigint(20) unsigned NOT NULL,
  `sum_of_other_index_sizes` bigint(20) unsigned NOT NULL,
  PRIMARY KEY (`database_name`,`table_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin STATS_PERSISTENT=0;

nô lệ_master_info

USE mysql;
CREATE TABLE `slave_master_info` (
  `Number_of_lines` int(10) unsigned NOT NULL COMMENT 'Number of lines in the file.',
  `Master_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the master binary log currently being read from the master.',
  `Master_log_pos` bigint(20) unsigned NOT NULL COMMENT 'The master log position of the last read event.',
  `Host` char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT 'The host name of the master.',
  `User_name` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The user name used to connect to the master.',
  `User_password` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The password used to connect to the master.',
  `Port` int(10) unsigned NOT NULL COMMENT 'The network port used to connect to the master.',
  `Connect_retry` int(10) unsigned NOT NULL COMMENT 'The period (in seconds) that the slave will wait before trying to reconnect to the master.',
  `Enabled_ssl` tinyint(1) NOT NULL COMMENT 'Indicates whether the server supports SSL connections.',
  `Ssl_ca` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The file used for the Certificate Authority (CA) certificate.',
  `Ssl_capath` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The path to the Certificate Authority (CA) certificates.',
  `Ssl_cert` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The name of the SSL certificate file.',
  `Ssl_cipher` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The name of the cipher in use for the SSL connection.',
  `Ssl_key` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The name of the SSL key file.',
  `Ssl_verify_server_cert` tinyint(1) NOT NULL COMMENT 'Whether to verify the server certificate.',
  `Heartbeat` float NOT NULL,
  `Bind` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'Displays which interface is employed when connecting to the MySQL server',
  `Ignored_server_ids` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The number of server IDs to be ignored, followed by the actual server IDs',
  `Uuid` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The master server uuid.',
  `Retry_count` bigint(20) unsigned NOT NULL COMMENT 'Number of reconnect attempts, to the master, before giving up.',
  `Ssl_crl` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The file used for the Certificate Revocation List (CRL)',
  `Ssl_crlpath` text CHARACTER SET utf8 COLLATE utf8_bin COMMENT 'The path used for Certificate Revocation List (CRL) files',
  `Enabled_auto_position` tinyint(1) NOT NULL COMMENT 'Indicates whether GTIDs will be used to retrieve events from the master.',
  PRIMARY KEY (`Host`,`Port`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Master Information';

nô lệ_relay_log_info

USE mysql;
CREATE TABLE `slave_relay_log_info` (
  `Number_of_lines` int(10) unsigned NOT NULL COMMENT 'Number of lines in the file or rows in the table. Used to version table definitions.',
  `Relay_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the current relay log file.',
  `Relay_log_pos` bigint(20) unsigned NOT NULL COMMENT 'The relay log position of the last executed event.',
  `Master_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'The name of the master binary log file from which the events in the relay log file were read.',
  `Master_log_pos` bigint(20) unsigned NOT NULL COMMENT 'The master log position of the last executed event.',
  `Sql_delay` int(11) NOT NULL COMMENT 'The number of seconds that the slave must lag behind the master.',
  `Number_of_workers` int(10) unsigned NOT NULL,
  `Id` int(10) unsigned NOT NULL COMMENT 'Internal Id that uniquely identifies this record.',
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Relay Log Information';

nô lệ_worker_info

USE mysql;
CREATE TABLE `slave_worker_info` (
  `Id` int(10) unsigned NOT NULL,
  `Relay_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `Relay_log_pos` bigint(20) unsigned NOT NULL,
  `Master_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `Master_log_pos` bigint(20) unsigned NOT NULL,
  `Checkpoint_relay_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `Checkpoint_relay_log_pos` bigint(20) unsigned NOT NULL,
  `Checkpoint_master_log_name` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `Checkpoint_master_log_pos` bigint(20) unsigned NOT NULL,
  `Checkpoint_seqno` int(10) unsigned NOT NULL,
  `Checkpoint_group_size` int(10) unsigned NOT NULL,
  `Checkpoint_group_bitmap` blob NOT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 STATS_PERSISTENT=0 COMMENT='Worker Information';

THAY THẾ

Một cách giải quyết khác là tạo tập lệnh từ phiên bản MySQL 5.6.

Bước 01 : Xem máy chủ DB chạy MySQL 5.6 hoặc cài đặt MySQL 5.6 trên máy kiểm tra.

Bước 02 : mysqldump 5 bảng này vào một tệp văn bản

INNODB_TABLES="innodb_index_stats"
INNODB_TABLES="${INNODB_TABLES} innodb_table_stats"
INNODB_TABLES="${INNODB_TABLES} slave_master_info"
INNODB_TABLES="${INNODB_TABLES} slave_relay_log_info"
INNODB_TABLES="${INNODB_TABLES} slave_worker_info"
mysqldump -uroot mysql ${INNODB_TABLES} > InnoDB_MySQL_Tables.sql

Sau đó, bạn có thể chạy InnoDB_MySQL_Tables.sqltrên bất kỳ Máy chủ DB nào chạy MySQL 5.5 trước khi nâng cấp.


1
Đã giải quyết vấn đề của tôi khi nâng cấp Linux từ 5.5 - Oracle 5.6. Phải bỏ một số bảng ảo, dừng mysql, di chuyển các tệp ibd xấu từ / var / lib / mysql / mysql, khởi động lại mysql, sau đó chạy các câu lệnh của Rolando .... và Yay không còn lỗi khởi động nữa và hy vọng không còn bất ổn nữa. Rolando bạn thật tuyệt vời.
glyph

3
Cảm ơn bạn cho giải pháp của bạn. Như với việc cài đặt gói mysql-cộng đồng-máy chủ, một tập lệnh được bao gồm về cơ bản là tất cả các câu lệnh tạo cần thiết:cat /usr/share/mysql/mysql_system_tables.sql | mysql -uroot -p mysql
minni

1
Tôi gặp vấn đề này và tạo các bảng từ đầu sẽ không hoạt động vì chúng "đã tồn tại". Hóa ra tôi đã chuyển từ một tệp lớn sang tệp trên mỗi bảng cho InnoDB và tôi đã xóa ibdata1tệp của mình . MySQL đã không tạo lại các bảng này khi khởi động và tôi phải tự di chuyển các tệp đại diện cho các bảng ra khỏi thư mục dữ liệu MySQL để sử dụng các CREATEcâu lệnh trên ( DROP TABLEkhông hoạt động).
Christopher Schultz

@ChristopherSchultz cảm ơn bạn đã đề cập đến điều này. Tôi đã đề cập lại điều này vào tháng 8 năm 2015 ( dba.stackexchange.com/questions/111616/iêu ). Ít nhất bạn đã tự mình tìm ra, điều đó là tốt.
RolandoMySQLDBA

Cảm ơn điều này đã giải quyết vấn đề của tôi. Tuy nhiên, tôi đã gặp phải lỗi "bảng không tồn tại" ở trên trong khi tôi khôi phục kết xuất DB cuối cùng trước khi thực hiện nâng cấp thủ công mysql đang cài đặt lại với phiên bản cao hơn.
ash_01

9

Câu trả lời của Rolando làm việc cho tôi với một số bổ sung. Tôi gặp vấn đề tương tự, với 5 bảng này hiển thị qua SHOW TABLES, nhưng CHỌN hoặc các thao tác khác trên bảng dẫn đến không tìm thấy bảng.

Để giải quyết vấn đề, sử dụng câu trả lời của Rolando, tôi cần phải:

  • DROP TABLE <tablename> - tất cả 5 bàn

  • Trong hệ thống tệp, xóa các tệp .ibd còn lại (các tệp .frm đã bị xóa bởi DROP TABLE)

  • Sau đó tôi dừng lại và bắt đầu ví dụ mysqld (không biết có cần thiết không - làm tôi vui)

  • Các CREATE TABLEbáo cáo Rolando cung cấp sau đó chạy mà không có vấn đề.


1
chỉ cần đề cập rằng ngay cả khi khởi chạy DROP TABLE <tablename>tôi vẫn nhận được thông ERROR 1051 (42S02): Unknown table '...'báo lỗi, nhưng ít nhất thì tệp .frm đã biến mất sau đó.
superjos
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.