`mysql_upTHER` đang thất bại mà không có lý do thực sự nào được đưa ra


70

Tôi đang nâng cấp từ MySQL 5.1 lên 5.5, đang chạy mysql_upgradevà nhận đầu ra này:

# mysql_upgrade
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
FATAL ERROR: Upgrade failed

Bất kỳ ý tưởng về nơi để tìm kiếm những gì đang xảy ra (hoặc, không xảy ra?) Để tôi có thể sửa chữa bất cứ điều gì sai và thực sự chạy mysql_upgrade?

Cảm ơn!

Đầu ra nhiều hơn:

# mysql_upgrade --verbose
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
FATAL ERROR: Upgrade failed

# mysql_upgrade --debug-check --debug-info
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
FATAL ERROR: Upgrade failed

# mysql_upgrade --debug-info
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
FATAL ERROR: Upgrade failed

User time 0.00, System time 0.00
Maximum resident set size 1260, Integral resident set size 0
Non-physical pagefaults 447, Physical pagefaults 0, Swaps 0
Blocks in 0 out 16, Messages in 0 out 0, Signals 0
Voluntary context switches 9, Involuntary context switches 5

# mysql_upgrade --debug-check
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
FATAL ERROR: Upgrade failed

Sau khi tắt mysqld --skip-grant-tablesthông qua mysqladmin shutdownvà khởi động lại mysql qua service mysql start, nhật ký lỗi lặp lại thông qua bộ lỗi này lặp đi lặp lại:

130730 21:03:27 [Note] Plugin 'FEDERATED' is disabled.
/usr/sbin/mysqld: Table 'mysql.plugin' doesn't exist
130730 21:03:27 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
130730 21:03:27 InnoDB: The InnoDB memory heap is disabled
130730 21:03:27 InnoDB: Mutexes and rw_locks use GCC atomic builtins
130730 21:03:27 InnoDB: Compressed tables use zlib 1.2.3.4
130730 21:03:27 InnoDB: Initializing buffer pool, size = 20.0G
130730 21:03:29 InnoDB: Completed initialization of buffer pool
130730 21:03:30 InnoDB: highest supported file format is Barracuda.
InnoDB: Log scan progressed past the checkpoint lsn 588190222435
130730 21:03:30  InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer...
InnoDB: Doing recovery: scanned up to log sequence number 588192055067
130730 21:03:30  InnoDB: Starting an apply batch of log records to the database...
InnoDB: Progress in percents: 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 
InnoDB: Apply batch completed
InnoDB: Last MySQL binlog file position 0 81298895, file name /var/log/mysql/mysql-bin.006008
130730 21:03:33  InnoDB: Waiting for the background threads to start
130730 21:03:34 InnoDB: 5.5.32 started; log sequence number 588192055067
130730 21:03:34 [Note] Recovering after a crash using /var/log/mysql/mysql-bin
130730 21:03:34 [Note] Starting crash recovery...
130730 21:03:34 [Note] Crash recovery finished.
130730 21:03:34 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306
130730 21:03:34 [Note]   - '0.0.0.0' resolves to '0.0.0.0';
130730 21:03:34 [Note] Server socket created on IP: '0.0.0.0'.
130730 21:03:34 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist

Nhật ký MySQL trong quá trình khởi động thông qua mysqld_safe --skip-grant-tables

130730 21:19:36 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
130730 21:19:36 [Note] Plugin 'FEDERATED' is disabled.
130730 21:19:36 InnoDB: The InnoDB memory heap is disabled
130730 21:19:36 InnoDB: Mutexes and rw_locks use GCC atomic builtins
130730 21:19:36 InnoDB: Compressed tables use zlib 1.2.3.4
130730 21:19:37 InnoDB: Initializing buffer pool, size = 20.0G
130730 21:19:39 InnoDB: Completed initialization of buffer pool
130730 21:19:39 InnoDB: highest supported file format is Barracuda.
130730 21:19:42  InnoDB: Warning: allocated tablespace 566, old maximum was 0
130730 21:19:42  InnoDB: Waiting for the background threads to start
130730 21:19:43 InnoDB: 5.5.32 started; log sequence number 588192055067
130730 21:19:43 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306
130730 21:19:43 [Note]   - '0.0.0.0' resolves to '0.0.0.0';
130730 21:19:43 [Note] Server socket created on IP: '0.0.0.0'.
130730 21:19:43 [Warning] Can't open and lock time zone table: Table 'mysql.time_zone_leap_second' doesn't exist trying to live without them
130730 21:19:43 [ERROR] Can't open and lock privilege tables: Table 'mysql.servers' doesn't exist
130730 21:19:43 [ERROR] Native table 'performance_schema'.'events_waits_current' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'events_waits_history' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'events_waits_history_long' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'setup_consumers' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'setup_instruments' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'setup_timers' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'performance_timers' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'threads' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'events_waits_summary_by_thread_by_event_name' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'events_waits_summary_by_instance' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'events_waits_summary_global_by_event_name' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'file_summary_by_event_name' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'file_summary_by_instance' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'mutex_instances' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'rwlock_instances' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'cond_instances' has the wrong structure
130730 21:19:43 [ERROR] Native table 'performance_schema'.'file_instances' has the wrong structure
130730 21:19:43 [Note] /usr/sbin/mysqld: ready for connections.
Version: '5.5.32-0ubuntu0.12.04.1-log'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  (Ubuntu)

Theo tôi hiểu, tất cả các vấn đề về cấu trúc / tồn tại của bảng (vì nó liên quan đến các bảng hệ thống mysql) nên được sửa chữa bằng cách chạy mysql_upgrade:


Cũng có thể không có giá trị gì, mysqldđang chạy, với --skip-grant-tablestùy chọn. Tôi có thể kết nối qua mysqlthiết bị đầu cuối mà không có thông tin xác thực và tôi không gặp lỗi thông qua syslog hoặc bất cứ nơi nào khác tôi có thể nghĩ để nhìn khi tôi chạymysql_upgrade
Jim Rubenstein

Các MySQL Reference Manual bao gồm việc nâng cấp lên 5,5 từ 5.1 khá tốt. Nếu bạn đã làm theo tất cả các hướng dẫn ở đây, nó sẽ được đề cập. Nếu bạn chưa, thì ...
Aaron Copley

Nếu người dùng root mysql của bạn không có mật khẩu, đừng bao gồm `-p` trong` mysql_upTHER -u root -p`
Jeferex 8/1/2015

Câu trả lời:


95

Tôi nghĩ rằng nó cần tên người dùng và mật khẩu

mysql_upgrade -u root -p

Nếu tôi không vượt qua họ, tôi nhận được lỗi của bạn

Chỉnh sửa : nhờ các bình luận bây giờ tôi biết rằng có những lý do khác, có thể ít thường xuyên hơn nhưng tốt nhất là nên biết về chúng

Vì vậy, bạn nhận được lỗi đó khi

  • bạn đã không vượt qua tên người dùng và mật khẩu
  • bạn đã thông qua thông tin của bạn, nhưng họ đã sai
  • máy chủ MySQL không chạy
  • các bảng của quyền bị hủy hoại (sau đó bạn phải khởi động lại MySQL với mysqld --skip-grant-table)
  • bảng mysql.plugin bị thiếu (bạn sẽ gặp lỗi về điều đó khi khởi động MySQL gợi ý chạy ... mysql_upTHER và thất bại. Bạn có thể có một số cấu hình lỗi thời trong my.cnf)

23
Đây chính xác là vấn đề tôi gặp phải - tại sao địa ngục không thể nói "Không thể xác thực" hay "Lỗi kết nối" hay gì đó? Quá tức giận ...
les2

3
Các bạn, bạn cũng gặp lỗi tương tự nếu mật khẩu của bạn sai. vì vậy được thông báo
Yoosaf Abdulla

3
Và bạn cũng gặp lỗi tương tự nếu máy chủ không chạy, mặc dù nó có vẻ chấp nhận mật khẩu.
Raman

1
chỉ khi bảng cơ sở dữ liệu hoặc định dạng cơ sở dữ liệu bị hỏng, nó cũng không hoạt động, sau đó bạn cần khởi động trình nền với "mysqld --skip-Grant-bảng" và chạy mysql_upTHER trong một thiết bị đầu cuối khác!
Henning

+1 cho điều này. Còn một lý do nữa khiến tôi ghét MySQL
Excalibur

9

Tôi chỉ gặp phải các triệu chứng chính xác này khi nâng cấp từ 5.5 lên 5.6 và hóa ra đó là vấn đề về khả năng tiếp cận dịch vụ.

Mặc dù máy khách MySQL cli có thể kết nối với cá thể DB cục bộ của tôi chỉ với một -u và -p được cung cấp, tôi cũng cần chỉ định -h 127.0.0.1 cho mysql_upTHER vì nó đang cố gắng kết nối tệp ổ cắm và thất bại trong nỗ lực.


đó chính xác là vấn đề của tôi vì tôi chạy mysqd như thế này: mysqld --skip-Grant-bảng --user = mysql
Rodo

9

Có vẻ như một máy chủ Plesk, khi sử dụng Plesk không có root cho Mysql, nhưng quản trị viên của Mysql đã gọi admin, vì vậy lệnh này sẽ hoạt động trên Plesk như tôi đã thử trước đây:

mysql_upgrade -uadmin -p`cat /etc/psa/.psa.shadow`

Điều này làm việc hoàn hảo với tôi
xarlymg89

5

bạn có thể thử chạy từng cái một để xem nó bị lỗi ở đâu:

mysql_upTHER thực thi các lệnh sau để kiểm tra và sửa chữa các bảng và để nâng cấp các bảng hệ thống:

mysqlcheck --all-databases --check-upgrade --auto-repair  
mysql < fix_priv_tables  
mysqlcheck --all-databases --check-upgrade --fix-db-names --fix-table-names

từ http://dev.mysql.com/doc/refman/5.5/en/mysql-upTHER.html


1
Nghĩ về điều đó, nhưng fix_priv_tableslà một kịch bản được tạo ra mysql_upgradeđể sửa chữa các bảng riêng tư
Jim Rubenstein

điểm tốt, có thể thử chỉ dòng mysqlcheck đầu tiên? Và thử chạy trực tiếp từ thư mục bin, fwiw,/usr/bin/mysql_upgrade
user16081-JoeT


3

Câu hỏi này rất chung chung và tôi xin lỗi vì điều đó.

Tôi không thể tìm thấy nguyên nhân và giải pháp trực tiếp cho vấn đề mà tôi gặp phải, vì vậy tôi đã dùng đến cách cài đặt lại MySQL để xem nó có hoạt động không. Hóa ra, cài đặt lại đã lừa. Đó là một cách khập khiễng để sửa nó, nhưng đó là lựa chọn duy nhất tôi còn lại.

Rất nhiều câu trả lời khác cho câu hỏi này là những vấn đề tôi phải giải quyết để có được mysql_upTHER để chạy ban đầu, nhưng vì bất kỳ lý do gì - nó đã thất bại khi nó cố chạy một số truy vấn tự động và tôi không thể tìm thấy tài liệu về nó truy vấn nó đang chạy để tôi có thể sửa chúng.


Vâng, một khi dữ liệu đó của mysql đã bị hỏng thì gần như không có gì bạn có thể làm
Krauser

2

Bạn phải kiểm tra sự cho phép tất cả các tệp theo dữ liệu mysql. Nó phải là cùng một chủ sở hữu của mysql PID (mysql hoặc _mysql). Điều này đôi khi xảy ra vì khôi phục dữ liệu từ tập tin mà không có sự cho phép thích hợp. Ví dụ: nếu dữ liệu mysql của bạn ở dưới / var / lib / mysql

chown -R mysql /var/lib/mysql

2

DBA của chúng tôi đã gỡ cài đặt phiên bản mysql 5.0.95 thay vì chỉ nâng cấp lên 5.5,39. Việc gỡ cài đặt đã sao lưu /etc/my.cnf/etc/my.cnf.rpmsavesau đó gỡ bỏ nó và điều này ngăn MySQL khởi động đúng cách:

140902 15:00:57 [ERROR] Plugin 'InnoDB' init function returned error.
140902 15:00:57 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
140902 15:00:57 [ERROR] Unknown/unsupported storage engine: InnoDB
140902 15:00:57 [ERROR] Aborting

Bạn có thể làm bất kỳ điều sau đây:

  • So sánh các tệp my.cnf theo cách thủ công và đưa ra các cài đặt cấu hình phù hợp cho InnoDB

  • Khôi phục my.cnf.rpmsavelại bản gốc (kiểm tra trước cho bất kỳ cài đặt mặc định mới nào bạn nên thêm!)

  • Sử dụng một công cụ tìm khác biệt vimdiffđể so sánh my.cnf.rpmsavevới cái mới my.cnfvà mang lại các chỉnh sửa đã được thực hiện cho cấu hình MySQL, bao gồm các cài đặt InnoDB.

    [root]# vimdiff /etc/my.cnf /etc/my.cnf.rpmsave

Tôi đã thực hiện tùy chọn cuối cùng, sau đó có thể khởi động MySQL:

root]# service mysqld start
Starting mysqld:                                           [  OK  ]

và bây giờ mysql_upgradehoạt động tốt, bằng cách sử dụng mysql_upgrade -uroot -pnó đã nhắc tôi nhập mật khẩu root.

[root]# mysql_upgrade -uroot -p
Enter password:
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
Running 'mysqlcheck with default connection arguments
....

Hi vọng điêu nay co ich!

và cũng sử dụng mysql_upgrade -uroot -pthất bại vì nó cần MySQL để chạy!

Bài học kinh nghiệm:

  • Sao lưu my.cnf trước khi nâng cấp ... Và thực sự nâng cấp tại chỗ thay vì gỡ cài đặt sau đó cài đặt phiên bản mới hơn.
  • Để MySQL chạy để bạn có thể sử dụng mysql_upTHER.
  • Lợi nhuận.

1

Vấn đề tương tự đối với tôi, nhưng nguồn gốc của vấn đề của tôi là định dạng mật khẩu cũ. Mặc dù mysql có thể bị buộc phải kết nối bằng cách sử dụng định dạng cũ với "Skip-safe-auth", nhưng mysql_upTHER không có tùy chọn này. Trước tiên, bạn cần cập nhật mật khẩu gốc với định dạng mới và sau đó bạn có thể nâng cấp mysql của mình.


1

Có cùng một vấn đề nâng cấp từ 5.1 lên 5.5.

Điều này làm việc cho tôi: sudo mysql_upgrade -S <path-to-socket> -u <myuser> -p<mypass>

Lỗi của tôi có thể là do quyền đối với đường dẫn ổ cắm, nhưng chưa đến lúc xác minh đó là nguyên nhân.


Tôi đã di chuyển DataDir của mình một lúc nào đó, tôi đoán đó là lý do tại sao tôi cần đường dẫn đến ổ cắm
zzapper

0

Tôi cũng đã gặp phải vấn đề này sau khi nâng cấp hệ thống của mình từ Mint 12 lên Mint 15. Tôi đã lưu trữ / var / lib / mysql và đưa nó trở lại vị trí nâng cấp sau. Tôi đã chạy cái đầu tiên mysqlchecktừ bình luận của user16081 và nó đã phàn nàn về mysql.sock.

Tôi bắt đầu sử dụng mysqld /usr/sbin/mysqld &mysql_upgradechạy tốt.


Đó là một phương pháp khá đáng sợ để nâng cấp MySQL, nhưng tôi rất vui vì nó hiệu quả với bạn.
Aaron Copley

@ aaron-copley: thực sự nó không hoàn toàn hoạt động. MySQL 5.5.32 đang bỏ qua một phần nhiều bảng InnoDB của tôi; chúng xuất hiện SHOW TABLES, nhưng nếu không thì không tồn tại. Tôi hiện đang cố gắng để các tiện ích mysql hoạt động, nhưng điều đó phàn nàn về việc thiếu các mô-đun python.
Marty Vance

0

Tôi chạy qua cùng một vấn đề.
Tôi đã giải quyết nó bằng cách bao gồm -S /path/to/mysql.sock

Trong trường hợp cụ thể của tôi, đầu ra của mysql_upTHER là:
Tìm kiếm 'mysql' là: mysql
Tìm kiếm 'mysqlcheck' là: mysqlcheck
FATAL ERROR: Nâng cấp thất bại

Điều đó khá vô dụng. --verbose không có sự khác biệt.

Cắm xung quanh tôi giải quyết lệnh sau và nó hoạt động như một bùa mê:
mysql_upTHER -S /var/lib/mysql/mysql.sock -uUSERNAME -p

Hy vọng nó giúp.


0

Tôi đã đối mặt với vấn đề này, và tôi phát hiện ra rằng,

  1. nó yêu cầu dịch vụ MySQL để chạy

  2. nó yêu cầu tên người dùng và mật khẩu


0

Tôi gặp phải vấn đề tương tự.

Tôi đã giải quyết điều này bằng cách cài đặt cơ sở dữ liệu mới bằng mysql_install_db --user=mysqlcách mô tả trong các nhận xét về rc.mysqltệp của tôi trong / etc.

Sau đó, tôi đã có thể bắt đầu mysemon daemon và sử dụng 'mysql' hoặc bất cứ điều gì bạn muốn kết nối với gói mysql.

Tôi đã có vấn đề này trên cánh tay slackware, nhưng giả sử nó không thành vấn đề trong trường hợp này.


0

Trong trường hợp của tôi, tôi đã có một vài phiên bản mysqld chạy cục bộ khiến mysql_upTHER không thành công với Lỗi: Không thành công trong khi tìm nạp phiên bản Máy chủ! Có thể là do truy cập trái phép. ps aux | grep mysqlvà chắc chắn rằng mysqld đã tắt tất cả. Sau đó brew gỡ cài đặt tất cả các phiên bản, cài đặt lại phiên bản phù hợp. Và sau đó mysql_upTHER bắt đầu hoạt động.


-1

thử

mysql_upgrade --verbose 

hoặc thậm chí (hoặc cả hai)

--debug-check --debug-info

Đã thử chúng, không có thông tin thực sự hữu ích, tôi không nghĩ |;
Jim Rubenstein

khởi động lại và dán một số thông tin nhật ký lỗi \; không chắc chắn tại sao nó cứ lặp đi lặp lại qua những lỗi tương tự.
Jim Rubenstein

có vẻ như bạn có một lỗi ở đó - 130730 21:03:34 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't existtôi nghĩ đó là nguyên nhân khiến toàn bộ thất bại.
alexus

nhưng trước đó, hãy thử mysql_upTHER --version và cung cấp đầu ra cho điều đó.
alexus

mysql_upgrade --versionkhông tạo ra phiên bản đầu ra (chỉ là lỗi FATAL ERROR). mysql --versionlà mysql Ver 14,14 Distrib 5.5.32, dành cho debian-linux-gnu (x86_64) sử dụng readline 6.2 và phiên bản mysqld là 5.5
Jim Rubenstein

-3

Người dùng root cho MySQL được đặt tên là "admin", không phải root. Lệnh đúng là

mysql_upgrade -uadmin -p

Điều này là hoàn toàn sai. Người dùng root trong MySQL là root.
dr01
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.