# MongoDB backup failed "upload file: write data: upload to S3: SerializationError"

**URL:** <https://forums.percona.com/t/mongodb-backup-failed-upload-file-write-data-upload-to-s3-serializationerror/30743>\
**Category:** Percona Backup for MongoDB\
**Tags:** percona, mongodb\
**Created:** [June 1, 2024, 2:36pm UTC](https://forums.percona.com/t/mongodb-backup-failed-upload-file-write-data-upload-to-s3-serializationerror/30743 "2024-06-01T14:36:46Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![pepa](https://avatars.discourse-cdn.com/v4/letter/p/4da419/32.png) [@pepa](https://forums.percona.com/u/pepa)\
**Post date:** [June 1, 2024, 2:36pm UTC](https://forums.percona.com/t/mongodb-backup-failed-upload-file-write-data-upload-to-s3-serializationerror/30743/1 "2024-06-01T14:36:46Z")

</div>

Greetings,

I can’t get MongoDB backup to work with Percona Operator on Kubernetes.  
I’d be grateful for any help.

I’m getting these logs after applying on-demand backup:

> \>\>\> kubectl logs -n mongodb-percona pod/my-cluster-name-rs0-0 -c backup-agent  
> \<Snip\>  
> mark RS as error `upload data files: upload file `/data/db/key.db/WiredTigerLog.0000000010`: upload file: write data: upload to S3: SerializationError: failed to decode REST XML response status code: 200, request id: caused by: XML syntax error on line 1: attribute name without = in element.`:   
> \<Snip\>

[full log.txt](https://forums.percona.com/uploads/short-url/9xiSZzMKjP62s2RkYSxASJrl9dK.txt) (3.5 KB)

Kubernetes is hosted on DigitalOcean and S3 bucket is also hosted there.

## Steps to Reproduce:

I have this cr.yaml file:  
[cr.txt](https://forums.percona.com/uploads/short-url/i26cLXq1RMqzaULzm1bzl5nm7kE.txt) (4.1 KB)

And this is the backup I’m trying to do:  
[on-demand-backup.txt](https://forums.percona.com/uploads/short-url/ojT8FoixCnFNrn7NjNSvjeWBOAc.txt) (212 Bytes)  
The automated backup defined in cr.yaml also doesn’t work.

## Additional info

![image](https://us1.discourse-cdn.com/flex019/uploads/percona1/optimized/3X/3/1/310f9cdc778cdd9b90f5956d4074556746bfe74a_2_690x31.png)

 ![image](https://us1.discourse-cdn.com/flex019/uploads/percona1/original/3X/9/1/9150b972c6acf08b746e7748a05201d39b7d0ae2.png)

![image](https://us1.discourse-cdn.com/flex019/uploads/percona1/optimized/3X/e/8/e85322de7bbe153d3742f88fce6bfe1310c1a10d_2_690x50.png)

---

<div class="post-metadata">

**Author:** ![oleksandr.havryliak](https://sea1.discourse-cdn.com/flex019/user_avatar/forums.percona.com/oleksandr.havryliak/32/5703_2.png) [@oleksandr.havryliak](https://forums.percona.com/u/oleksandr.havryliak)\
**Post date:** [June 4, 2024, 2:59pm UTC](https://forums.percona.com/t/mongodb-backup-failed-upload-file-write-data-upload-to-s3-serializationerror/30743/2 "2024-06-04T14:59:39Z")

</div>

Hi @pepa!  
Try to reconfigure the backup section with:

1. endpointUrl: [https://fra1.digitaloceanspaces.com](https://fra1.digitaloceanspaces.com)
2. region: us-east-1

---

<div class="post-metadata">

**Author:** ![pepa](https://avatars.discourse-cdn.com/v4/letter/p/4da419/32.png) [@pepa](https://forums.percona.com/u/pepa)\
**Post date:** [June 9, 2024, 1:14pm UTC](https://forums.percona.com/t/mongodb-backup-failed-upload-file-write-data-upload-to-s3-serializationerror/30743/3 "2024-06-09T13:14:12Z")

</div>

Thanks for your reply.  
I tried your solution on Civo cloud, it worked there.

But when I use it on DigitalOcean, it gives me 400 status code:

```auto
check storage connection: storage check failed with: get S3 object header: BadRequest: Bad Request
        status code: 400, request id: tx0000092fdbe2c55ac20ae-006665a7eb-fa4b23ec-fra1b, host id:

```

Btw DigitalOcean’s URL for bucket is: [https://bucket-name.fra1.digitaloceanspaces.com](https://bucket-name.fra1.digitaloceanspaces.com)

I could eventually go to Civo, but I would like to stay at DigitalOcean if possible.  
Is there anything else I could try?

---

<div class="post-metadata">

**Author:** ![oleksandr.havryliak](https://sea1.discourse-cdn.com/flex019/user_avatar/forums.percona.com/oleksandr.havryliak/32/5703_2.png) [@oleksandr.havryliak](https://forums.percona.com/u/oleksandr.havryliak)\
**Post date:** [June 11, 2024, 8:23am UTC](https://forums.percona.com/t/mongodb-backup-failed-upload-file-write-data-upload-to-s3-serializationerror/30743/4 "2024-06-11T08:23:33Z")

</div>

Hi @pepa  
I would suggest trying to set [forcepathstyle](https://docs.percona.com/percona-backup-mongodb/reference/configuration-options.html#storages3forcepathstyle) option to `false` if digitalocean requires bucket name in endpointUrl

---

<div class="post-metadata">

**Author:** ![pepa](https://avatars.discourse-cdn.com/v4/letter/p/4da419/32.png) [@pepa](https://forums.percona.com/u/pepa)\
**Post date:** [June 11, 2024, 9:03pm UTC](https://forums.percona.com/t/mongodb-backup-failed-upload-file-write-data-upload-to-s3-serializationerror/30743/5 "2024-06-11T21:03:23Z")

</div>

Hi,  
I have set it up like this and I’m no longer getting 400 error:

```yaml
    storages:
      s3-appname:
        type: s3
        s3:
          endpointUrl: https://digitaloceanspaces.com
          bucket: "appname-mongodb-backups"
          credentialsSecret: my-cluster-name-backup-s3
          region: fra1
          forcePathStyle: false

```

I didn’t know about forcePathStyle, because it’s not documented in [Custom Resource options - Percona Operator for MongoDB](https://docs.percona.com/percona-operator-for-mongodb/operator.html#backup-section).

But **the original problem remain** - I’m still facing the serialization error. So I’ll be storing backups on Civo S3 (and maybe moving Kubernetes there as well) if this error can’t be resolved as it seems to only happen on DigitalOcean.

---

<div class="post-metadata">

**Author:** ![oleksandr.havryliak](https://sea1.discourse-cdn.com/flex019/user_avatar/forums.percona.com/oleksandr.havryliak/32/5703_2.png) [@oleksandr.havryliak](https://forums.percona.com/u/oleksandr.havryliak)\
**Post date:** [June 12, 2024, 6:36am UTC](https://forums.percona.com/t/mongodb-backup-failed-upload-file-write-data-upload-to-s3-serializationerror/30743/6 "2024-06-12T06:36:32Z")

</div>

Hi @pepa!  
I meant your settings should be like:

```auto
        s3:
          endpointUrl: https://fra1.digitaloceanspaces.com
          bucket: appname-mongodb-backups
          region: us-east-1
          forcePathStyle: true

```

or

```auto
        s3:
          endpointUrl: https://appname-mongodb-backups.fra1.digitaloceanspaces.com
          region: us-east-1
          forcePathStyle: false

```

---

<div class="post-metadata">

**Author:** ![pepa](https://avatars.discourse-cdn.com/v4/letter/p/4da419/32.png) [@pepa](https://forums.percona.com/u/pepa)\
**Post date:** [June 12, 2024, 8:10pm UTC](https://forums.percona.com/t/mongodb-backup-failed-upload-file-write-data-upload-to-s3-serializationerror/30743/7 "2024-06-12T20:10:58Z")

</div>

Hi,  
When I use the first settings I get 400 error.

In the second settings the `bucket` is required. After applying cr.yml I get:  
`The PerconaServerMongoDB "my-cluster-name" is invalid: spec.backup.storages.s3-appname.s3.bucket: Required value`
