{"id":70,"date":"2017-06-26T00:00:00","date_gmt":"2017-06-26T00:00:00","guid":{"rendered":"http:\/\/ssdnodes.billabailey.com\/2017\/06\/26\/tutorial-speeding-up-mysql-without-using-the-cpu\/"},"modified":"2025-05-18T13:37:15","modified_gmt":"2025-05-18T13:37:15","slug":"speeding-up-mysql","status":"publish","type":"post","link":"https:\/\/www.ssdnodes.com\/blog\/speeding-up-mysql\/","title":{"rendered":"Tutorial: Speeding Up MySQL Without Using the CPU"},"content":{"rendered":"<p>We recently had a user ask us a relatively simple question: How do I speed up my MySQL query performance without just relying on the CPU?<\/p>\n<p>For those who run websites or applications that rely on MySQL databases, this is an incredibly important question, as it can mean the difference between a smooth experience and one that causes frustration for both you and your users.<\/p>\n<p>In this tutorial, we\u2019ll cover three methods of either improving the MySQL database performance, or establishing methods of reducing the need to query the database in the first place.<\/p>\n<h2><a id=\"Prerequisites_8\"><\/a>Prerequisites<\/h2>\n<ol>\n<li>A VPS (any OS works) running a MySQL database<\/li>\n<\/ol>\n<h2><a id=\"Option_1_Percona_Wizard_12\"><\/a>Option 1. Percona Wizard<\/h2>\n<p><a href=\"https:\/\/www.percona.com\/\" target=\"_blank\" rel=\"noopener\">Percona<\/a> offers a <a href=\"https:\/\/tools.percona.com\/wizard\" target=\"_blank\" rel=\"noopener\">free-to-use configuration wizard<\/a> for MySQL, which makes it easy to establish a baseline configuration that\u2019s better suited for exactly the kind of problems you\u2019re going to throw at your database. With a solid foundation to work from, you can get your service going quickly and then aim to improve performance later with further tweaks.<\/p>\n<p><em>Note: Percona recommends this configuration wizard only be used for new servers\/databases, not ones that have been running and contain data. The primary reason is that if you replace your old configuration with one created by this wizard, your database might become inaccessible. If you already have an active database, it\u2019s probably best to skip to the second option.<\/em><\/p>\n<p>If you\u2019re an SSD Nodes customer, here\u2019s a few answers related to our platform that will help get you started:<\/p>\n<p><strong>Where is this server hosted?<\/strong> Other<\/p>\n<p><strong>Do you use virtualization?<\/strong> Other<\/p>\n<p><strong>What type of storage do you use?<\/strong> SSD\/Flash<\/p>\n<p><strong>How many CPUs does your system have?<\/strong> 4 (unless you\u2019re on our smallest plans)<\/p>\n<p><strong>What is your operating system?<\/strong> Linux<\/p>\n<p>The rest are entirely dependent on your particular application, although selecting the defaults in most cases will establish you with a good starting configuration that you can build from in the future. After moving through the seven steps of the wizard, you\u2019ll get a configuration that you can drop into your <code>my.cnf<\/code> or <code>my.ini<\/code> files on the server in question.<\/p>\n<h2><a id=\"Option_2_mysqltunerpl_32\"><\/a>Option 2. <a href=\"http:\/\/mysqltuner.pl\/\" target=\"_blank\" rel=\"noopener\">mysqltuner.pl<\/a><\/h2>\n<p>This popular script scans your MySQL database and offers up warnings about vulnerabilities or weak passwords, and also gives logical suggestions as to which configuration tweaks will improve performance.<\/p>\n<p>To download the script, you have two options: clone the entire repository, or take only what you need in a more \u201cminimal\u201d installation.<\/p>\n<p><strong>Clone:<\/strong><\/p>\n<pre><code class=\"language-shell hljs\"><span class=\"hljs-meta\">$<\/span><span class=\"bash\"> git <span class=\"hljs-built_in\">clone<\/span> https:\/\/github.com\/major\/MySQLTuner-perl.git<\/span>\n<span class=\"hljs-meta\">$<\/span><span class=\"bash\"> <span class=\"hljs-built_in\">cd<\/span> MySQLTuner-perl<\/span>\n<\/code><\/pre>\n<p>After this, you\u2019re ready to start the script. More on that in a moment.<\/p>\n<p><strong>Minimal:<\/strong><\/p>\n<pre><code class=\"language-shell hljs\"><span class=\"hljs-meta\">$<\/span><span class=\"bash\"> mkdir MySQLTuner-perl &amp;&amp; <span class=\"hljs-built_in\">cd<\/span> MySQLTuner-perl<\/span>\n<span class=\"hljs-meta\">$<\/span><span class=\"bash\"> wget http:\/\/mysqltuner.pl\/ -O mysqltuner.pl<\/span>\n<span class=\"hljs-meta\">$<\/span><span class=\"bash\"> wget https:\/\/raw.githubusercontent.com\/major\/MySQLTuner-perl\/master\/basic_passwords.txt -O basic_passwords.txt<\/span>\n<span class=\"hljs-meta\">$<\/span><span class=\"bash\"> wget https:\/\/raw.githubusercontent.com\/major\/MySQLTuner-perl\/master\/vulnerabilities.csv -O vulnerabilities.csv<\/span>\n<\/code><\/pre>\n<p>In this case, you\u2019re creating a new directory for these files, and then using <code>wget<\/code> to download the relevant files, including the <code>mysqltuner.pl<\/code> script itself, a text file of vulnerable passwords, and a list of vulnerabilities.<\/p>\n<p>Whichever method you chose, you\u2019re now ready to run the script.<\/p>\n<pre><code class=\"language-shell hljs\"><span class=\"hljs-meta\">$<\/span><span class=\"bash\"> perl mysqltuner.pl<\/span>\n<\/code><\/pre>\n<p>You can also enable the CVE vulnerabilities with the following:<\/p>\n<pre><code class=\"language-shell hljs\"><span class=\"hljs-meta\">$<\/span><span class=\"bash\"> perl mysqltuner.pl --cvefile=vulnerabilities.csv<\/span>\n<\/code><\/pre>\n<p>When <code>mysqltuner.pl<\/code> is finished running, it will give you any number of recommendations about how you can improve your MySQL configuration, whether it\u2019s security-based on for superior performance. That said, it\u2019s important to reiterate the warning that the tuner\u2019s developers have included in the project\u2019s <code>README<\/code>.<\/p>\n<blockquote><p>It is extremely important for you to fully understand each change you make to a MySQL database server. If you don\u2019t understand portions of the script\u2019s output, or if you don\u2019t understand the recommendations, you should consult a knowledgeable DBA or system administrator that you trust. Always test your changes on staging environments, and always keep in mind that improvements in one area can negatively affect MySQL in other areas.<\/p><\/blockquote>\n<p>It\u2019s also possible to run <code>mysqltuner.pl<\/code> on a database running inside of a Docker container\u2014perhaps useful if you followed our <a href=\"https:\/\/www.ssdnodes.com\/blog\/host-multiple-websites-docker-nginx\/\">previous Docker tutorials<\/a> that focus on WordPress. For example, here\u2019s the results of a quick scan I did on one of those WordPress databases on my testing server.<\/p>\n<pre><code class=\"hljs coffeescript\">$ perl mysqltuner.pl --host <span class=\"hljs-number\">127.0<\/span><span class=\"hljs-number\">.0<\/span><span class=\"hljs-number\">.1<\/span> --forcemem <span class=\"hljs-number\">8000<\/span> --user root --pass \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\n &gt;&gt;  MySQLTuner <span class=\"hljs-number\">1.7<\/span><span class=\"hljs-number\">.2<\/span> - Major Hayden &lt;major@mhtx.net&gt;\n &gt;&gt;  Bug reports, feature requests, <span class=\"hljs-keyword\">and<\/span> downloads at http:<span class=\"hljs-regexp\">\/\/m<\/span>ysqltuner.com\/\n &gt;&gt;  Run with <span class=\"hljs-string\">'--help'<\/span> <span class=\"hljs-keyword\">for<\/span> additional options <span class=\"hljs-keyword\">and<\/span> output filtering\n\n[--] Skipped version check <span class=\"hljs-keyword\">for<\/span> MySQLTuner script\n[--] Performing tests <span class=\"hljs-literal\">on<\/span> <span class=\"hljs-number\">127.0<\/span><span class=\"hljs-number\">.0<\/span><span class=\"hljs-number\">.1<\/span>:<span class=\"hljs-number\">3306<\/span>\n[OK] Logged <span class=\"hljs-keyword\">in<\/span> using credentials passed <span class=\"hljs-literal\">on<\/span> the command line\n[--] Assuming <span class=\"hljs-number\">8000<\/span> MB <span class=\"hljs-keyword\">of<\/span> physical memory\n[!!] Assuming <span class=\"hljs-number\">0<\/span> MB <span class=\"hljs-keyword\">of<\/span> swap space (use --forceswap to specify)\n[OK] Currently running supported MySQL version <span class=\"hljs-number\">5.7<\/span><span class=\"hljs-number\">.18<\/span>\n[OK] Operating <span class=\"hljs-literal\">on<\/span> <span class=\"hljs-number\">64<\/span>-bit architecture\n\n-------- Log file Recommendations ------------------------------------------------------------------\n[--] Log file: stderr(<span class=\"hljs-number\">0<\/span>B)\n[!!] Log file stderr doesn<span class=\"hljs-string\">'t exist\n[!!] Log file stderr isn'<\/span>t readable.\n\n-------- Storage Engine Statistics -----------------------------------------------------------------\n[--] Status: +ARCHIVE +BLACKHOLE +CSV -FEDERATED +InnoDB +MEMORY +MRG_MYISAM +MyISAM +PERFORMANCE_SCHEMA\n[--] Data <span class=\"hljs-keyword\">in<\/span> InnoDB tables: <span class=\"hljs-number\">16<\/span>K (Tables: <span class=\"hljs-number\">1<\/span>)\n[OK] Total fragmented tables: <span class=\"hljs-number\">0<\/span>\n\n-------- Security Recommendations ------------------------------------------------------------------\n[OK] There are <span class=\"hljs-literal\">no<\/span> anonymous accounts <span class=\"hljs-keyword\">for<\/span> any database users\n[OK] All database users have passwords assigned\n[!!] User <span class=\"hljs-string\">'wordpress@%'<\/span> has user name <span class=\"hljs-keyword\">as<\/span> password.\n[!!] User <span class=\"hljs-string\">'root@%'<\/span> hasn<span class=\"hljs-string\">'t specific host restriction.\n[!!] User '<\/span>wordpress@%<span class=\"hljs-string\">' hasn'<\/span>t specific host restriction.\n[--] There are <span class=\"hljs-number\">612<\/span> basic passwords <span class=\"hljs-keyword\">in<\/span> the list.\n\n-------- CVE Security Recommendations --------------------------------------------------------------\n[OK] NO SECURITY CVE FOUND FOR YOUR VERSION\n\n-------- Performance Metrics -----------------------------------------------------------------------\n[--] Up for: <span class=\"hljs-number\">32<\/span>s (<span class=\"hljs-number\">19<\/span> q [<span class=\"hljs-number\">0.594<\/span> qps], <span class=\"hljs-number\">12<\/span> conn, TX: <span class=\"hljs-number\">43<\/span>K, RX: <span class=\"hljs-number\">1<\/span>K)\n[--] Reads \/ Writes: <span class=\"hljs-number\">100<\/span>% \/ <span class=\"hljs-number\">0<\/span>%\n[--] Binary logging <span class=\"hljs-keyword\">is<\/span> disabled\n[--] Physical Memory     : <span class=\"hljs-number\">7.8<\/span>G\n[--] Max MySQL memory    : <span class=\"hljs-number\">338.9<\/span>M\n[--] Other process memory: <span class=\"hljs-number\">202.5<\/span>M\n[--] Total buffers: <span class=\"hljs-number\">169.0<\/span>M <span class=\"hljs-built_in\">global<\/span> + <span class=\"hljs-number\">1.1<\/span>M per thread (<span class=\"hljs-number\">151<\/span> max threads)\n[--] P_S Max memory usage: <span class=\"hljs-number\">72<\/span>B\n[--] Galera GCache Max memory usage: <span class=\"hljs-number\">0<\/span>B\n[OK] Maximum reached memory usage: <span class=\"hljs-number\">170.1<\/span>M (<span class=\"hljs-number\">2.13<\/span>% <span class=\"hljs-keyword\">of<\/span> installed RAM)\n[OK] Maximum possible memory usage: <span class=\"hljs-number\">338.9<\/span>M (<span class=\"hljs-number\">4.24<\/span>% <span class=\"hljs-keyword\">of<\/span> installed RAM)\n[OK] Overall possible memory usage with other process <span class=\"hljs-keyword\">is<\/span> compatible with memory available\n[OK] Slow queries: <span class=\"hljs-number\">0<\/span>% (<span class=\"hljs-number\">0<\/span>\/<span class=\"hljs-number\">19<\/span>)\n[OK] Highest usage <span class=\"hljs-keyword\">of<\/span> available connections: <span class=\"hljs-number\">0<\/span>% (<span class=\"hljs-number\">1<\/span>\/<span class=\"hljs-number\">151<\/span>)\n[!!] Aborted connections: <span class=\"hljs-number\">8.33<\/span>%  (<span class=\"hljs-number\">1<\/span>\/<span class=\"hljs-number\">12<\/span>)\n[!!] Query cache may be disabled <span class=\"hljs-keyword\">by<\/span> <span class=\"hljs-keyword\">default<\/span> due to mutex contention.\n[!!] Query cache efficiency: <span class=\"hljs-number\">0.0<\/span>% (<span class=\"hljs-number\">0<\/span> cached \/ <span class=\"hljs-number\">8<\/span> selects)\n[OK] Query cache prunes per day: <span class=\"hljs-number\">0<\/span>\n[OK] No Sort requiring temporary tables\n[OK] No joins without indexes\n[OK] Temporary tables created <span class=\"hljs-literal\">on<\/span> disk: <span class=\"hljs-number\">15<\/span>% (<span class=\"hljs-number\">10<\/span> <span class=\"hljs-literal\">on<\/span> disk \/ <span class=\"hljs-number\">66<\/span> total)\n[OK] Thread cache hit rate: <span class=\"hljs-number\">91<\/span>% (<span class=\"hljs-number\">1<\/span> created \/ <span class=\"hljs-number\">12<\/span> connections)\n[OK] Table cache hit rate: <span class=\"hljs-number\">93<\/span>% (<span class=\"hljs-number\">102<\/span> open \/ <span class=\"hljs-number\">109<\/span> opened)\n[OK] Open file limit used: <span class=\"hljs-number\">0<\/span>% (<span class=\"hljs-number\">14<\/span>\/<span class=\"hljs-number\">65<\/span>K)\n[OK] Table locks acquired immediately: <span class=\"hljs-number\">100<\/span>% (<span class=\"hljs-number\">102<\/span> immediate \/ <span class=\"hljs-number\">102<\/span> locks)\n\n-------- Performance schema ------------------------------------------------------------------------\n[--] Memory used <span class=\"hljs-keyword\">by<\/span> P_S: <span class=\"hljs-number\">72<\/span>B\n[--] Sys schema <span class=\"hljs-keyword\">is<\/span> installed.\n\n-------- ThreadPool Metrics ------------------------------------------------------------------------\n[--] ThreadPool stat <span class=\"hljs-keyword\">is<\/span> disabled.\n\n-------- MyISAM Metrics ----------------------------------------------------------------------------\n[!!] Key buffer used: <span class=\"hljs-number\">18.3<\/span>% (<span class=\"hljs-number\">1<\/span>M used \/ <span class=\"hljs-number\">8<\/span>M cache)\n[OK] Key buffer size \/ total MyISAM indexes: <span class=\"hljs-number\">8.0<\/span>M\/<span class=\"hljs-number\">43.0<\/span>K\n[!!] Read Key buffer hit rate: <span class=\"hljs-number\">50.0<\/span>% (<span class=\"hljs-number\">6<\/span> cached \/ <span class=\"hljs-number\">3<\/span> reads)\n\n-------- InnoDB Metrics ----------------------------------------------------------------------------\n[--] InnoDB <span class=\"hljs-keyword\">is<\/span> enabled.\n[--] InnoDB Thread Concurrency: <span class=\"hljs-number\">0<\/span>\n[OK] InnoDB File per table <span class=\"hljs-keyword\">is<\/span> activated\n[OK] InnoDB buffer pool \/ data size: <span class=\"hljs-number\">128.0<\/span>M\/<span class=\"hljs-number\">16.0<\/span>K\n[!!] Ratio InnoDB log file size \/ InnoDB Buffer pool size (<span class=\"hljs-number\">75<\/span> %): <span class=\"hljs-number\">48.0<\/span>M * <span class=\"hljs-number\">2<\/span>\/<span class=\"hljs-number\">128.0<\/span>M should be equal <span class=\"hljs-number\">25<\/span>%\n[OK] InnoDB buffer pool instances: <span class=\"hljs-number\">1<\/span>\n[--] Number <span class=\"hljs-keyword\">of<\/span> InnoDB Buffer Pool Chunk : <span class=\"hljs-number\">1<\/span> <span class=\"hljs-keyword\">for<\/span> <span class=\"hljs-number\">1<\/span> Buffer Pool Instance(s)\n[OK] Innodb_buffer_pool_size aligned with Innodb_buffer_pool_chunk_size &amp; Innodb_buffer_pool_instances\n[!!] InnoDB Read buffer efficiency: <span class=\"hljs-number\">82.53<\/span>% (<span class=\"hljs-number\">1176<\/span> hits\/ <span class=\"hljs-number\">1425<\/span> total)\n[!!] InnoDB Write Log efficiency: <span class=\"hljs-number\">0<\/span>% (<span class=\"hljs-number\">2<\/span> hits\/ <span class=\"hljs-number\">0<\/span> total)\n[OK] InnoDB log waits: <span class=\"hljs-number\">0.00<\/span>% (<span class=\"hljs-number\">0<\/span> waits \/ <span class=\"hljs-number\">2<\/span> writes)\n\n-------- AriaDB Metrics ----------------------------------------------------------------------------\n[--] AriaDB <span class=\"hljs-keyword\">is<\/span> disabled.\n\n-------- TokuDB Metrics ----------------------------------------------------------------------------\n[--] TokuDB <span class=\"hljs-keyword\">is<\/span> disabled.\n\n-------- XtraDB Metrics ----------------------------------------------------------------------------\n[--] XtraDB <span class=\"hljs-keyword\">is<\/span> disabled.\n\n-------- RocksDB Metrics ---------------------------------------------------------------------------\n[--] RocksDB <span class=\"hljs-keyword\">is<\/span> disabled.\n\n-------- Spider Metrics ----------------------------------------------------------------------------\n[--] Spider <span class=\"hljs-keyword\">is<\/span> disabled.\n\n-------- Connect Metrics ---------------------------------------------------------------------------\n[--] Connect <span class=\"hljs-keyword\">is<\/span> disabled.\n\n-------- Galera Metrics ----------------------------------------------------------------------------\n[--] Galera <span class=\"hljs-keyword\">is<\/span> disabled.\n\n-------- Replication Metrics -----------------------------------------------------------------------\n[--] Galera Synchronous replication: NO\n[--] No replication slave(s) <span class=\"hljs-keyword\">for<\/span> <span class=\"hljs-keyword\">this<\/span> server.\n[--] This <span class=\"hljs-keyword\">is<\/span> a standalone server.\n\n-------- Recommendations ---------------------------------------------------------------------------\nGeneral recommendations:\n    Set up a Secure Password <span class=\"hljs-keyword\">for<\/span> user@host ( SET PASSWORD FOR <span class=\"hljs-string\">'user'<\/span>@<span class=\"hljs-string\">'SpecificDNSorIp'<\/span> = PASSWORD(<span class=\"hljs-string\">'secure_password'<\/span>); )\n    Restrict Host <span class=\"hljs-keyword\">for<\/span> user@% to user@SpecificDNSorIp\n    MySQL started within last <span class=\"hljs-number\">24<\/span> hours - recommendations may be inaccurate\n    Reduce <span class=\"hljs-keyword\">or<\/span> eliminate unclosed connections <span class=\"hljs-keyword\">and<\/span> network issues\nVariables to adjust:\n    query_cache_size (=<span class=\"hljs-number\">0<\/span>)\n    query_cache_type (=<span class=\"hljs-number\">0<\/span>)\n    query_cache_limit (&gt; <span class=\"hljs-number\">1<\/span>M, <span class=\"hljs-keyword\">or<\/span> use smaller result sets)\n    innodb_log_file_size * innodb_log_files_in_group should be equal to <span class=\"hljs-number\">1<\/span>\/<span class=\"hljs-number\">4<\/span> <span class=\"hljs-keyword\">of<\/span> buffer pool size (=<span class=\"hljs-number\">64<\/span>M) <span class=\"hljs-keyword\">if<\/span> possible.\n<\/code><\/pre>\n<p>As you can see, there are a number of security improvements for me to follow up on, and some variables I can change to improve performance.<\/p>\n<h2><a id=\"Option_3_Cloudflare_204\"><\/a>Option 3. Cloudflare<\/h2>\n<p>The previous two recommendations have been all about improving the performance of MySQL queries, but what about reducing queries in the first place? Many websites, such as a personal blog or portfolio, don\u2019t actually change all that often. This means it should be possible to serve a static HTML version of the site instead of having every visitor query the database for every loaded page.<\/p>\n<p>Cloudflare is the most popular solution to placing a caching layer between your user and the database. It\u2019s global content delivery network (CDN) is one of the fastest out there, which means your website will not only load faster, but it will rely on your database less than ever. Plus, if your site goes down, Cloudflare will try to serve its cached version rather than show an error.<\/p>\n<p>For WordPress users, there\u2019s even a plugin to make that process easier than ever. It doesn\u2019t make sense to simply duplicate the process that Cloudflare has put together on their own support pages, so we recommend you go checkout their <a href=\"https:\/\/support.cloudflare.com\/hc\/en-us\/articles\/227634427-Using-Cloudflare-with-WordPress\" target=\"_blank\" rel=\"noopener\">Using Cloudflare with WordPress<\/a> page for more information.<\/p>\n<p>For other applications, it\u2019s also possible to use the free tier of Cloudflare as a caching layer as well. In that case, you need to point your domain to Cloudflare\u2019s nameservers, and then point Cloudflare\u2019s DNS to your server\u2019s IP.<\/p>\n<h2><a id=\"Additional_options_and_resources_214\"><\/a>Additional options and resources<\/h2>\n<p>There are other caching layers that exist on the server itself (such as memcached), rather than a CDN like Cloudflare, but setting those up are beyond the scope of this tutorial.<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/memcached\/memcached\" target=\"_blank\" rel=\"noopener\">memcached<\/a><\/li>\n<li><a href=\"https:\/\/redis.io\/\" target=\"_blank\" rel=\"noopener\">Redis<\/a><\/li>\n<li><a href=\"https:\/\/www.percona.com\/blog\/2016\/10\/12\/mysql-5-7-performance-tuning-immediately-after-installation\/\" target=\"_blank\" rel=\"noopener\">MySQL 5.7 Performance Tuning Immediately After Installation<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>We recently had a user ask us a relatively simple question: How do I speed up my MySQL query performance without just relying on the CPU?<\/p>\n","protected":false},"author":20,"featured_media":71,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[18,30],"tags":[177],"class_list":["post-70","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devops","category-tutorials","tag-mysql"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.ssdnodes.com\/wp-json\/wp\/v2\/posts\/70","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ssdnodes.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ssdnodes.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ssdnodes.com\/wp-json\/wp\/v2\/users\/20"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ssdnodes.com\/wp-json\/wp\/v2\/comments?post=70"}],"version-history":[{"count":4,"href":"https:\/\/www.ssdnodes.com\/wp-json\/wp\/v2\/posts\/70\/revisions"}],"predecessor-version":[{"id":13024,"href":"https:\/\/www.ssdnodes.com\/wp-json\/wp\/v2\/posts\/70\/revisions\/13024"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ssdnodes.com\/wp-json\/wp\/v2\/media\/71"}],"wp:attachment":[{"href":"https:\/\/www.ssdnodes.com\/wp-json\/wp\/v2\/media?parent=70"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ssdnodes.com\/wp-json\/wp\/v2\/categories?post=70"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ssdnodes.com\/wp-json\/wp\/v2\/tags?post=70"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}