Decorative Flower
Her Realm, Personal website and blog of Cole
Dec 19

WordPress Database: Shrinking the Database

In the first post about understanding the WordPress database, I described the basics and how to change options and your password directly from the database. This post will be all around shrinking your database. The other day, I logged into mine to see that it had suddenly jumped to 70 megabytes. I had just done some maintenance, so I began to investigate because I was moving dangerously close to my storage limit with my host.

Why is it important to shrink your database?

  1. Because you pay for the space you use on your host, and the database uses that space.
  2. Because tables can become so large that you won’t be able to move them if you get a new host.
  3. Because large databases that aren’t optimized may cause your site to run sluggishly.

WP Commentmeta Table full of Akismet Artifacta

WP Commentmeta Table full of Akismet Artifacta

Check out Akismet’s damage

This may not affect you, especially if your blog is younger than mine. Akismet is a decent spam blocking tool. You probably use it. It it is intended to keep two weeks worth of spam comment data then delete that data from your database. Older versions didn’t always delete correctly, however. This means you could have junk entries in your database for years.

I did. In fact, my “wp_commentmenta” tables were upwards of 10 megabytes. This became an issue when I was trying to move to my new host. I went into browse mode and quickly saw that almost all of the rows were related to Akismet. My next step was to Google whether this was necessary data, and the answer was a resounding “No!” I could delete that information manually, but I had thousands of entries.

The easiest way is to run a query to look for data in that table that doesn’t correlate to data in “wp_comments.”

So I logged into PHPMyAdmin, and clicked “SQL” Then, I entered this query:

DELETE FROM wp_commentmeta WHERE comment_id NOT IN (SELECT comment_id FROM wp_comments)

You may have to edit the name of the tables if your installation uses a prefix. Click “Go.” If prompted, click “Ok” to continue. This shrunk my tables by dozens of megabytes, so it was a good start.

Delete Unused Tables

When you delete plugins, the actual files disappear, but developers rarely code plugins so that they remove unneeded tables. The first step to remove this data is to look at the names. As I did this for one of my blogs, some tables quickly stood out as created by plugins that I no longer use. These include “fssstats” and some for YARRP, a related posts plugin that I had swapped for another. When you see tables like this, check them and select “Drop” from the drop-down menu. You’ll be prompted to continue.

As long as you’re no deleting the twelve tables that WordPress creates, which I talked about here, you won’t do irreversible damage. You could break something that you want but likely nothing that you’ll need. I simply spent a lot of time Googling table names. This frequently brings up threads in the WordPress forums. I repeated that process quite a few times, but the tables I wound up dropping entirely were really much smaller than the wp_commentmeta tables that contained all those Akismet artifacts.

If you’re curious about whether you can delete a table, go ahead and leave the table name here. I’m more than willing to do what I can to help.

Optimize your database

I recommend doing this after you delete any large chunks of information because there will be a lot of “orphaned” data. This is data that is no longer attached to anything in your database. After deleting dozens of megabytes of data from Akismet, I used WP Optimize to get rid of a few more megs. This plugin does a few things, including some new features that clear up space in your database:

  • Delete revisions
  • Clear spam
  • Remove trackbacks and pingbacks (I keep mine)
  • Remove post drafts
  • Delete transient options
  • Clear orphaned postmeta

Even if you’re not deleting large chunks of data, optimizing on a regular basis is a good idea, especially if you frequently save posts. You could have dozens of revisions per post. This plugin now allows you to automatically optimize. I have mine set to optimize on a weekly basis but, to be honest, I manually do it every day.

You can also optimize your database directly from PHPMyAdmin. After logging in to PHPMyAdmin, click on the database name. Select any tables that you’d like to optimize or simply select “Check All.” From the drop-down menu in the bottom of the page, choose “Optimize Tables.” This doesn’t delete all the extra information from your installation, but it’s handy to know.


Dec 18

WordPress Database: The Basics

Once upon a time, everything on your site actually existed in hard copy in PHP or HTML files. This isn’t so with WordPress. The script stores everything in a database. Every post, comment, link, option, widget setting, plugin setting and everything else that’s not your theme is store in the database. Whenever a visitor is on your site viewing a category, WordPress retrieves the relevant data from the database. Without a database, you have no blog.

Accessing the WordPress Database

To view your database, you can use a tool called phpMyAdmin, which you’ll find when you log in to your host’s control panel — not your WordPress dashboard. phpMyAdmin shows up under “Databases.” Select the user with access to your WordPress database (there may be multiple users and databases), and it will log you in.

When you first arrive in phpMyAdmin, you may have to click on the database name in the left navigation. Then, all the tables that the database contains will appear in a list. My database  currently houses 3 WordPress installs and nothing else for a total of 62 tables. Yours will likely have fewer for a single site and more if several scripts use the same database.

Default WordPress Tables

As of WordPress 3.8, there are exactly 12 tables that you never want to drop (delete) as a whole. You may edit these tables, but they should always remain to keep your blog working properly. They are:

  • wp_commentmeta
  • wp_comments
  • wp_links
  • wp_options
  • wp_postmeta
  • wp_posts
  • wp_post_relationships
  • wp_terms
  • wp_term_relationships
  • wp_term_taxonomy
  • wp_usermeta
  • wp_users

Any other table has been created by a plugin, and some plugins may create multiple tables.

If you specified a table prefix in your config.php file, your tables will have different names. For example, all my default WordPress tables for Reviews by Cole start with “rbc.”

When you’re looking at the list of tables, you can select one or several and perform options such as drop (delete) or empty (delete contents but keep the table). You can also optimize the tables, which I’ll touch on in the next post in this series.

Every table has an icon that allows you to browse it.

Changing WP Password through phpMyAdmin

Let’s say your website was hacked, and they changed the password to your installation. It’s the weekend, and your host has checked out for the night. What do you do? You change your password in phpMyAdmin. To do this, use the following steps:

  1. Log in to phpMyAdmin.
  2. Click “wp_users.”
  3. Click “Browse “tab.
  4. Click the Edit icon next to your account.
  5. Type your new password into the “Value” for “user_pass”.” The existing password is shown using encryption. This is good in the event that someone gains access to your database.
  6. Select “encrypt” from the Function drop-down menu.
  7. Click “Go” button.

You’ll now be able to log in to WordPress with your new password!

Exporting Tables in phpMyAdmin

Exporting Tables in phpMyAdmin

Backing up the WordPress Database

phpMyAdmin is the easiest way to save your entire blog, and it only takes a few steps. While plugins allow you to back up your blog manually and download it to your computer or to schedule email backups, phpMyAdmin provides a simple way to create that backup without every logging in to your WP dashboard.

  1. Log in to phpMyAdmin. Click the database name on the left.
  2. Click “Export” tab. Select any WordPress tables from the list.
  3. Click “Save as file.” Type in a database name.
  4. Choose a compression type. None saves as a larger SQL file. Bzip provides the best compression. I personally use Gzip.
  5. Click “Go.”

Your database will download to your computer via your browser.

These are the basic processes I think all WordPress users/website owners should know when it comes to phpMyAdmin and your databases. There’s much more that you can do, which I will touch on in subsequent posts.

If you have any specific questions about the database or anything I mentioned in this post, let me know in the comments. I’ll answer them directly or add them to my upcoming posts if they fit!


Skip to toolbar