Um servidor de banco de dados separado é apenas parte de um bom design escalável. Isso não importa se seu tráfego não é muito alto e se realmente um único servidor é suficiente.
Mas em serviços mais ocupados, isolar os serviços um do outro é uma coisa boa. Se alguém fizer DDoS no servidor da Web e consumir todos os recursos, isso não intimidará o servidor do banco de dados. Em ambientes compartilhados, mais de um servidor da Web provavelmente está usando o servidor de banco de dados; portanto, se o servidor de banco de dados contiver dados para 50 sites diferentes, apenas um site desativado devido ao DDoS é melhor do que remover tudo.
Também do ponto de vista do sysadmin, fica mais claro se existem servidores dedicados nomeados com sensatez, como "mysql-01.yourcompany.com" e "webserver-01.yourcompany.com". Quando recebem alertas, eles veem imediatamente o que está acontecendo, pelo menos no sentido de "OK, há algo errado com o banco de dados". Eu sei que esse é um argumento fraco, pois vários nomes DNS podem apontar para um único servidor, mas ainda assim.
Seus aplicativos se conectariam a um servidor de banco de dados remoto sem problemas na rede. Aieeeeeee! Como o seu navegador da web se conecta a um servidor remoto? É Magica! Erm .... mais a sério, em vez de 'localhost', você apenas fornece o endereço do servidor em $ programming_language_of_your_choice e está tudo pronto.