Recover a MySQL database
NOTE: The Approach A sections referred to below do not apply to Bitnami native installers. Users of Bitnami native installers should refer only to the Approach B sections.
NOTE: We are in the process of modifying the configuration for many Bitnami stacks. On account of these changes, the file paths and commands stated in this guide may change depending on whether your Bitnami stack uses MySQL or MariaDB.
Linux and macOS native installer users can identify which database server is used in the stack by running the command below:
$ test -d installdir/mariadb && echo "MariaDB" || echo "MySQL"
Windows native installer users can identify which database server is used in the stack by checking for the presence of the installdir/mariadb directory. If present, the installer uses MariaDB and if not, it uses MySQL.
Depending on which database server (MySQL or MariaDB) is used by the installation, use the appropriate guides in our documentation for database-related operations.
Before trying to recover a MySQL database, you should check the exact error in the log file. To check the latest entries in the MySQL log file, run the command below:
For Bitnami installations following Approach A (using Linux system packages):
$ sudo tail -n 100 installdir/mysql/logs/mysqld.log
For Bitnami installations following Approach B (self-contained installations):
$ sudo tail -n 100 installdir/mysql/data/mysqld.log
Restart and repair the database
Assume the following error in the log file:
110108 10:37:45 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'user' is marked as crashed
The MySQL database is configured to use InnoDB engine by default. You can add the innodb_force_recovery=1 option in the main MySQL configuration file at installdir/mysql/etc/my.cnf to try and fix the database:
[mysqld] innodb_force_recovery = 1
Start the MySQL database with the following command:
$ mysqld --skip-grant-tables --user=mysql --skip-external-locking --port=3306 --sock=installdir/mysql/tmp/mysql.sock
Open a new console and try to log in to the database:
$ mysql -u root -p
In this case, the error was related to the mysql.user table. Run these commands:
mysql> use mysql; mysql> repair table user; mysql> check table user; mysql> exit;
If the table is recovered, you should see “OK” in the mysql.user status table. Do not forget to remove the innodb_force_recovery option from the my.cnf file and restart the MySQL server again.
$ sudo installdir/ctlscript.sh restart mysql
If you find a different error or cannot fix an issue, we can try to help at https://github.com/bitnami/vms.