MySQL Databases have the potential to grow very large, especially on sites with a high volume of traffic or a large amount of content. Problems like Broken Tables and References can sometimes corrupt a MySQL database with such amounts of data. This will disrupt the functionalities of a website or application.

If you’re having problems with your MySQL database, you might need to repair it. Your data team or clients suffering from this would be the last thing you want. This article will introduce you to two of the most efficient methods to perform a full database repair and perform MySQL Repair Database. Read along!

How to Identify Errors in a MySQL Table

There are two methods to diagnose a MySQL table for errors:

  • Using the CHECK TABLE command to identify errors in a table.
  • Using the mysqlcheck command to identify errors in a table.

Using the CHECK TABLE Command to Identify Errors in a Table

The CHECK TABLE query is valid in MySQL while the service is active. The general application is:

CHECK TABLE <table name> [, table name, table name] [option] [option];

The simplest use is a single table with no options:

CHECK TABLE <table name>;

The CHECK TABLE query returns an informative table regarding the check results:

Image Source

Without any settings, CHECK TABLE does a MEDIUM check on MyISAM tables and views. The FOR UPGRADE and QUICK commands run tests on InnoDB engine tables and views, while the other options are ignored.

You can also combine the choices to do a more thorough check. For instance, to perform a quick check to see if a table closed properly, run:

CHECK TABLE <table name> FAST QUICK;

Any options that are not applicable to the tables are automatically ignored.

Using the mysqlcheck Command to Identify Errors in a Table

The first step in troubleshooting is to run diagnostics. You can leverage the mysqlcheck command to find out whether your MySQL table is corrupted or not. Follow the steps given below to carry out the test:

  • Navigate to the root directory where the databases are stored by using the following command:
sudo su
cd /var/lib/mysql
  • Use the following command to check the entire database:
mysqlcheck <database name>
  • Alternatively, by providing the table name, you can also check a specific table within the database:
mysqlcheck <database name> <table name>
Check Errors in a MySQL Table
Image Source
Simplify MySQL ETL with Hevo’s No-code Data Pipeline

Are you looking for a way to replicate data from MySQL? Hevo is the only real-time ELT No-code Data Pipeline platform that cost-effectively automates data pipelines that are flexible to your needs. 

Get started with hevo for free

Common Reasons for Database Corruptions

  • Hardware failure in server.
  • Machines shutting down unexpectedly.
  • MySQL server stops in the middle of a write process.
  • Using third-party software for accessing the database.
  • Software bugs in the MySQL query.
  • Incorrect data schema.

How to Perform MySQL Repair Database?

MySQL databases can become corrupted or damaged due to multiple reasons. The most common cause of database corruption is an abrupt Server Shutdown.

Apart from it, problems with the underlying platform – such as Disk Controllers, Disk Subsystems, Drivers, that MySQL uses to store and retrieve data can also make the database vulnerable to corruption.

Some of the methods that you can leverage to resolve the database corruption and perform MySQL Repair Database are discussed below:

Method 1: By Using the REPAIR TABLE Method

If you discover corruption in a MyISAM database table, try repairing it with the REPAIR TABLE statement. After scanning and locating the problematic database and tables, the REPAIR TABLE Query is the quickest way to resolve the issue and perform MySQL Repair Database.

The syntax to repair a single table using the REPAIR TABLE method is given below:

REPAIR TABLE name[options]
where name refers to the name of the corrupted database table.

In case, you wish to repair all the tables in a MYSQL database, the following command can help you in doing that:

mysqlcheck –repair –all-databases
Image Source

Table Repair Considerations

REPAIR TABLE upgrades a table if it contains old temporal columns in early-5.6.4 format and the avoid_temporal_upgrade system variable is turned off. If avoid_temporal_upgrade is activated, REPAIR TABLE ignores and does not upgrade any old temporal columns in the table.

To upgrade tables that have these temporal columns, disable avoid_temporal_upgrade when running REPAIR TABLE. You may be able to improve REPAIR TABLE efficiency by adjusting some system variables.

Method 2: By Using the MYSQL Built-in Repair Options

MySQL houses two built-in options for repairing corrupt database tables and performing MySQL Repair Database. They are as follows:

1) Use the myisamchk Command Line Utility

  • Before running the myisamchk command, ensure that the MySQL server has been stopped with the command “service mysqld stop.” This is necessary to prevent users from accessing the corrupt table(s) while you work on them. Now, open the terminal and run the following command:
systemctl mysql stop
  •  Navigate to the database’s location as the root user:
cd /var/lib/mysql/<database name>
  • To check a specific table and perform MySQL Repair Database, execute the following command:
myisamchk <table name>
myisamchk test table command: MySQL Repair Database
Image Source
  • Finally, you can repair the corrupted table by using the following command:
myisamchk --recover <table name>
  • Once you have successfully repaired the corrupted table, restart the MySQL Server.

2) Running the InnoDB Recovery Process

For InnoDB databases, the MySQL documentation recommends running the InnoDB Recovery process. Follow the steps given below to repair a corrupt InnoDB table and perform MySQL Repair Database:

  • Using your preferred text editor, locate and open the Global Configuration File.
  • In the my.cnf file, add the following option:
[mysqld]
innodb_force_recovery=4

Note: The forced recovery option is set to 0 (off) by default and can be increased to 6. Every new level incorporates the recovery features of the previous levels.

  • Now, save the file and then close it.
  • To ensure that the new configuration file takes effect, restart the MySQL server by using the following command:
systemctl restart MySQL
  • Export all databases in the home folder to a backup file using the mysqldump command:
sudo mysqldump --all-databases --add-drop-database --add-drop-table --routines > <file name>.sql
  • Launch the MySQL client and drop all of the affected database tables by using the following command.
DROP TABLE IF EXISTS <table name>;
  • Now, stop the MySQL Server using the following command:
systemctl start mysql
  • To disable the Recovery mode, comment out the innodb force recovery option. Once the recovery mode has been successfully disabled, save and close the file.
  • Now, restart the MySQL server.
  • In the MySQL shell, restore the database from the backup.sql file. Log in to the MySQL client as follows:
sudo mysql -u <username> -p <password>
  • To import the databases, run the following query:
USE <database name>;
# Turning off auto commit is optional and speeds things up for larger databases
SET autocommit=0;
SOURCE <file name>.sql;

Method 3: By Using the ALTER TABLE Method

You can also use the ALTER TABLE method to recreate the table with the same storage engine. For instance, assuming  you have an InnoDB table, execute the following command:

ALTER TABLE <table name> ENGINE = InnoDB;
To recreate a MyISAM table, run the following command:
ALTER TABLE <table name> ENGINE = MyISAM;

In case you are not sure which storage engine your table uses, execute the following command to find out:

SHOW CREATE TABLE <table name>;
Image Source

Key Advantages of using MySQL

Features of MySQL
Image Source

Some of the key advantages of using MySQL are as follows:

  • Easy to Deploy: MySQL allows businesses to set up and run SQL queries on their data in minutes. MySQL enables them to develop new applications faster than proprietary databases.
  • High Speed: It goes without saying that if you’re working with large datasets, you would not want to spend a lot of time working with datasets and tables. Unlike other databases, MySQL is relatively faster and can query data from large datasets, which aids in business intelligence activities.
  • Industry Standards: Whether you are a developer who needs to develop software or a freelancer who wants to work with databases, MySQL has been in use for over 20 years and you can rely on it to be a fully integrated Transaction-Safe, ACID-Compliant database.

Conclusion

Database corruptions are unavoidable, and hence MySQL provides a variety of methods for detecting and fixing errors in a database. This article introduced you to different methods that can be leveraged to perform MySQL Repair database.

Migrating large volumes of data from MySQL to a Cloud-based Data Warehouse is a time-consuming and inefficient operation, but with a Data Integration tool like Hevo Data, you can do it in no time and with no effort.

Hevo is the only real-time ELT No-code Data Pipeline platform that cost-effectively automates data pipelines that are flexible to your needs. It helps to set up data integration from MySQL and 150+ Data Sources (including 40+ Free Data Sources) and will let you directly load data to a Data Warehouse or the destination of your choice.

Hevo Data with its strong integration with 150+ Sources & BI tools such as MySQL, PostgreSQL, MS SQL Server, etc., allows you to not only export data from sources & load data to the destinations, but also transform & enrich your data, & make it analysis-ready so that you can focus only on your key business needs and perform insightful analysis using BI tools.

Visit our website to explore hevo

Give Hevo Data a try and sign up for a 14-day free trial today. Hevo pricing for different use cases and business needs, check them out!

Share your experience of learning about the Repair MySQL Database process described in this article. Tell us in the comments below!

mm
Former Research Analyst, Hevo Data

Rakesh is a Cloud Engineer with a passion for data, software architecture, and writing technical content. He has experience writing articles on various topics related to data integration and infrastructure.

No-code Data Pipeline for MySQL