{"id":11478,"date":"2021-12-14T11:43:47","date_gmt":"2021-12-14T11:43:47","guid":{"rendered":"https:\/\/getdevdone.com\/blog\/?p=11478"},"modified":"2026-03-08T23:42:31","modified_gmt":"2026-03-08T23:42:31","slug":"how-to-backup-wordpress","status":"publish","type":"post","link":"https:\/\/getdevdone.com\/blog\/how-to-backup-wordpress.html","title":{"rendered":"How to Backup WordPress"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Editor&#8217;s Note <\/h2>\n\n\n\n<p>Y<em>ou certainly know that a timely made backup will help you restore your WordPress website to its working state<\/em> <em>regardless of the cause of the problem &#8211; a hacker&#8217;s exploit, inadvertent deletion of a database record, or something else.<\/em><\/p>\n\n\n\n<p><em>While you can use various plugins to create a copy of your site, relying on them can be risky. You never know if the company that made a plugin will keep maintaining it in the long run. There are also compatibility issues: some plugins may negatively impact the operation of others.<\/em><\/p>\n\n\n\n<p><em>The solution? You can make backups by using the terminal. This gives you much finer control over what and how you can copy and removes your dependence on plugins.<\/em><\/p>\n\n\n\n<p><em>If you want to know how to apply this method the right way, read the post by Christoph Schmidl.<\/em><\/p>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Part 1: Creating Backups Manually by Just Using the Terminal<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" width=\"1024\" height=\"682\" src=\"https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/11\/19154306\/title_image-1024x682.jpeg\" alt=\"\" class=\"wp-image-11485\" style=\"width:840px;height:559px\" srcset=\"https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/11\/19154306\/title_image-1024x682.jpeg 1024w, https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/11\/19154306\/title_image-300x200.jpeg 300w, https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/11\/19154306\/title_image-768x512.jpeg 768w, https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/11\/19154306\/title_image-1536x1024.jpeg 1536w, https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/11\/19154306\/title_image-2048x1365.jpeg 2048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Photo by <a href=\"https:\/\/unsplash.com\/@redaquamedia?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText\" target=\"_blank\" rel=\"noreferrer noopener\">Denny M\u00fcller<\/a> on <a href=\"https:\/\/unsplash.com\/s\/photos\/hardware-disk?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText\" target=\"_blank\" rel=\"noreferrer noopener\">Unsplash<\/a><\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ce5b\">(tl;dr)<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Create WordPress database backup: <code>mysqldump -u [user] -p [database_name] | gzip > [backup_name]_$(date +%Y-%m-%d_%H-%M-%S).sql.gz<\/code><\/li>\n\n\n\n<li>Create WordPress files backup: <code>tar -zcvf [archive_name]_$(date +%Y-%m-%d_%H-%M-%S).tar.gz [target_directory]<\/code><\/li>\n\n\n\n<li>Restore WordPress database: <code>gunzip &lt; [backup_name].sql.gz | mysql -u [user] -p [database_name]<\/code><\/li>\n\n\n\n<li>Restore WordPress files: <code>tar -zxvf [archive_name].tar.gz --directory [target_directory]<\/code><\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"3fc9\">1. Introduction<\/h3>\n\n\n\n<p id=\"84c6\"><a href=\"https:\/\/wordpress.com\/\" rel=\"noreferrer noopener\" target=\"_blank\">WordPress<\/a> is the world\u2019s most popular content management system and according to <a href=\"https:\/\/w3techs.com\/technologies\/details\/cm-wordpress\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">W3Techs<\/a>,<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\" id=\"529f\">\n<p><strong>WordPress is used by 63.5%<\/strong> of all the websites whose content management system we know. This is 37.8% of all websites.<\/p>\n<\/blockquote>\n\n\n\n<figure class=\"wp-block-image alignleft size-full\"><img decoding=\"async\" width=\"260\" height=\"260\" src=\"https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/11\/19155236\/wordpress_logo.png\" alt=\"\" class=\"wp-image-11488\" srcset=\"https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/11\/19155236\/wordpress_logo.png 260w, https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/11\/19155236\/wordpress_logo-150x150.png 150w, https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/11\/19155236\/wordpress_logo-50x50.png 50w, https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/11\/19155236\/wordpress_logo-120x120.png 120w\" sizes=\"(max-width: 260px) 100vw, 260px\" \/><figcaption class=\"wp-element-caption\">WordPress Logo<\/figcaption><\/figure>\n\n\n\n<p id=\"622e\">Since WordPress is representing such a big market share, you would think that WordPress is a rock-solid system and that\u2019s why so many people rely on it. However, when you take a closer look at <a href=\"https:\/\/www.cvedetails.com\/vulnerability-list\/vendor_id-2337\/product_id-4096\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">CVE Details<\/a> you can see that a total number of 294 WordPress security vulnerabilities have been discovered throughout the years.<\/p>\n\n\n\n<p id=\"fd5e\">This leads to the assumption that WordPress is used by so many people because it\u2019s easy to use and because it is supported by a large number of plugins that can extend its functionality; and not because it\u2019s secure.<\/p>\n\n\n\n<p id=\"b9b6\">But this is a dangerous combination. WordPress is often used by the average person who knows how to use it for blogging and how to install plugins. But the installation of additional plugins may also introduce additional vulnerabilities that put the whole WordPress installation at risk.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\" id=\"7986\">\n<p>Security is traded for functionality.<\/p>\n<\/blockquote>\n\n\n\n<p id=\"bada\">Most people try to mitigate this risk by installing an additional backup plugin to be able to restore the WordPress installation when something goes wrong. However, the more plugins you install, the more complex and vulnerable your WordPress installation becomes. Josh Kaufman put it this way:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\" id=\"2244\">\n<p>\u201cThe more complex a system is and the longer it operates, the more likely it is to suffer a major failure.\u201d\u200a\u2014\u200aJosh\u00a0Kaufman<\/p>\n<\/blockquote>\n\n\n\n<p id=\"64be\">This article tries to solve this problem by explaining some of the WordPress internals and how to back up a single WordPress installation manually on a Linux server by using the terminal. Although most backup plugins can solve this task way quicker than described in this article, it will certainly help to know how to create backups manually and getting familiar with the terminal.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\" id=\"7e9c\">\n<p>\u201cRisk comes from not knowing what you\u2019re doing. \u201c\u200a\u2014\u200aWarren\u00a0Buffett<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"2dfa\">2. The Goal of This Article<\/h3>\n\n\n\n<p id=\"57c3\">This article should serve as a first starting point for people who want to back up their WordPress installation manually and don\u2019t want to install an additional plugin for that. If you are not afraid of the terminal and your WordPress installation runs on a Linux server (e.g., Ubuntu) then this article might come in handy. By following this article step by step, you will also gain more insights into how most backup plugins work under the hood.<\/p>\n\n\n\n<p id=\"9535\">However, I assume the following things:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You want to back up a single WordPress installation<\/li>\n\n\n\n<li>Your WordPress installation uses a <a href=\"https:\/\/www.mysql.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">MySQL<\/a> or <a href=\"https:\/\/mariadb.org\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">MariaDB<\/a> database<\/li>\n\n\n\n<li>You are not afraid of the terminal<\/li>\n<\/ul>\n\n\n\n<p id=\"1af4\">There are also other graphical programs available like phpMyAdmin or MySQL Workbench to create a database backup but in this article, we will stick to the terminal to keep things simple.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"fab7\">3. What We Need to Back up<\/h3>\n\n\n\n<p id=\"c970\">Creating a backup of your WordPress installation is not as hard as you might think. It only boils down to two things:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>WordPress database<\/li>\n\n\n\n<li>Important WordPress files and folders<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"2df6\">3.1 WordPress Database<\/h4>\n\n\n\n<p id=\"c8af\">If you take a closer look at the default structure of a WordPress database, you can see that it only contains 12 different tables which are mostly self-explanatory. <code>wp_users<\/code> contains information regarding the registered users of your WordPress installation, <code>wp_posts<\/code> contains the posts, and so on\u2026 you get the picture.<\/p>\n\n\n\n<p id=\"37bd\">So, we need to come up with an easy way to create a backup of the whole database that is also easy to restore later on.<\/p>\n\n\n\n<pre id=\"8f99\" class=\"wp-block-preformatted\"><strong>mysql&gt; show tables;<\/strong><br>+ \u2014 \u2014 \u2014 \u2014 \u2014 \u2014 \u2014 \u2014 \u2014 \u2014 \u2014 -+<br>| Tables_in_wp_db |<br>+ \u2014 \u2014 \u2014 \u2014 \u2014 \u2014 \u2014 \u2014 \u2014 \u2014 \u2014 -+<br>| wp_commentmeta |<br>| wp_comments |<br>| wp_links |<br>| wp_options |<br>| wp_postmeta |<br>| wp_posts |<br>| wp_term_relationships |<br>| wp_term_taxonomy |<br>| wp_termmeta |<br>| wp_terms |<br>| wp_usermeta |<br>| wp_users |<br>+ \u2014 \u2014 \u2014 \u2014 \u2014 \u2014 \u2014 \u2014 \u2014 \u2014 \u2014 -+<br>12 rows in set (0.00 sec)<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"ad58\">3.2 WordPress Files<\/h4>\n\n\n\n<p id=\"fd29\">If you installed WordPress yourself on a Linux server then you probably peeked into its file structure at some point in time. The good news is that we do not have to copy all WordPress files into our backup. Most of its files never change and remain the same from one WordPress installation to another.<\/p>\n\n\n\n<p id=\"05c4\">The files and directories that we have to back up were highlighted in bold in the file structure excerpt below.<\/p>\n\n\n\n<p id=\"3b84\"><strong>This assumes that you did not add any custom code to standard WordPress files. If you did then make sure that you also include the custom files into your backup.<\/strong><\/p>\n\n\n\n<pre id=\"7219\" class=\"wp-block-preformatted\">`-- wordpress<br>    |-- <strong>.htaccess<\/strong><br>    |-- index.html<br>    |-- index.php<br>    |-- license.txt<br>    |-- readme.html<br>    |-- wp-activate.php<br>    |-- wp-admin<br>    |-- wp-blog-header.php<br>    |-- wp-comments-post.php<br>    |-- <strong>wp-config.php<\/strong><br>    |-- wp-config-sample.php<br>    |-- <strong>wp-content<\/strong><br>    |   |-- index.php<br>    |   |-- <strong>plugins<\/strong><br>    |   |-- <strong>themes<\/strong><br>    |   |-- upgrade<br>    |   `-- <strong>uploads<\/strong><br>    |-- wp-content.tar.gz<br>    |-- wp-cron.php<br>    |-- wp-includes<br>    |-- wp-links-opml.php<br>    |-- wp-load.php<br>    |-- wp-login.php<br>    |-- wp-mail.php<br>    |-- wp-settings.php<br>    |-- wp-signup.php<br>    |-- wp-trackback.php<br>    `-- xmlrpc.php<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>.htaccess: <\/strong>This one is optional and just contains rewrite rules for the Apache webserver.<\/li>\n\n\n\n<li><strong>wp-config.php: <\/strong>This one is important and contains information about your database connection and other custom configurations you may have added. It also contains the name of the WordPress database that you want to backup. In my case, the name of the database is <code>wp_db<\/code>\u00a0.<\/li>\n<\/ul>\n\n\n\n<pre id=\"0969\" class=\"wp-block-preformatted\">\/\/ ** MySQL settings \u2014 You can get this info from your web host ** \/\/<br>\/** The name of the database for WordPress *\/<br><strong>define( \u2018DB_NAME\u2019, \u2018wp_db\u2019);<\/strong><\/pre>\n\n\n\n<pre id=\"287a\" class=\"wp-block-preformatted\">\/** MySQL database username *\/<br><strong>define( \u2018DB_USER\u2019, \u2018marvin\u2019);<\/strong><\/pre>\n\n\n\n<pre id=\"c9ff\" class=\"wp-block-preformatted\">\/** MySQL database password *\/<br><strong>define( \u2018DB_PASSWORD\u2019, \u2018the_answer_is_42\u2019);<\/strong><\/pre>\n\n\n\n<pre id=\"1318\" class=\"wp-block-preformatted\">\/** MySQL hostname *\/<br><strong>define( \u2018DB_HOST\u2019, \u2018localhost\u2019);<\/strong><\/pre>\n\n\n\n<pre id=\"7e3e\" class=\"wp-block-preformatted\">\/** Database Charset to use in creating database tables. *\/<br>define( \u2018DB_CHARSET\u2019, \u2018utf8\u2019);<\/pre>\n\n\n\n<pre id=\"d1f1\" class=\"wp-block-preformatted\">\/** The Database Collate type. Don\u2019t change this if in doubt. *\/<br>define( \u2018DB_COLLATE\u2019, \u2018\u2019);<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>wp-content: <\/strong>This is the most important directory you need to create a backup of. It contains your uploaded assets like images or videos but also your installed WordPress themes you may have altered to your specific needs. You can make a copy of the whole <code>wp_content<\/code> directory or you just pick its sub-directories that seem most important to you.<\/li>\n<\/ul>\n\n\n\n<p id=\"9004\">If you want to play it safe then just copy the whole <code>wordpress<\/code> directory. But this may take valuable disk space that you could use otherwise.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"a75c\">4. Creating&nbsp;Backups<\/h3>\n\n\n\n<p id=\"3973\">Now that we know what we want to include in our backup(s), we can start with the actual process.<\/p>\n\n\n\n<p id=\"ea98\">In the upcoming examples, I assume that you are already connected to the remote server where WordPress and its database are running on. This is mostly done by using <a href=\"https:\/\/www.ssh.com\/ssh\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">SSH<\/a>.<\/p>\n\n\n\n<p id=\"ea0f\">You may need some minimal background knowledge about using SSH clients to connect to your Linux server but that should not hinder you from following the process. If your SSH skills are a bit rusty, you can take a look at the following links to get you back on track: <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/phoenixnap.com\/kb\/ssh-to-connect-to-remote-server-linux-or-windows\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><strong>How to Use SSH to Connect to a Remote Server in Linux or Windows<\/strong><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/phoenixnap.com\/kb\/ssh-to-connect-to-remote-server-linux-or-windows\"><\/a><a href=\"https:\/\/www.hostinger.com\/tutorials\/how-to-use-putty-ssh\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><strong>How to Connect to Your Account Using PuTTY SSH Client<\/strong><\/a><a href=\"https:\/\/www.hostinger.com\/tutorials\/how-to-use-putty-ssh\"><\/a><\/li>\n<\/ul>\n\n\n\n<p id=\"c00b\">What I like to do is just using the command-line SSH client on my Mac. Here is an example SSH session where I connect to the fake server<code>example.com<\/code> with the username <code>user<\/code>. Feel free to use any SSH client you like!<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1552\" height=\"860\" src=\"https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/11\/19155723\/ssh_login.gif\" alt=\"\" class=\"wp-image-11491\"\/><figcaption class=\"wp-element-caption\">SSH login<\/figcaption><\/figure>\n\n\n\n<p id=\"697d\">Let\u2019s start with the actual database backup.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"af9d\">4.1 Database&nbsp;Backup<\/h4>\n\n\n\n<p id=\"8cd4\">In this example, I assume that you just want to back up a single database to a single file because this is the most common use case. If you are interested in more options because your specific use case is not covered in this article, then the following link may be of interest to you: <a href=\"https:\/\/linuxize.com\/post\/how-to-back-up-and-restore-mysql-databases-with-mysqldump\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><strong>How to Back Up and Restore MySQL Databases with Mysqldump<\/strong>.<br><\/a><a href=\"https:\/\/linuxize.com\/post\/how-to-back-up-and-restore-mysql-databases-with-mysqldump\/\"><\/a><\/p>\n\n\n\n<p id=\"0db8\">As soon as we are connected to the remote server we can use the <code>mysqldump<\/code> program to create a simple backup of the database.<\/p>\n\n\n\n<p id=\"3f87\">The general syntax for creating a backup looks like this:<\/p>\n\n\n\n<pre id=\"8ba8\" class=\"wp-block-preformatted\">mysqldump -u [user] -p [database_name] &gt; [backup_name].sql<\/pre>\n\n\n\n<p id=\"b151\">Since this command produces the same name for our backup every time, we have to come up with a way to differentiate between backup files.<\/p>\n\n\n\n<p id=\"9394\">A smart way would be to incorporate the current time for the creation of the backup. Since we do not want to look up the current time ourselves, we can use the Linux <code>date<\/code> program.<\/p>\n\n\n\n<p id=\"8c26\">The <code>date<\/code> program uses the following syntax:<\/p>\n\n\n\n<pre id=\"4e94\" class=\"wp-block-preformatted\">$date +%[format-option]<\/pre>\n\n\n\n<p id=\"f88e\">where<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>%Y: year<\/li>\n\n\n\n<li>%m: month<\/li>\n\n\n\n<li>%d: day<\/li>\n\n\n\n<li>%H: hour<\/li>\n\n\n\n<li>%M: minute<\/li>\n\n\n\n<li>%S: second<\/li>\n<\/ul>\n\n\n\n<p id=\"d89b\">Incorporating the <code>date<\/code> program would result in the following command that takes the current time into account.<\/p>\n\n\n\n<pre id=\"a133\" class=\"wp-block-preformatted\">mysqldump -u [user] -p [database_name] &gt; [backup_name]_$(date +%Y-%m-%d_%H-%M-%S).sql<\/pre>\n\n\n\n<p id=\"dd63\">A concrete example of the above command in action could look like this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1552\" height=\"860\" src=\"https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/11\/19155854\/raw_mysqldump_with_the_date_command.gif\" alt=\"\" class=\"wp-image-11493\"\/><figcaption class=\"wp-element-caption\">Raw mysqldump with the date command<\/figcaption><\/figure>\n\n\n\n<p id=\"6fc7\">If disk space is not an issue for you then you can skip the following optimization step.<\/p>\n\n\n\n<p id=\"080e\">However, if you like to optimize the current approach a bit further and save some disk space, you can include a compression tool like <code>gzip<\/code> into the command:<\/p>\n\n\n\n<pre id=\"c608\" class=\"wp-block-preformatted\">mysqldump -u [user] -p [database_name] | gzip &gt; [backup_name]_$(date +%Y-%m-%d_%H-%M-%S).sql.gz<\/pre>\n\n\n\n<p id=\"5193\">This command will create a compressed version of the sql dump with the <code>gzip<\/code> program but you can also take any other compression library like <code>bzip2<\/code>.<\/p>\n\n\n\n<p id=\"0235\">A concrete example of the before mentioned command:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1552\" height=\"860\" src=\"https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/11\/19160123\/compressed_mysqldump_with_date_command.gif\" alt=\"\" class=\"wp-image-11494\"\/><figcaption class=\"wp-element-caption\">Compressed mysqldump with date command<\/figcaption><\/figure>\n\n\n\n<p id=\"d98f\">You may ask yourself if the usage of a compression library makes a significant difference here.<\/p>\n\n\n\n<p id=\"c967\">In my case, the compressed SQL dump is only 25% of the size of the raw one as you can see below.<\/p>\n\n\n\n<pre id=\"9a8f\" class=\"wp-block-preformatted\">christoph@localhost:\/home\/backups# <strong>ls -alFh<\/strong><br>total 644K<br>drwxr-xr-x 1 christoph christoph 4.0K Aug  3 12:16 .\/<br>drwxr-xr-x 1 christoph christoph 4.0K Aug  2 13:03 ..\/<br>-rw-r--r-- 1 christoph christoph <strong>508K<\/strong> Aug  3 11:46 wp_db_backup_2020-08-03_11-4656.sql<br>-rw-r--r-- 1 christoph christoph <strong>127K<\/strong> Aug  3 12:16 wp_db_backup_2020-08-03_12-16-03.sql.gz<\/pre>\n\n\n\n<p id=\"ae50\">Therefore I would suggest always use a compression library for your SQL dumps.<\/p>\n\n\n\n<p id=\"885c\"><strong>That\u2019s it! We created a backup of our WordPress database and saved it to our local filesystem.<\/strong><\/p>\n\n\n\n<p id=\"a0a3\">Next, we will create a backup of the WordPress files.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"8393\">4.2 Files&nbsp;Backup<\/h4>\n\n\n\n<p id=\"99f1\">As mentioned at the beginning of the article, there are only a couple of important files and directories we have to save. However, if you want to play it safe then just copy all WordPress files and directories!<\/p>\n\n\n\n<p id=\"5d4a\">We will use the Linux <code>tar<\/code> program to create an archive of our WordPress installation and will also compress everything.<\/p>\n\n\n\n<p id=\"a471\">The following command creates a compressed archive of a<code>target_directory:<\/code><\/p>\n\n\n\n<pre id=\"c10e\" class=\"wp-block-preformatted\">tar -zcvf [archive_name]_$(date +%Y-%m-%d_%H-%M-%S).sql.gz [target_directory]<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>-z: Compress archive using gzip<\/li>\n\n\n\n<li>-c: Create an archive<\/li>\n\n\n\n<li>-v: Verbose. Display progress while creating an archive<\/li>\n\n\n\n<li>-f: Archive filename<\/li>\n<\/ul>\n\n\n\n<p id=\"b91a\">A concrete example archiving and compressing the whole <code>wordpress<\/code> directory:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1552\" height=\"860\" src=\"https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/11\/19160325\/archiving_the_whole_wordpress_directory.gif\" alt=\"\" class=\"wp-image-11496\"\/><figcaption class=\"wp-element-caption\">Archiving the whole WordPress directory<\/figcaption><\/figure>\n\n\n\n<p id=\"26c1\">We can also use the <code>tar<\/code> command to archive and compress specific files and folders as mentioned at the beginning of the article. All we have to do is to specify multiple target directories and files as shown below.<\/p>\n\n\n\n<p id=\"135a\">If you followed along until this point then you should have similar backup files for your database and your WordPress files as shown below.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1552\" height=\"860\" src=\"https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/11\/19160407\/archiving_specific_wordpress_directories_and_files.gif\" alt=\"\" class=\"wp-image-11497\"\/><figcaption class=\"wp-element-caption\">Archiving specific WordPress directories and files<\/figcaption><\/figure>\n\n\n\n<pre id=\"03b6\" class=\"wp-block-preformatted\">christoph@localhost:\/home\/backups# <strong>ls -alF<\/strong><br>total 644K<br>drwxr-xr-x 1 christoph christoph 4.0K Aug  3 12:16 .\/<br>drwxr-xr-x 1 christoph christoph 4.0K Aug  2 13:03 ..\/<br>-rw-r--r-- 1 christoph christoph 17990890 Aug 5 19:52 <strong>wordpress_backup_2020\u201308\u201305_17\u201352\u201343.tar.gz<\/strong><br>-rw-r--r-- 1 christoph christoph 7942063 Aug 5 19:54 <strong>wordpress_backup_2020\u201308\u201305_17\u201353\u201359.tar.gz<\/strong><br>-rw-r--r-- 1 christoph christoph 108750 Aug 4 18:45 <strong>wp_db_backup_2020\u201308\u201304_16\u201345\u201348.sql<\/strong><br>-rw-r--r-- 1 christoph christoph 20 Aug 4 18:46 <strong>wp_db_backup_2020\u201308\u201304_16\u201346\u201352.sql.gz<\/strong><\/pre>\n\n\n\n<p id=\"bfce\">We have now successfully created backups of the WordPress database and its files. You could now use an SFTP client like <a href=\"https:\/\/cyberduck.io\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Cyberduck<\/a> to copy the backup files from the remote server to an FTP server or any other storage location.<\/p>\n\n\n\n<p id=\"5d91\">The next section will guide you through the process of restoring the backups.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"d82e\">5. Restoring Backups<\/h3>\n\n\n\n<p id=\"1b17\">Restoring your backups is almost as simple as creating them. We will start by restoring the database first.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"d0f5\">5.1 Database Restoration<\/h4>\n\n\n\n<p id=\"c5e7\">To restore the database, you have to create a new one on your MySQL or MariaDB server with the same name as the database you want to restore. If you forgot the name of the database you want to restore, you can just take a look at the top of the SQL dump and look for <code>Database: [database-name]<\/code>.<\/p>\n\n\n\n<p id=\"a032\">On a Linux system, you can just use the <code>head<\/code> command to look at the top of the SQL dump but any other text editor will achieve the same result.<\/p>\n\n\n\n<pre id=\"eaa1\" class=\"wp-block-preformatted\">head [sql-file]<\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1552\" height=\"860\" src=\"https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/11\/19160536\/head_command_to_inspect_sql_dump.gif\" alt=\"\" class=\"wp-image-11498\"\/><figcaption class=\"wp-element-caption\">Head command to inspect sql dump<\/figcaption><\/figure>\n\n\n\n<p id=\"e6e4\"><strong>Step 1: Create a New Database<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Login to your MySQL server.<\/li>\n<\/ol>\n\n\n\n<pre id=\"49a3\" class=\"wp-block-preformatted\">mysql -u [user] -p<\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1552\" height=\"860\" src=\"https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/11\/19160642\/mysql_server_login.gif\" alt=\"\" class=\"wp-image-11499\"\/><figcaption class=\"wp-element-caption\">MySQL server login<\/figcaption><\/figure>\n\n\n\n<p id=\"c7fb\">2. Show all existing databases on the server to make sure that you are not overwriting a database that already exists.<\/p>\n\n\n\n<pre id=\"6dbb\" class=\"wp-block-preformatted\">mysql&gt; show databases;<\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"567\" src=\"https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/11\/19160801\/mysql_command_show_databases-1024x567.gif\" alt=\"\" class=\"wp-image-11500\" srcset=\"https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/11\/19160801\/mysql_command_show_databases-1024x567.gif 1024w, https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/11\/19160801\/mysql_command_show_databases-300x166.gif 300w, https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/11\/19160801\/mysql_command_show_databases-768x426.gif 768w, https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/11\/19160801\/mysql_command_show_databases-1536x851.gif 1536w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Mysql command: show databases<\/figcaption><\/figure>\n\n\n\n<p id=\"0934\">3. Create the database.<\/p>\n\n\n\n<pre id=\"e1b7\" class=\"wp-block-preformatted\">mysql&gt; create database [database_name];<\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1552\" height=\"860\" src=\"https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/11\/19160853\/mysql_command_create_database.gif\" alt=\"\" class=\"wp-image-11501\"\/><figcaption class=\"wp-element-caption\">Mysql command: create database<\/figcaption><\/figure>\n\n\n\n<p id=\"4b97\">3a. (optional) You can check the character set and collation of the database if you are curious.<\/p>\n\n\n\n<pre id=\"e31b\" class=\"wp-block-preformatted\">mysql&gt; show create database [database_name];<\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1552\" height=\"860\" src=\"https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/11\/19160932\/mysql_command_show_create_database.gif\" alt=\"\" class=\"wp-image-11502\"\/><figcaption class=\"wp-element-caption\">Mysql command: show create database<\/figcaption><\/figure>\n\n\n\n<p id=\"0c01\">4. Make sure that the database was created successfully.<\/p>\n\n\n\n<pre id=\"ea38\" class=\"wp-block-preformatted\">mysql&gt; show databases;<\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1552\" height=\"860\" src=\"https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/11\/19161010\/mysql_command_show_databases_2.gif\" alt=\"\" class=\"wp-image-11503\"\/><figcaption class=\"wp-element-caption\">Mysql command: show databases<\/figcaption><\/figure>\n\n\n\n<p id=\"865f\">5. If everything worked, you can now exit the MySQL server interface.<\/p>\n\n\n\n<pre id=\"ffbc\" class=\"wp-block-preformatted\">mysql&gt; exit;<\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1552\" height=\"860\" src=\"https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/11\/19161044\/mysql_command_exit.gif\" alt=\"\" class=\"wp-image-11505\"\/><figcaption class=\"wp-element-caption\">Mysql command: exit<\/figcaption><\/figure>\n\n\n\n<p id=\"19f3\"><strong>Step 2: Restore the MySQL dump<\/strong><\/p>\n\n\n\n<p id=\"4d2e\">The default command to restore a raw SQL dump for MySQL looks like this:<\/p>\n\n\n\n<pre id=\"6dd2\" class=\"wp-block-code\"><code class=\"\">mysql -u [user] -p [database_name] &lt; [backup_name].sql<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1552\" height=\"860\" src=\"https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/11\/19161200\/mysql_restore_raw_mysqldump.gif\" alt=\"\" class=\"wp-image-11506\"\/><figcaption class=\"wp-element-caption\">Mysql: restore raw mysqldump<\/figcaption><\/figure>\n\n\n\n<p id=\"3e18\">You can also restore a compressed SQL dump in one line without unpacking it to your disk in between operations. This might come in handy when you are dealing with large database dumps.<\/p>\n\n\n\n<pre id=\"9de1\" class=\"wp-block-code\"><code class=\"\">gunzip &lt; [backup_name].sql.gz | mysql -u [user] -p [database_name]<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" width=\"1552\" height=\"860\" src=\"https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/11\/19161247\/mysql_restore_compressed_mysqldump.gif\" alt=\"\" class=\"wp-image-11507\" style=\"width:840px;height:465px\"\/><figcaption class=\"wp-element-caption\">Mysql: restore compressed mysqldump<\/figcaption><\/figure>\n\n\n\n<p id=\"af8e\">Done! Your database should be restored after this step.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"c129\">5.2 Files Restoration<\/h4>\n\n\n\n<p id=\"1877\">To unpack the tar archive we can use the <code>tar<\/code> command again.<\/p>\n\n\n\n<p id=\"6f0d\">To extract a gzipped tar archive into the current directory you can use the following command:<\/p>\n\n\n\n<pre id=\"0b27\" class=\"wp-block-preformatted\">tar -zxvf [archive_name].tar.gz<\/pre>\n\n\n\n<p id=\"4719\">where<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>-x: Extract files from <code>archive_name<\/code><\/li>\n<\/ul>\n\n\n\n<p id=\"2ceb\">If you want to extract a gzipped tar archive into a target directory, you can use<\/p>\n\n\n\n<pre id=\"0da7\" class=\"wp-block-preformatted\">tar -zxvf [archive_name].tar.gz -C [target_directory]<\/pre>\n\n\n\n<p id=\"83a5\">or<\/p>\n\n\n\n<pre id=\"e476\" class=\"wp-block-preformatted\">tar -zxvf [archive_name].tar.gz --directory [target_directory]<\/pre>\n\n\n\n<p id=\"f42f\">However, you have to make sure that <code>target_directory<\/code> already exists before invoking the command. It won\u2019t be created on-the-fly. On Linux, you can achieve this by using the <code>mkdir<\/code> command.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1552\" height=\"860\" src=\"https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/11\/19161348\/untar_wordpress_archive.gif\" alt=\"\" class=\"wp-image-11508\"\/><figcaption class=\"wp-element-caption\">Untar WordPress archive<\/figcaption><\/figure>\n\n\n\n<p id=\"65e6\">Done! We restored the WordPress database and its files. Make sure that all WordPress files get extracted to the proper location of your webserver. Most of the time, that will be something similar to<code>\/var\/www\/[project_name]<\/code>.<\/p>\n\n\n\n<p id=\"52d7\"><strong>Checklist<\/strong><\/p>\n\n\n\n<p id=\"7bf7\">You may want to check a couple of things after restoring your WordPress installation like:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Is the site still reachable? No white screen?<\/li>\n\n\n\n<li>Does it use the same theme as before?<\/li>\n\n\n\n<li>Is the content still available? Images, videos, posts still available?<\/li>\n\n\n\n<li>Is the content still targeting to the right domain? Important when you moved to another domain.<\/li>\n\n\n\n<li>Are logins still working?<\/li>\n\n\n\n<li>Are plugins still working? For example, Google Captcha uses keys that are bound to a specific domain. When you move to another domain you have to get new keys.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"eccb\">6. Database Migration Issues<\/h3>\n\n\n\n<p id=\"5481\">This section describes the problem when you want to migrate from one domain to another with your WordPress installation.<\/p>\n\n\n\n<p id=\"6437\">Imagine that you want to migrate from <code>old_domain.com<\/code> to <code>new_domain.com<\/code>. This does not seem like a big deal at first sight but it is. One could think that links in the WordPress database are represented as relative references like <code>\/wp-content\/upload\/test.png<\/code>and not fully referenced static domain names. Unfortunately, that\u2019s not the case. Although you may have switched from <code>old_domain.com<\/code> to <code>new_domain.com<\/code>, your links in the database are still containing absolute paths with <code>old_domain.com<\/code>.<\/p>\n\n\n\n<p id=\"d475\">Most backup and migration plugins are handling this situation automatically. However, you can also fix this issue yourself by connecting to your restored database and executing some SQL commands to replace the old domain with the new one.<\/p>\n\n\n\n<p id=\"4f7a\">Connect to your SQL server as shown before using <code>mysql -u root -p<\/code>. Then select the database you want to use: <code>mysql&gt; use [database_name];<\/code><\/p>\n\n\n\n<p id=\"7493\">The following four commands will probably fix the issue with the domain names by performing a full-text search on the database tables and then replacing the strings containing the old domain with the new one.<\/p>\n\n\n\n<p id=\"77fb\"><strong>Please change it according to your own domains!<\/strong><\/p>\n\n\n\n<pre id=\"24ec\" class=\"wp-block-code\"><code class=\"\">mysql&gt; UPDATE wp_options SET option_value = replace(option_value, 'http:\/\/www.old_domain.com', 'http:\/\/www.new_domain.com') WHERE option_name = 'home' OR option_name = 'siteurl';<\/code><\/pre>\n\n\n\n<pre id=\"d6d5\" class=\"wp-block-code\"><code class=\"\">mysql&gt; UPDATE wp_posts SET guid = replace(guid, 'http:\/\/www.old_domain.com','http:\/\/www.new_domain.com');<\/code><\/pre>\n\n\n\n<pre id=\"e933\" class=\"wp-block-code\"><code class=\"\"># This one is tricky but probably works most of the time.<br>mysql&gt; UPDATE wp_posts SET post_content = replace(post_content, 'http:\/\/www.old_domain.com', 'http:\/\/www.new_domain.com');<\/code><\/pre>\n\n\n\n<pre id=\"9dd6\" class=\"wp-block-code\"><code class=\"\">mysql&gt; UPDATE wp_postmeta SET meta_value = replace(meta_value,'http:\/\/www.old_domain.com','http:\/\/www.new_domain.com');<\/code><\/pre>\n\n\n\n<p id=\"2943\">More information can also be found at the following link: <a href=\"https:\/\/wpbeaches.com\/updating-wordpress-mysql-database-after-moving-to-a-new-url\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><strong>Change WordPress URLs in MySQL Database when site is moved to new host.<\/strong><br><\/a><a href=\"https:\/\/wpbeaches.com\/updating-wordpress-mysql-database-after-moving-to-a-new-url\/\"><\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"2a82\">7. Future&nbsp;Work<\/h3>\n\n\n\n<p id=\"a1e1\">This article described a very simple backup and restore procedure for WordPress. It is not very efficient and certainly takes some time to execute. However, this first part is intended to be more educational than being used in production.<\/p>\n\n\n\n<p id=\"bc4e\">Given that this is only the first part of a little series about WordPress backups, I would like to build upon this first article and cover the following improvements in the upcoming articles:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Automatic backup uploads to Amazon S3, Google Cloud Storage and Google Drive (<a href=\"https:\/\/github.com\/prasmussen\/gdrive\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">https:\/\/github.com\/prasmussen\/gdrive<\/a>)<\/li>\n\n\n\n<li>Incremental backups using <code>rsync<\/code><\/li>\n\n\n\n<li>Bash script for faster restore (interactive, cases for non-existent database, automatic creation of a database, migration to a new domain)<\/li>\n\n\n\n<li>Bash script for faster backup<\/li>\n\n\n\n<li>Creation of cronjobs using bash scripts<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<p id=\"b503\"><strong>I hope you enjoyed this article. If you have any questions or remarks regarding this backup procedure, feel free to leave a comment below.<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Top-Quality WordPress Development Services from GetDevDone <\/h2>\n\n\n\n<p>As you see, backing up a WordPress site efficiently <em><em> <\/em>is not something that most rank-and-file users can handle easily<\/em>.<\/p>\n\n\n\n<p><em>That&#8217;s when you might need the assistance of GetDevDone WordPress developers. With 16+ years of industry experience and thousands of successfully completed WP projects, we know everything about the world&#8217;s most popular CMS.<\/em><\/p>\n\n\n\n<p><em><a href=\"https:\/\/getdevdone.com\/contact-us.html\" target=\"_blank\" rel=\"noreferrer noopener\">Contact <\/a>us with any WordPress-related task, from building brand-new custom themes or customizing existing ones to page load speed optimization and security.<\/em><\/p>\n\n\n\n<p><em>Helping your business succeed is our top priority!<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Read this post to learn how to back up a WordPress site by just  using the terminal and why this method is better than installing backup plugins.  <\/p>\n","protected":false},"author":5,"featured_media":11814,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"advgb_blocks_editor_width":"","advgb_blocks_columns_visual_guide":"","footnotes":""},"categories":[740,752],"tags":[763,822,772,857,814],"class_list":["post-11478","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorial","category-wordpress-development","tag-maintenance","tag-php","tag-security","tag-troubleshooting","tag-wordpress"],"acf":[],"aioseo_notices":[],"author_meta":{"display_name":"Christoph Schmidl","author_link":"https:\/\/getdevdone.com\/blog\/author\/christoph"},"featured_img":"https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/12\/01114121\/Intro-preview-300x300.png","coauthors":[],"tax_additional":{"categories":{"linked":["<a href=\"https:\/\/getdevdone.com\/blog\/category\/tutorial\" class=\"advgb-post-tax-term\">Tutorial<\/a>","<a href=\"https:\/\/getdevdone.com\/blog\/category\/wordpress-development\" class=\"advgb-post-tax-term\">WordPress development<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">Tutorial<\/span>","<span class=\"advgb-post-tax-term\">WordPress development<\/span>"]},"tags":{"linked":["<a href=\"https:\/\/getdevdone.com\/blog\/category\/wordpress-development\" class=\"advgb-post-tax-term\">Maintenance<\/a>","<a href=\"https:\/\/getdevdone.com\/blog\/category\/wordpress-development\" class=\"advgb-post-tax-term\">PHP<\/a>","<a href=\"https:\/\/getdevdone.com\/blog\/category\/wordpress-development\" class=\"advgb-post-tax-term\">Security<\/a>","<a href=\"https:\/\/getdevdone.com\/blog\/category\/wordpress-development\" class=\"advgb-post-tax-term\">Troubleshooting<\/a>","<a href=\"https:\/\/getdevdone.com\/blog\/category\/wordpress-development\" class=\"advgb-post-tax-term\">WordPress<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">Maintenance<\/span>","<span class=\"advgb-post-tax-term\">PHP<\/span>","<span class=\"advgb-post-tax-term\">Security<\/span>","<span class=\"advgb-post-tax-term\">Troubleshooting<\/span>","<span class=\"advgb-post-tax-term\">WordPress<\/span>"]}},"comment_count":"0","relative_dates":{"created":"Posted 4 years ago","modified":"Updated 2 months ago"},"absolute_dates":{"created":"Posted on December 14, 2021","modified":"Updated on March 8, 2026"},"absolute_dates_time":{"created":"Posted on December 14, 2021 11:43 am","modified":"Updated on March 8, 2026 11:42 pm"},"featured_img_caption":"","series_order":"","featured_image_urls":{"thumbnail_723x315":"https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/12\/01114121\/Intro-preview-400x315.png","thumbnail_723x315-2x":"https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/12\/01114121\/Intro-preview.png","thumbnail_723x315-3x":"https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/12\/01114121\/Intro-preview.png","thumbnail_770x510":"https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/12\/01114121\/Intro-preview.png","thumbnail_770x510-2x":"https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/12\/01114121\/Intro-preview.png","thumbnail_770x510-3x":"https:\/\/s3.amazonaws.com\/newblog.psd2html.com\/wp-content\/uploads\/2021\/12\/01114121\/Intro-preview.png"},"featured_post_color":"#4d67e6","author_avatar":"https:\/\/secure.gravatar.com\/avatar\/8b14deda10b5f086cd935aae6e3ef1b493fd86c979972a396d17c3b2df078f80?s=96&d=mm&r=g","author_position":"Software Engineer & PhD Candidate at Radboud University","reading_time":"<span class=\"span-reading-time rt-reading-time\"><span class=\"rt-label rt-prefix\"><\/span> <span class=\"rt-time\"> 13<\/span> <span class=\"rt-label rt-postfix\">min read<\/span><\/span>","prev_post":{"slug":"customize-wordpress-dashboard-without-plugins","name":"Customize a WordPress Dashboard Without Plugins"},"next_post":{"slug":"best-ways-to-optimize-your-wordpress-website","name":"6 Ways to Optimize Your WordPress Website"},"related_posts":["wordpress-website-development-common-problems-and-how-to-deal-with-them","pros-and-cons-of-using-wordpress-website-development-company","dinghy-daily-charter-responsive-wordpress-website-case-study"],"_links":{"self":[{"href":"https:\/\/getdevdone.com\/blog\/wp-json\/wp\/v2\/posts\/11478","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/getdevdone.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/getdevdone.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/getdevdone.com\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/getdevdone.com\/blog\/wp-json\/wp\/v2\/comments?post=11478"}],"version-history":[{"count":47,"href":"https:\/\/getdevdone.com\/blog\/wp-json\/wp\/v2\/posts\/11478\/revisions"}],"predecessor-version":[{"id":24481,"href":"https:\/\/getdevdone.com\/blog\/wp-json\/wp\/v2\/posts\/11478\/revisions\/24481"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/getdevdone.com\/blog\/wp-json\/wp\/v2\/media\/11814"}],"wp:attachment":[{"href":"https:\/\/getdevdone.com\/blog\/wp-json\/wp\/v2\/media?parent=11478"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/getdevdone.com\/blog\/wp-json\/wp\/v2\/categories?post=11478"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/getdevdone.com\/blog\/wp-json\/wp\/v2\/tags?post=11478"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}