Type at least 2 characters to search.
Completed

After the Migration: Stabilising and Monitoring a Live WooCommerce Store (Part 2)

What happened after NIMU Technologies moved a Delhi hardware retailer's WooCommerce store to its own Windows server: the problems that only appear on your own hardware, a night when two incidents overlapped, and monitoring that now catches failures in minutes instead of hours.

ClientA Delhi-Based Computer Hardware Retailer
IndustryE-Commerce
ServicesServer Monitoring, Database Tuning, Backup & Recovery, Incident Response, Conversion Tracking
StatusCompleted
PublishedOctober 2026

The Challenge

Running on its own server gave the store full control and removed the old hosting limits, but no provider was quietly absorbing problems any more. In the weeks after the migration, MySQL binary logs kept filling the disk until the database stopped accepting writes, nothing was backed up on a schedule or ever test-restored, the page cache was off at peak hours, the Meta Pixel double-counted purchases, Remote Desktop froze and needed someone on site, and there was no monitoring: the team found out about failures from customers.

Our Approach

One rule throughout: analyse first, share the plan and its impact with the client, and only then change anything. Every change had a backup and a written rollback step.

Stop Disk-Full Outages

Binary logs capped at 2 days with compact row logging

Prove the Backups

Nightly database and site backups, restore tested

Restore Speed

Page cache back on; MySQL and PHP tuned for peak load

Fix Ad Tracking

One pixel path plus Conversions API with de-duplication

Monitor Real Writes

A database write every 60 seconds, with email alerts

Migration Journey

  • Migration to Windows Server (Part 1)
  • Disk-full outages stopped
  • Nightly backups, restore tested
  • Page cache and tuning restored
  • Meta purchase tracking fixed
  • 14–15 Oct incidents resolved
  • Write-level monitoring live
  • High availability (Part 3)

Key Technical Areas

Binary Log Control

2-day retention and row logging keep disk usage flat

Tested Backups

Nightly database and website backups, proven by a full restore

Peak-Hour Performance

Page cache on, 2 GB MySQL memory cache, tuned PHP workers

Accurate Ad Tracking

One event per purchase with server-side de-duplication

Reliable Admin Access

Idle-session logoff and a one-minute remote rescue

Tighter Security

Remote management and database ports on a private encrypted network

Payment Window

30 minutes, long enough for EMI and bank-redirect payments

Write-Level Monitoring

Real database write every minute; alert in about 3 minutes

Results & Current Status

Disk-full outages have stopped, backups run nightly and have been restore-tested, the page cache is back on, and each Meta purchase is now counted once. A database write failure that once went unnoticed for 8.5 hours is now caught by an automatic email alert in about 3 minutes and was fixed in 4 minutes once found. No customer was charged for any of the 854 cancelled orders. The monitoring adds about $5 a month.

8.5 h to ~3 min Detection
0 Customers Charged in Error
Nightly Tested Backups
1 Event per Purchase

Technology & Approach Summary

LayerApproach
ServerOn-premises Windows Server 2022
Web & RuntimeIIS, PHP 8.4 with a tuned worker pool, page cache on
DatabaseMySQL 8.4, 2 GB memory cache, binary logs capped at 2 days
PlatformWordPress + WooCommerce, 30-minute payment window
Public AccessCloudflare Tunnel
BackupsNightly database and website backups, restore tested
TrackingMeta Pixel plus Conversions API with de-duplication
MonitoringDatabase write check every 60 seconds with email alerts
Next (Part 3)MySQL InnoDB Cluster, MySQL Router, Cloudflare load balancing

Key Takeaways

  1. Monitor what earns money, not just whether the page loads: only a real write check would have caught this outage.
  2. Assume an unclean restart: every infrastructure change must be safe after a sudden power loss.
  3. Settings changes need an audit trail: one unlogged setting cancelled 854 orders.
  4. Plan, share, then act: a written impact and rollback before each change keeps a live store safe.

Planning a similar project?

Let's discuss how we can help you plan, build, or integrate your next e-commerce project.

Get in Touch
ClientA Delhi-Based Computer Hardware Retailer (same client as Part 1)
ServerOn-premises Windows Server 2022, IIS, PHP 8.4, MySQL 8.4
PeriodOctober 2026, the weeks after the migration
OutcomeWrite failures detected in ~3 minutes instead of 8.5 hours

Project Overview

Part 1 covered how NIMU Technologies moved a Delhi-based computer hardware retailer from a Linux VPS to an on-premises Windows server without losing an order. This is what happened next: the problems that only appear once a store runs on its own hardware, a night when two incidents overlapped, and the monitoring that now catches failures in minutes instead of hours.

ItemDetails
ScaleAbout 2,000 products, 60–90 orders a day, ~15 GB of product media
PaymentsSix gateways, including UPI, cards and net banking, and three EMI / pay-later providers
PlatformWordPress + WooCommerce
ServerOn-premises Windows Server 2022, IIS, PHP 8.4, MySQL 8.4, served through Cloudflare Tunnel
PeriodOctober 2026, the weeks after the migration

The Challenge

Running on its own server gave the store full control and removed the old hosting limits. It also meant no provider was quietly absorbing problems any more. In the weeks after the migration, these surfaced:

  • The disk kept filling up. MySQL's binary logs grew without limit until the database stopped accepting writes.
  • There were no reliable backups. Nothing ran on a schedule, and nothing had ever been test-restored.
  • The site was slow at peak hours. The page cache was switched off, and the PHP and MySQL settings were still at their small defaults.
  • Ad tracking was wrong. The Meta Pixel fired from three places at once, so purchases were double-counted and ad spend decisions were based on bad data.
  • Admin access was fragile. Remote Desktop froze regularly, and the server often needed a call to the office to restart it.
  • There was no monitoring. When something broke, the team found out from customers.

What We Did

We followed one rule throughout: analyse first, share the plan and its impact with the client, and only then change anything. Every change had a backup and a written rollback step.

AreaProblemWhat we changed
StorageBinary logs filled the diskCapped log retention at 2 days and switched to compact row logging. Disk usage is now flat
BackupsNo scheduled or tested backupsNightly database and website backups, weekly log clean-up, and a full restore test to prove they work
PerformanceSlow pages at peakRe-enabled the page cache, raised the MySQL memory cache to 2 GB, tuned the PHP worker pool, and excluded the database folder from antivirus scanning
Ad trackingPurchases counted two or three timesKept one tracking path (pixel plus server-side Conversions API with de-duplication), removed the duplicates, and fixed a CDN script optimiser that was breaking the pixel
AccessRemote Desktop froze and needed restartsFixed the service settings, added auto-logoff of idle sessions, and a one-minute remote rescue procedure that needs nobody on site
SecurityRemote management open more widely than neededRestricted remote management and database ports to a private encrypted network, and removed an unused cache service
Order flowUnpaid orders cancelled after 2 minutesSet a 30-minute payment window that fits EMI and bank-redirect payments
MonitoringProblems found by customersA health check that proves the database can actually write, checked every 60 seconds, with email alerts

The database work followed the same practice as our database performance tuning and disaster recovery engagements: measure first, change one setting at a time, and prove a backup by restoring it.

Incident Response: Two Problems in One Night

On the night of 14–15 October, two separate problems overlapped. The first was quiet: a settings change cancelled a month of unpaid orders and set off an email flood. The second was loud: after a power cut, the database came back read-only and checkout stopped for 8.5 hours. We traced both to their root cause on the same day and fixed them so they cannot repeat silently.

Problem 1: 854 orders cancelled at once

WooCommerce's "hold stock" window had been left blank, so unpaid orders were never cleared. Pending orders from abandoned payments piled up for a month. On 14 October at 22:13, the setting was changed to 2 minutes. The next background run cancelled every pending order older than that in one go.

  • What we found: 854 orders, from 13 September to 14 October, cancelled within three hours. Each sent an admin email, so the email provider temporarily blocked the store's mailbox (428 emails failed).
  • What mattered most: we checked every cancelled order for a payment or transaction ID. None had one, so no customer had been charged for a cancelled order.
  • How we identified the change: server logs gave the exact time of the settings save, and the admin sessions active at that moment showed where it came from.
  • The fix: a 30-minute payment window, and a recommendation to add an activity log so every settings change records who made it.

Problem 2: checkout down for 8.5 hours

Time (IST)What happened
03:51The server lost power and restarted without a clean shutdown
03:52MySQL came back up, but a clustering setting from our in-progress high-availability work made it start in read-only mode, because the private network was not ready yet
03:52–12:33Pages loaded normally, but no order could be saved: "Order items could not be saved"
12:29The client reported the checkout error
12:33Root cause found in the MySQL error log; writes restored with one command; the setting that caused it was disabled
13:00–15:00Write-level health check and email alerting put in place

We were open with the client that our own unfinished configuration turned a routine power cut into an outage. That honesty shaped the fix: it is not enough to check that a site loads. The new health check performs a real database write every minute and alerts by email if the write fails, so the same failure would now be caught in about 3 minutes instead of 8.5 hours.

Health check (every 60 s) Real database write Write fails Email alert in ~3 min

Results

MeasureBeforeAfter
Disk-full database outagesRecurringNone since the log cap
BackupsNone scheduled, never testedNightly database and website backups, restore tested
Page cacheOffOn
Purchase tracking in Meta AdsDouble or triple countedOne event per purchase, with server-side de-duplication
Time to detect a database write failure8.5 hours (reported by customers)~3 minutes (automatic email alert)
Time to fix once detected—4 minutes
Remote Desktop freezeNeeded someone on site1-minute remote rescue
Unpaid-order windowBlank, then 2 minutes30 minutes
Extra monthly cost—About $5 (load-balancer health monitoring)

Lessons Learned

  1. Monitor what earns money, not just whether the page loads. The homepage stayed up for the whole outage. Only a real write check would have caught it.
  2. Assume an unclean restart. Every infrastructure change must be safe after a sudden power loss, not only after a planned reboot.
  3. Settings changes need an audit trail. A single unlogged setting cancelled 854 orders. An activity log turns hours of forensics into a one-line lookup.
  4. Plan, share, then act. Writing out the impact and rollback before each change kept a busy store safe while we worked on it live.

What's Next: Part 3, High Availability

The store's office internet uploads at about 15 Mbps, and a single server means a single power cut can stop sales. We are moving it to a three-server setup: a MySQL InnoDB Cluster across the office server, a Mumbai data-centre server and a small tie-breaker server, with MySQL Router and Cloudflare load balancing.

Office server Mumbai data-centre server Tie-breaker server MySQL InnoDB Cluster

If any one server fails, orders keep flowing, with automatic failover and no lost orders. Part 3 will cover the design, the cut-over, and measured failover results. Read more about our approach to high availability architecture.

NIMU Technologies' Role

  • Stopped disk-full database outages by capping binary log retention
  • Set up nightly database and website backups and proved them with a full restore test
  • Restored the page cache and tuned MySQL and PHP for peak traffic
  • Fixed Meta purchase tracking to one de-duplicated event per order
  • Traced both overnight incidents to their root cause the same day and fixed them
  • Built write-level monitoring that alerts within about 3 minutes

Is Your Store Being Watched?

If your WooCommerce store runs on its own server, a page that loads is not proof that orders are being saved. NIMU Technologies can audit your backups, database and monitoring, and set up alerts that catch failures before your customers do. Explore our server monitoring, website maintenance and WooCommerce development services.

Talk to Us About Your Store Explore Server Monitoring