At a past job I managed a site that had a schema per customer. There were 8 MySQL instances with about 1,500 schemas per instance. Each customer's schema had an identical set of tables, so when an ALTER TABLE was needed, we had to run it ~12,000 times.
There was also one special schema that had metadata about the customers' schemas, which server they lived on, etc.
We used a custom-developed script implemented in PHP (though any language would do just as well), which queried the catalog of customers, looped over all the customer schemas named in that catalog, and invoked the needed ALTER TABLE against the table in the respective schema.
I could safely run the script in several windows concurrently as needed. As the script started each alter, it would first update a record in the respective schema's
schema_version table. If that update had already occurred, then the script concludes another instance of the script is already executing the alter in another session, so it skips that customer and goes on to try the next one in the loop.
On some occasions I had 60+ concurrent windows running the script, to get through them all as quickly as possible.
One risk of trying to use greater parallelism is that if the alter involves a table-copy of a large table, the concurrent alters could run the server out of disk space. So it's not a good idea to increase the number of windows.
I don't know of any off-the-shelf tools for this. Ours was developed in-house. It's likely that your site will have its own proprietary way of enumerating the customer databases anyway.
If you have an order of magnitude more customers per server than I had, you should make sure you're using MySQL 8.0. In my case, we ran into difficulties with so many tables per server, because the number of open files in InnoDB was a bottleneck. They reimplemented the InnoDB data dictionary in MySQL 8.0, and after I gave them feedback about my use case, they specifically tested the data dictionary scalability, up to 1 million tables per server (it can probably handle more, but that's how far they tested it).
I have no idea if MariaDB can handle the same scale of data dictionary. I don't use MariaDB, and you shouldn't assume it's compatible with MySQL.