Eu tenho usado um banco de dados por cliente e, como mencionado, atualizar o esquema e os backups serão complicados.
Mas não tanto assim.
Você precisa registrar todo o seu banco de dados separadamente (em um banco de dados diferente, pelo menos, se não uma máquina diferente), ter uma tabela chamada schema_update_log ou algo assim e escrever um script que atualize o esquema para cada banco de dados e registre sucesso nisso. Portanto, se você tiver 100.000 dbs, mesmo em muitos servidores físicos, basta consultar cada um deles e registrar o sucesso, se por algum motivo ele falhar, tente os bancos de dados com falha novamente.
Então, seria algo assim:
master_databases:
(registro de cada banco de dados por cliente e sua string de conexão)
db_id
base de dados
...
schema_update_log
pk
query_id
db_id
status (pendente, sucesso, falha)
timestamp
erro (apenas no caso)
schema_query
query_id (referenciado no schema_update_log)
consulta
em seguida, escreva um script para percorrer cada consulta dataasem e atualizar o log, mantendo-o até que, para cada query_id, cada banco de dados retorne um sucesso em schema_update_log.
isso levará tempo, mas será mais confiável do que atualizações ad hoc.