MySQL Fatal error: Can't open and lock privilege tables: Incorrect file format 'user'

前端 未结 3 1263
栀梦
栀梦 2020-12-16 01:27

MySQL (Percona 5.6) will not start.

This error has happened to me several times. Each time, I have had to remove MySQL data directories and reinstall MySQL.

3条回答
  •  猫巷女王i
    2020-12-16 02:15

    Thanks to John for putting me on the right track, I had a few other hoops to jump through on my system. Hope this helps someone.

    This is a corrupt privilege table. Maybe caused by an upgrade or power failure. My system OpenSUSE 13.2, MySQL 5.6. Simple reinstall does not fix, must delete all traces of MySQL before reinstall OR…

    Close down all instances of MySQL

    $ systemctl stop mysql.service
    $ pkill -9 mysqld
    

    Start server bypassing privilege system

    $ sudo mysqld_safe --user=root --skip-grant-tables
    

    Start MySQL command line tool

    $ mysql
    

    If you receive

    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
    

    mysqld_safe is running with its socket somewhere else. Find it with.

    $ sudo find / -type s
    

    Mine was in /var/run/mysql/ Edit the socket line in my.cnf, making a note of your existing socket setting. My line became

    socket=/var/run/mysql/mysql.sock
    

    Return to 'Close down all instances of MySQL' (the top of these instructions). Follow them through to 'Start MySQL command line tool'. Hopefully you can open mysql successfully. From mysql command line.

    mysql> use mysql
    mysql> repair table user use_frm;
    mysql> exit
    

    Close down all instances of MySQL

    $ systemctl stop mysql.service
    $ pkill -9 mysqld
    

    Re-edit my.cnf, returning the socket line to its original setting.

    I had to reset permissions on 2 files in my mysql data directory.

    $ chown mysql:mysql server2.err
    $ chown mysql:mysql server2.pid
    

    Start the MySQL server

    $ systemctl start mysql.service
    

    I then got the same original error with another table (db)

    [ERROR] Fatal error: Can't open and lock privilege  tables: Incorrect file format 'db'
    

    And had to repeat the above procedure multiple times altering the 'repair' command until all privilege tables were fixed.

    mysql> repair table db use_frm;
    

提交回复
热议问题