{"id":383978,"date":"2026-11-07T14:35:32","date_gmt":"2026-11-07T14:35:32","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/rsn-site-backup-pro\/"},"modified":"2026-11-09T07:36:27","modified_gmt":"2026-11-09T07:36:27","slug":"rsn-site-backup-pro","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/rsn-site-backup-pro\/","author":15264623,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.3","stable_tag":"1.1.3","tested":"7.1.4","requires":"5.6","requires_php":"7.4","requires_plugins":null,"header_name":"RSN Site Backup Pro","header_author":"Moydul Haque","header_description":"Professional backup and restore for WordPress. Creates compressed backups of your database and site files, and stores them on your local computer, a remote FTP server, or Google Drive. Restores are seamless and one-click.","assets_banners_color":"0b0d22","last_updated":"2026-11-09 07:36:27","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/moydul.com\/rsn-site-backup-pro","header_author_uri":"https:\/\/moydul.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":173,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.3":{"tag":"1.1.3","author":"moydulhaque","date":"2026-11-09 07:36:27","revision":3791973}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3789742,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3789742,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3789742,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3789742,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.3"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3789742,"resolution":"1","location":"assets","locale":"","width":2366,"height":1308},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3789742,"resolution":"2","location":"assets","locale":"","width":2368,"height":1008},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3789742,"resolution":"3","location":"assets","locale":"","width":2380,"height":1400},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3789742,"resolution":"4","location":"assets","locale":"","width":2380,"height":1676},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3789742,"resolution":"5","location":"assets","locale":"","width":2432,"height":1206}},"screenshots":[]},"plugin_section":[],"plugin_tags":[151,153,7342,17785,152],"plugin_category":[59],"plugin_contributors":[291368],"plugin_business_model":[],"class_list":["post-383978","plugin","type-plugin","status-publish","hentry","plugin_tags-backup","plugin_tags-database","plugin_tags-ftp","plugin_tags-google-drive","plugin_tags-restore","plugin_category-utilities-and-tools","plugin_contributors-moydulhaque","plugin_committers-moydulhaque"],"banners":{"banner":"https:\/\/ps.w.org\/rsn-site-backup-pro\/assets\/banner-772x250.png?rev=3789742","banner_2x":"https:\/\/ps.w.org\/rsn-site-backup-pro\/assets\/banner-1544x500.png?rev=3789742","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/rsn-site-backup-pro\/assets\/icon-128x128.png?rev=3789742","icon_2x":"https:\/\/ps.w.org\/rsn-site-backup-pro\/assets\/icon-256x256.png?rev=3789742","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/rsn-site-backup-pro\/assets\/screenshot-1.png?rev=3789742","caption":""},{"src":"https:\/\/ps.w.org\/rsn-site-backup-pro\/assets\/screenshot-2.png?rev=3789742","caption":""},{"src":"https:\/\/ps.w.org\/rsn-site-backup-pro\/assets\/screenshot-3.png?rev=3789742","caption":""},{"src":"https:\/\/ps.w.org\/rsn-site-backup-pro\/assets\/screenshot-4.png?rev=3789742","caption":""},{"src":"https:\/\/ps.w.org\/rsn-site-backup-pro\/assets\/screenshot-5.png?rev=3789742","caption":""}],"raw_content":"<!--section=description-->\n<p>RSN Site Backup Pro creates compressed backups of your entire WordPress site - the\ndatabase and every file - and stores them wherever you want. Restoring is a single\nclick and works even when moving the site to a new domain or host.<\/p>\n\n<h4>Destinations<\/h4>\n\n<ul>\n<li><strong>Local computer \/ server<\/strong> - keeps packages on your web server so you can\ndownload them to your computer at any time.<\/li>\n<li><strong>Remote server (FTP \/ FTPS)<\/strong> - uploads to any FTP host, with optional TLS.<\/li>\n<li><strong>Google Drive<\/strong> - stores backups in your own Drive account using Google's\nOAuth2 flow, including resumable uploads for large files.<\/li>\n<\/ul>\n\n<p>All three are available, and a scheduled backup can be mirrored to as many of\nthem as you like. A backup you start yourself from the <strong>Backup Now<\/strong> screen\nalways goes to the one destination you pick there.<\/p>\n\n<h4>How a backup works<\/h4>\n\n<p>Following the standard WordPress backup\/restore principle, a package contains:<\/p>\n\n<ul>\n<li><code>database.sql<\/code> - a full dump of every table, with a manifest of the source site.<\/li>\n<li><code>files.zip<\/code> - the site files (see <em>Backup scope<\/em> below).<\/li>\n<li><code>wp-config.php<\/code> - included for reference so you can see the source site's\nconfiguration. The plugin never writes it to the site root; on a new host,\nrun the WordPress installer first so it creates its own wp-config.php.<\/li>\n<li><code>rsn-backup-manifest.json<\/code> - site URL, paths, table prefix and format version.<\/li>\n<\/ul>\n\n<h4>Backup scope<\/h4>\n\n<p>Under <em>Settings -&gt; Backup contents<\/em> you choose what the file archive covers:<\/p>\n\n<ul>\n<li><strong>Off (default)<\/strong> - only <code>wp-content<\/code> is backed up: uploads, plugins and themes.\nSmaller and much faster, which is all most recoveries need.<\/li>\n<li><strong>On<\/strong> - \"Include all files in the root folder of the site\" archives the whole\ninstall: <code>wp-admin<\/code>, <code>wp-includes<\/code>, <code>wp-content<\/code>, <code>wp-config.php<\/code> and every\nother file sitting at the top level. Use this for a complete, self-contained\ncopy that can rebuild the site from scratch on a new host.<\/li>\n<\/ul>\n\n<p>The backup storage folder, cache folders and <code>node_modules<\/code> are always skipped,\nso a backup can never include itself. The setting screen shows the current scope\nand the file count\/size it will produce.<\/p>\n\n<h4>Stop, resume and cancel<\/h4>\n\n<p>While a backup or restore is running, the progress card offers three controls:<\/p>\n\n<ul>\n<li><strong>Stop<\/strong> - pauses the job and keeps its state exactly where it is.<\/li>\n<li><strong>Resume<\/strong> - continues from that point; the database dump restarts at the\ntable it stopped on rather than from the beginning.<\/li>\n<li><strong>Cancel<\/strong> - discards the job and its partial files. A cancelled backup is\nlisted with a <em>cancelled<\/em> status and can be deleted from the Backups screen.<\/li>\n<\/ul>\n\n<p>A stopped job keeps its slot, so a new backup cannot start until it is resumed\nor cancelled. If a job is stopped and then abandoned for 24 hours, it is\ncancelled automatically so it can never block future backups.<\/p>\n\n<p>Because the work happens on the server, a stopped job stays stopped even if the\nbrowser is closed - WP-Cron leaves it alone until you press Resume.<\/p>\n\n<h4>Connection checks before backing up<\/h4>\n\n<p>Every selected destination is verified <em>before<\/em> the backup starts. If FTP is\nmissing its host, username or password, or Google Drive has not been connected,\nthe backup is refused straight away with a message naming the problem, rather\nthan building a large package and failing at upload time. All problems are\nlisted at once so they can be fixed in a single pass.<\/p>\n\n<h4>Choosing a destination<\/h4>\n\n<p>On the <strong>Backup Now<\/strong> screen you pick exactly one destination - the three\nchoices are radio buttons, so only one can ever be selected and one is always\nchosen for you. If you pick a destination that is not set up yet, the backup\nstops before it starts and tells you what is missing.<\/p>\n\n<p>Scheduled backups work differently: under <em>Settings<\/em> you can tick several\ndestinations, and every scheduled run is mirrored to all of them.<\/p>\n\n<h4>Seamless restore<\/h4>\n\n<p>The restore screen follows the correct order so a moved site just works:<\/p>\n\n<ol>\n<li>The package is fetched (from FTP or Drive if there is no local copy).<\/li>\n<li>The database is imported.<\/li>\n<li>URLs are replaced across every table, including serialised values, so the site\nfunctions at its new address.<\/li>\n<li>Files are unpacked over the WordPress root.<\/li>\n<li>Caches and rewrite rules are flushed.<\/li>\n<\/ol>\n\n<p>You can restore the database, the files, or both, and choose a different site\naddress in the same step.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Scheduled backups (hourly to monthly) with a configurable start time.<\/li>\n<li>Retention by count and\/or age - old backups are removed automatically.<\/li>\n<li>Optional AES-256 encryption for packages at rest.<\/li>\n<li>One-click site migration \/ domain change.<\/li>\n<li>Partial restores (database only, files only).<\/li>\n<li>Time-sliced processing, so large sites never hit a PHP timeout.<\/li>\n<li>Works on shared hosting: jobs continue via WP-Cron even if the browser closes.<\/li>\n<li>WP-CLI commands for scripted backups and restores.<\/li>\n<li>Detailed activity log per backup.<\/li>\n<\/ul>\n\n<h3>Connecting Google Drive<\/h3>\n\n<p>Google Drive needs your own OAuth client, because only then are the backups\nyours alone. Creating one is a one-off, and takes a few minutes:<\/p>\n\n<ol>\n<li>Open the Google Cloud Console, create a project, and enable the <strong>Google\nDrive API<\/strong>.<\/li>\n<li>Under <em>APIs &amp; Services -&gt; Credentials<\/em>, create an <strong>OAuth client ID<\/strong> of\ntype <strong>Web application<\/strong>.<\/li>\n<li>Add the redirect URI shown on the plugin's settings screen, with the\n<strong>Copy<\/strong> button next to it. The plugin warns you if the file you paste was\ncreated for a different site, which is the usual reason this step fails.<\/li>\n<li>Download the JSON file Google offers, and paste the whole thing into the\n<em>Credentials file<\/em> box on the settings screen. The client ID and secret are\nread out of it for you, so there is nothing else to copy by hand.<\/li>\n<li>Save, then press <strong>Connect Google Drive<\/strong> and choose your account.<\/li>\n<\/ol>\n\n<p>If you would rather type the values yourself, use the <em>Enter them by hand\ninstead<\/em> link.<\/p>\n\n<h4>\"Google no longer accepts this connection\"<\/h4>\n\n<p>Google ends a connection for a few reasons, and the plugin names which one\napplies:<\/p>\n\n<ul>\n<li><strong>Access was revoked<\/strong>, either by you or from the Google account's security\nsettings.<\/li>\n<li><strong>The consent screen is still in <em>Testing<\/em>.<\/strong> This is the one that catches\npeople out: while an OAuth app is in Testing, Google expires these\nconnections after 7 days, so a working setup stops working on day 8. Move\nthe consent screen to <em>In production<\/em> in the Google Cloud Console, then press\n<strong>Connect Google Drive<\/strong> again.<\/li>\n<li><strong>The OAuth client was deleted<\/strong> in the Google Cloud Console. Create a new\none, paste its file, and connect again.<\/li>\n<\/ul>\n\n<p>Temporary problems - the site being offline, Google being briefly unavailable -\nare never treated as a dead connection, so a network blip will not cost you a\nworking setup.<\/p>\n\n<p>Replacing your credentials also disconnects the account, because a stored\nconnection only ever works with the client that issued it. The plugin does this\nfor you and tells you to reconnect, rather than leaving a connection that looks\nfine and then fails during an overnight backup.<\/p>\n\n<h3>Third-party services and privacy<\/h3>\n\n<p>RSN Site Backup Pro does not send backups, analytics, or other site data to RSN.\nIt only contacts external services that an administrator explicitly configures:<\/p>\n\n<ul>\n<li><strong>Google Drive (optional):<\/strong> after an administrator connects a Google account,\nthe plugin sends backup archives to that account through the Google Drive API.\nA backup can contain the site's database, files, and therefore personal data\nheld by the site. Google Drive use is governed by <a href=\"https:\/\/policies.google.com\/terms\">Google's Terms of Service<\/a>\nand <a href=\"https:\/\/policies.google.com\/privacy\">Google's Privacy Policy<\/a>.<\/li>\n<li><strong>FTP \/ FTPS (optional):<\/strong> after an administrator configures a server, the\nplugin sends backup archives and uses the connection credentials only to\ncommunicate with that administrator-selected server. The server operator's\nown terms and privacy policy apply.<\/li>\n<\/ul>\n\n<p>The plugin stores the destination settings and Google OAuth credentials in this\nWordPress installation. Site owners should update their site's privacy policy\nto explain their chosen backup destination and the data contained in backups.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>rsn-site-backup-pro<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin through the <em>Plugins<\/em> menu.<\/li>\n<li>Open <em>RSN Backup -&gt; Settings<\/em> and choose your destination.<\/li>\n<\/ol>\n\n<p>For Google Drive, see <em>Connecting Google Drive<\/em> below.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20ftp%20or%20ssh%20access%3F\"><h3>Do I need FTP or SSH access?<\/h3><\/dt>\n<dd><p>No. The plugin runs entirely inside WordPress. The local destination works on\nany host, including shared hosting.<\/p><\/dd>\n<dt id=\"will%20a%20large%20site%20time%20out%3F\"><h3>Will a large site time out?<\/h3><\/dt>\n<dd><p>No. Backups and restores are broken into short slices, each saved to the\ndatabase and resumed by the next request or by WP-Cron.<\/p><\/dd>\n<dt id=\"can%20i%20move%20my%20site%20to%20a%20new%20domain%3F\"><h3>Can I move my site to a new domain?<\/h3><\/dt>\n<dd><p>Yes. Create a backup, then restore it on the destination with the new address\nfilled in. Every stored URL, including serialised data, is updated for you.<\/p><\/dd>\n<dt id=\"where%20are%20backups%20stored%20locally%3F\"><h3>Where are backups stored locally?<\/h3><\/dt>\n<dd><p>Inside <code>wp-content\/rsn-backups<\/code> by default. The folder is protected with an\n    index.php guard and an <code>.htaccess<\/code> deny rule.<\/p><\/dd>\n<dt id=\"is%20my%20data%20safe%20during%20extraction%3F\"><h3>Is my data safe during extraction?<\/h3><\/dt>\n<dd><p>Yes. Archive entries are validated before extraction, and any path containing\n    ..\/ or an absolute path is rejected.<\/p><\/dd>\n<dt id=\"will%20a%20stopped%20backup%20be%20lost%20if%20i%20close%20the%20browser%3F\"><h3>Will a stopped backup be lost if I close the browser?<\/h3><\/dt>\n<dd><p>No. Stopping and resuming are handled entirely on the server, so a job stays\nstopped between browser sessions and continues from the same point when you\npress Resume.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.3<\/h4>\n\n<ul>\n<li>Fixed backups failing with \"The backup could not be uploaded after several attempts. The backup file to save is missing.\" Overlapping requests (browser polling, WP-Cron and the loopback tick) could run the same backup step at once and delete the freshly stored backup. Backup and restore jobs now process one step at a time.<\/li>\n<li>A failed file move can no longer delete a backup that is already stored.<\/li>\n<li>The upload step no longer re-scans the whole site before each attempt, so large sites no longer run out of time during the upload.<\/li>\n<li>Backups sent to the local folder and to FTP or Google Drive together now upload to every destination; the remote uploads previously could not find the package after it was moved locally.<\/li>\n<li>A failed upload is now retried the full number of times, and a backup that was saved locally before a later upload failed is still listed and downloadable.<\/li>\n<li>Fixed the FTP check always reporting \"Connected successfully, but files could not be written to the remote directory.\" even when the folder was writable.<\/li>\n<li>Passive FTP now works with servers behind NAT that report a private address for data connections.<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>Compliance with WordPress.org review guidelines: the local backup path is now validated so backups are only ever stored inside wp-content, never in the plugin or core directories.<\/li>\n<li>Uploaded backup packages are now handled through WordPress' wp_handle_upload() instead of move_uploaded_file().<\/li>\n<li>The restore no longer writes wp-config.php to the site root; on a new host, run the WordPress installer first so it creates its own wp-config.php.<\/li>\n<li>Decryption now reports a failure when the decrypted file cannot be written.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Added a protected backup-package upload flow to the Restore screen.<\/li>\n<li>Added a step-by-step Google Drive connection guide in Settings.<\/li>\n<li>Added third-party service and privacy disclosures, including suggested privacy-policy text.<\/li>\n<li>Backup records and locally stored packages are now retained on uninstall unless an administrator explicitly opts in to deletion.<\/li>\n<li>Raised the supported PHP baseline to 7.4.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Google Drive credentials are now pasted as the single JSON file Google\nissues, instead of copying a client ID and secret across by hand.<\/li>\n<li>Warns immediately if those credentials were created for a different site,\nwhich is the usual cause of a redirect URI mismatch.<\/li>\n<li>Google connection failures now name their cause (revoked, client deleted,\nbad credentials) instead of showing a bare <code>invalid_grant<\/code>.<\/li>\n<li>A connection Google has ended is cleaned up and the reason is shown on the\nsettings screen. Temporary network and Google outages no longer discard a\nworking connection.<\/li>\n<li>Reconnecting or disconnecting now revokes the superseded token with Google.<\/li>\n<li>Added a Disconnect button to the Google Drive settings, with confirmation.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Professional backup and restore for WordPress, with local, FTP and Google Drive destinations.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/383978","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=383978"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/moydulhaque"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=383978"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=383978"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=383978"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=383978"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=383978"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=383978"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}