Skip to content
Servers & HostingAdvanced

Why Does MySQL Database Show 387 MB in Hosting but the SQL Export Is Only 30 MB?

A common situation for website administrators is seeing a significant difference between the database size reported by the hosting control panel and the size...

BI
Bison Technical Team Enterprise IT specialists
Updated 26 Jul 2026 15 min read 1 total views

A common situation for website administrators is seeing a significant difference between the database size reported by the hosting control panel and the size of the SQL backup downloaded through phpMyAdmin.

For example:

Advertisement

Hosting panel database size: 387 MB
Downloaded SQL export: approximately 30 MB

At first glance, this can look like the backup is incomplete or that hundreds of megabytes of data are missing. However, in many cases, this difference is completely normal.

The hosting panel and the SQL export are measuring two different things.

This article explains why a MySQL or MariaDB database occupying hundreds of megabytes on a hosting server can produce a much smaller SQL backup, how indexes and unused space affect database size, how compression changes backup size, and—most importantly—how to verify that the backup actually contains your complete database.

For security, all domain, database, table, and account names used below are fictional.


Example Scenario

Suppose a website uses:

Website: examplewebsite.com
Database: example_prod_db

The hosting control panel reports:

Database Size: 387 MB

However, after opening phpMyAdmin and exporting the entire database, the downloaded file is:

example_prod_db_backup.sql — 30 MB

Does this mean approximately 357 MB of database information is missing?

Not necessarily.

A database's storage size and an SQL dump's file size are fundamentally different measurements.


1. Physical Database Size vs. Logical SQL Backup Size

The hosting provider generally calculates database usage from the storage occupied by MySQL tables.

That can include:

  • Actual row data
  • Indexes
  • Primary keys
  • Secondary indexes
  • Allocated table space
  • Internal database structures
  • Unused allocated space
  • Fragmentation
  • Storage-engine overhead

An SQL export is different.

A logical SQL backup typically contains commands required to reconstruct the database, such as:

CREATE TABLE ...
INSERT INTO ...
ALTER TABLE ...

Instead of copying the database's physical storage structures byte-for-byte, the dump contains the logical information required to recreate them.

Therefore:

Database storage size ≠ SQL export size

A 387 MB database does not require a 387 MB .sql file.


2. Indexes Can Account for a Large Part of Database Size

Indexes are one of the most important reasons for a large difference.

Imagine a table:

customer_orders

containing fields such as:

id
customer_id
order_number
email
status
created_at
updated_at

The database may maintain indexes on:

PRIMARY KEY (id)
customer_id
order_number
email
status
created_at

These indexes occupy physical storage on the MySQL server.

For example:

Component Size
Actual table data 82 MB
Indexes 240 MB
Other allocated space 65 MB
Total 387 MB

An SQL backup does not normally need to contain a 240 MB copy of those index structures.

Instead, it may contain definitions similar to:

PRIMARY KEY (`id`),
KEY `customer_id` (`customer_id`),
KEY `email` (`email`)

When the SQL backup is imported, MySQL uses those definitions to rebuild the indexes.

This means hundreds of megabytes of physical index storage can be represented by only a small amount of text in the SQL dump.


3. Database Fragmentation and Unused Space

Another major reason is unused allocated space.

A database changes continuously as the website operates.

Records may be:

  • Created
  • Updated
  • Deleted
  • Replaced
  • Purged
  • Reorganized

A table that once contained millions of records might have grown significantly. Even after many records are deleted, its storage behavior may not correspond directly to the amount of currently useful logical data.

For example:

Table allocated/storage footprint: 150 MB
Current useful logical records: 35 MB

An SQL export generally backs up the current logical records rather than copying every aspect of the table's historical physical layout.

Consequently, the exported backup may be much smaller.


4. Compression Can Dramatically Reduce SQL Backup Size

Always check the file extension of the downloaded backup.

It might be:

example_prod_db.sql
example_prod_db.sql.gz
example_prod_db.sql.zip

These are very different.

A .sql file is normally plain text.

A .sql.gz file is GZIP compressed.

A .zip file is compressed as well.

SQL data can compress very effectively because databases frequently contain repeated strings, HTML, JSON, configuration values, URLs, status fields and similar text.

Therefore, a compressed file such as:

backup.sql.gz = 30 MB

could potentially expand into a much larger:

backup.sql = 150 MB

or more.

Never compare a compressed backup directly with the hosting panel's database storage figure.


5. SQL Dumps Store Instructions, Not Physical Database Files

A phpMyAdmin SQL export is generally a logical backup.

Suppose a table contains:

CREATE TABLE `customers` (
    `id` int NOT NULL,
    `name` varchar(150),
    `email` varchar(255),
    PRIMARY KEY (`id`),
    KEY `email` (`email`)
);

The dump defines what the table should look like.

It then contains the records:

INSERT INTO `customers`
(`id`, `name`, `email`)
VALUES
(1, 'Example User', 'user1@example.com'),
(2, 'Demo User', 'user2@example.com');

During restoration, MySQL creates the table, inserts the records and creates the required indexes.

The dump therefore doesn't need to duplicate the server's physical representation of those structures.


6. Storage Engine Overhead

Modern MySQL installations commonly use the InnoDB storage engine.

InnoDB has internal structures and storage requirements that do not translate directly into equivalent SQL dump size.

The server needs a storage format optimized for:

  • Queries
  • Index lookups
  • Transactions
  • Concurrency
  • Crash recovery
  • Data integrity

A backup file has a different objective: storing enough logical information to reconstruct the database.

This is another reason the sizes should not be expected to match.


7. The Important Risk: An Incomplete phpMyAdmin Export

Although a 387 MB database producing a 30 MB SQL backup can be legitimate, you should never assume that it is complete based only on file size.

A small backup can also indicate an incomplete export.

Browser-based phpMyAdmin exports can sometimes be affected by hosting limits such as:

  • PHP execution timeout
  • PHP memory limits
  • Web server timeout
  • Hosting resource limits
  • Large tables
  • Large BLOB fields
  • Connection interruptions
  • Browser/network interruption
  • Export configuration
  • Server-side restrictions

Therefore, the right question is not:

Why isn't my SQL file 387 MB?

The better question is:

Does my SQL backup contain all tables, structures and required data?


8. Check Which Tables Are Consuming the Database Space

A useful diagnostic is to examine the size of every table.

Open:

phpMyAdmin → Select Database → SQL

Run:

SELECT
    table_name AS `Table`,
    engine AS `Engine`,
    table_rows AS `Rows`,
    ROUND(data_length / 1024 / 1024, 2) AS `Data_MB`,
    ROUND(index_length / 1024 / 1024, 2) AS `Index_MB`,
    ROUND(data_free / 1024 / 1024, 2) AS `Free_MB`,
    ROUND((data_length + index_length) / 1024 / 1024, 2) AS `Total_MB`
FROM information_schema.tables
WHERE table_schema = DATABASE()
ORDER BY (data_length + index_length) DESC;

This report helps identify:

  • Largest tables
  • Data size
  • Index size
  • Estimated row counts
  • Available/free space reported by the engine
  • Total data + index size

A result might look like:

Table Data Index Free Total
activity_log 45 MB 155 MB 10 MB 200 MB
content_meta 25 MB 80 MB 5 MB 105 MB
content_posts 30 MB 22 MB 2 MB 52 MB
settings 4 MB 8 MB 0 MB 12 MB
other tables 10 MB 8 MB 18 MB

This immediately explains where database storage is being consumed.


9. Check Total Data and Index Size

You can also calculate totals.

Run:

SELECT
    ROUND(SUM(data_length) / 1024 / 1024, 2) AS Data_MB,
    ROUND(SUM(index_length) / 1024 / 1024, 2) AS Index_MB,
    ROUND(SUM(data_free) / 1024 / 1024, 2) AS Free_MB,
    ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS Total_MB
FROM information_schema.tables
WHERE table_schema = DATABASE();

Suppose the result is:

Data_MB   : 42.50
Index_MB  : 344.20
Total_MB  : 386.70

Now the 30 MB SQL export becomes much less surprising.

The database contains relatively little actual table data compared with its indexes.

When restored, MySQL can recreate those indexes from their definitions.


10. What If Data_MB Is Close to 350 MB?

Consider another result:

Data_MB   : 345 MB
Index_MB  : 42 MB
Total_MB  : 387 MB

Now suppose the downloaded file is:

backup.sql = 30 MB

and it is not compressed.

This deserves closer investigation.

It does not automatically prove that the backup is incomplete because MySQL's storage metrics and textual dump size still aren't directly comparable. However, the difference is large enough that you should verify the backup before depending on it.

Check:

  • Were all tables selected?
  • Was both structure and data exported?
  • Did phpMyAdmin finish successfully?
  • Are large tables represented in the dump?
  • Is the file actually compressed?
  • Were any tables excluded?
  • Did the export terminate unexpectedly?

11. Verify the Number of Tables

Before exporting, note how many tables the database contains.

For example:

Database: example_prod_db
Tables: 74

After downloading the SQL backup, open it using a suitable large-file text editor and search for:

CREATE TABLE

You should see table creation definitions throughout the dump.

Also search for:

INSERT INTO

to confirm that table data is present.

Be aware that the exact number of CREATE TABLE or INSERT INTO statements does not always equal the table or row count because dump formatting options can vary. The goal is to confirm that expected tables and data are represented.


12. Check the Largest Tables First

Suppose your database analysis shows:

activity_log       180 MB
content_meta        90 MB
content_posts       50 MB
customer_orders     30 MB
other tables        37 MB

The first table to investigate is:

activity_log

Open the SQL backup and search for:

CREATE TABLE `activity_log`

Then check whether its data is present.

Do the same for other large or business-critical tables.

This is more meaningful than comparing the overall file sizes.


13. Structure-Only vs. Structure-and-Data Backup

phpMyAdmin can export database structure without exporting all table records.

A structure-only dump could contain:

CREATE TABLE ...

but little or no:

INSERT INTO ...

Such a backup may restore empty tables successfully while all actual website content is missing.

For a normal full backup, ensure that the export includes both:

Structure + Data

unless you deliberately need a schema-only backup.


14. Recommended phpMyAdmin Export Method

For an important database, select:

phpMyAdmin → Database → Export → Custom

Rather than relying blindly on the fastest default option, review the settings.

For a standard full logical backup, confirm that:

  • All required tables are selected
  • SQL format is selected
  • Structure is included
  • Data is included
  • DROP TABLE statements are included when appropriate for your restore workflow
  • CREATE TABLE statements are included
  • AUTO_INCREMENT information is retained
  • Character set is appropriate, commonly UTF-8/utf8mb4
  • Triggers, routines and events are included when your application uses them

For a large database, compression such as GZIP can make the download significantly smaller and faster.


15. What Should a Reliable Backup Contain?

A complete backup should preserve everything your application needs to reconstruct the database.

Depending on the application, that can include:

  • Tables
  • Columns
  • Data
  • Primary keys
  • Index definitions
  • AUTO_INCREMENT settings
  • Views
  • Triggers
  • Stored procedures
  • Functions
  • Events
  • Character sets
  • Collations

Not every website uses all of these features.

A simple CMS installation may mainly depend on tables and their records, while a custom application may use triggers, views or stored routines.


16. Why Backup File Size Is a Poor Validation Method

Consider two databases.

Database A

Physical storage: 400 MB
Data: 50 MB
Indexes: 350 MB
SQL dump: 40 MB

This could be completely normal.

Database B

Physical storage: 400 MB
Data: 360 MB
Indexes: 40 MB
SQL dump: 20 MB

This deserves investigation, particularly if the dump is uncompressed.

The point is:

File size alone cannot establish backup completeness.

Validation should be based on structure, data, table coverage and, ideally, a test restoration.


17. The Best Verification: Test Restore

The most reliable way to verify a database backup is to restore it into a separate test database.

For example:

Production:
example_prod_db

Test:
example_restore_test

Import the backup into:

example_restore_test

Then compare:

  • Table count
  • Important table row counts
  • Database structure
  • Critical records
  • Views
  • Triggers
  • Stored routines where applicable

If the application can safely be pointed to a staging copy, application-level testing provides even stronger verification.

Never test a restore over the production database unless you specifically intend to replace it and have appropriate backups and recovery procedures.


18. Command-Line mysqldump for Larger Databases

For larger or important databases, command-line backups are often preferable to browser-based phpMyAdmin exports when the hosting provider provides SSH access and permits mysqldump.

A typical example is:

mysqldump -u DB_USER -p example_prod_db > example_prod_db_backup.sql

You will be prompted for the database password.

A commonly useful form is:

mysqldump \
  --single-transaction \
  --routines \
  --triggers \
  --events \
  -u DB_USER \
  -p \
  example_prod_db > example_prod_db_backup.sql

--single-transaction is particularly useful for transactional InnoDB tables because it can provide a consistent logical snapshot without locking tables for the entire dump.

The exact command should match the database engine, application and hosting environment.


19. Create a Compressed Backup Directly

On systems where GZIP is available:

mysqldump \
  --single-transaction \
  --routines \
  --triggers \
  --events \
  -u DB_USER \
  -p \
  example_prod_db | gzip > example_prod_db_backup.sql.gz

This can substantially reduce storage and transfer requirements.

Again, a compressed .sql.gz backup should not be compared directly with the database size displayed by the hosting panel.


20. Security Precautions When Sharing SQL Information

SQL backups may contain highly sensitive information.

Depending on the website, a dump can include:

  • User names
  • Email addresses
  • Password hashes
  • Customer information
  • Orders
  • Contact form submissions
  • API configuration
  • Session information
  • Application settings
  • Internal URLs
  • Authentication-related data

Do not publicly share:

Production database names
Database usernames
Database passwords
Hosting credentials
SSH credentials
Private SQL dumps
API keys
Access tokens
Private customer records

When requesting technical assistance, replace production information with examples such as:

examplewebsite.com
example_prod_db
DB_USER
example_table

21. Should You Optimize the Database?

If a database has significant unused space or inefficient tables, optimization may sometimes reduce storage usage.

However, do not optimize a production database simply because the hosting panel shows a large size.

First:

  1. Create a verified backup.
  2. Identify the tables consuming space.
  3. Determine whether the space is data, indexes or reclaimable overhead.
  4. Understand the table engine.
  5. Schedule maintenance appropriately.

Operations such as:

OPTIMIZE TABLE table_name;

can rebuild tables and may temporarily require additional disk space or affect availability/performance.

Use optimization only after understanding its impact.


22. Database Size vs. Website File Size

Another important distinction is that a website typically consists of both:

Website files

and:

Database

Website files may contain:

PHP files
CSS
JavaScript
Images
Videos
Uploads
Documents
Themes
Plugins
Configuration files

The MySQL database contains structured application information.

Therefore, downloading only:

backup.sql

does not normally constitute a complete website backup.

A proper website recovery strategy should generally protect both:

Website Files + Database

and any additional external assets or configuration required by the application.


23. Recommended Backup Strategy

For a production website, maintain multiple independent backups rather than relying on one SQL export.

A practical approach is:

Hosting backup + manually verified SQL backup + off-server backup

For business-critical websites, also consider:

  • Automated scheduled backups
  • Multiple retention points
  • Off-site/cloud storage
  • Encryption
  • Backup monitoring
  • Periodic restore tests
  • Defined recovery procedures

A backup that has never been successfully restored should not be treated with the same confidence as a restore-tested backup.


24. Final Conclusion

A hosting panel showing:

Database size: 387 MB

while phpMyAdmin produces:

SQL export: 30 MB

does not automatically indicate a problem.

The difference can be caused by:

  • Large indexes
  • Storage-engine structures
  • Allocated space
  • Fragmentation or reclaimable space
  • Logical vs. physical storage differences
  • SQL compression
  • Indexes being reconstructed during restoration

However, a small SQL backup can also result from an incomplete export.

Therefore, don't validate a backup based on file size alone.

The safest process is:

Analyze table sizes → Check data/index usage → Export structure and data → Verify important tables → Test restore → Maintain an independent backup

The most important measurement is not whether the SQL file is 30 MB, 100 MB or 387 MB.

The important question is:

Can the backup successfully reconstruct the database and recover the website when it is needed?


Frequently Asked Questions

1. My hosting panel shows a 387 MB database, but my SQL backup is only 30 MB. Is this normal?

Yes, it can be. The hosting panel may include table data, indexes and other storage overhead, while an SQL dump represents the database logically.

2. Does a 30 MB SQL backup mean that data is missing?

Not necessarily. Check whether the file is compressed and verify that all expected tables and data are included.

3. Why are indexes not the same size in an SQL backup?

An SQL dump normally stores index definitions. MySQL rebuilds the physical index structures during import.

4. Can indexes consume more space than actual data?

Yes. Depending on table design and indexing strategy, indexes can represent a significant portion of database storage.

5. What is Data_MB?

Data_MB represents the reported storage occupied by table data according to MySQL metadata.

6. What is Index_MB?

Index_MB represents storage associated with indexes.

7. What is Data_Free?

It is storage reported by the engine as free or potentially reusable in relation to the table. Its interpretation can vary depending on the storage engine and configuration.

8. Should Data_MB + Index_MB equal the SQL file size?

No. They measure fundamentally different representations of the database.

9. Why is a .sql.gz file so small?

Because it is compressed. SQL text often compresses very effectively.

10. Is phpMyAdmin safe for database backups?

It is commonly used and suitable for many databases, but browser and hosting limits can make command-line or automated backup mechanisms preferable for larger or critical databases.

11. How do I know whether my phpMyAdmin export completed?

Confirm the export finished without errors, inspect the dump, verify important tables and perform a test import when possible.

12. Should I select all tables during export?

Yes, for a full database backup, unless certain tables are intentionally excluded and you understand the recovery implications.

13. Should I export both structure and data?

Yes, for a normal full logical backup.

14. Do I need triggers and routines?

Only if your database uses them, but including them in a comprehensive backup is generally appropriate when supported.

15. Can I restore the backup to another database?

Yes. Restoring to a separate test database is an excellent way to verify the backup without touching production.

16. Should I optimize the database before backing it up?

It is not required. Back up first before performing maintenance or optimization.

17. Can OPTIMIZE TABLE reduce database size?

Sometimes, particularly when reclaimable space exists, but the effect depends on the storage engine and table conditions.

18. Is an SQL backup enough to restore my entire website?

Usually not. You typically need both the database and website files.

19. Does an SQL backup contain images?

Images stored as website files are not included. Images stored directly as BLOBs in the database can be included in a logical dump.

20. What is the safest way to confirm a backup?

Restore it into a separate test environment and verify the resulting database and application.

 

#MySQL #SQL #phpMyAdmin #Database #DatabaseBackup #MySQLBackup #SQLBackup #DatabaseSize #WebHosting #Hosting #WebsiteBackup #DatabaseRecovery #MySQLDatabase #SQLDatabase #MySQLTips #DatabaseTips #DatabaseAdmin #DBA #WebDevelopment #WebsiteManagement #ServerManagement #ServerAdmin #HostingSupport #TechnicalSupport #TechGuide #TechnicalArticle #DatabaseSecurity #DataBackup #BackupStrategy #DisasterRecovery #DataRecovery #MySQLDump #SQLDump #InnoDB #DatabaseOptimization #MySQLOptimization #DatabaseMaintenance #DatabaseTroubleshooting #SQLExport #MySQLExport #SQLImport #MySQLRestore #BackupVerification #DatabaseIntegrity #WebsiteSecurity #DataSecurity #CloudBackup #AutomatedBackup #HostingTips #WebAdmin

YOUR FEEDBACK

Was this guide useful?

Your answer helps us keep BISONKB accurate and practical.

BISON AI

Ask about “Why Does MySQL Database Show 387 MB in Hosting but the SQL Export Is Only 30 MB?”

This interface is ready to connect to your preferred AI provider. No article or user data is sent until that service is configured.

THE BISON BRIEF

Practical IT knowledge, once a week.

New troubleshooting guides, scripts and infrastructure notes. No noise.

By subscribing, you agree to our privacy policy.