> (you don't have to strictly follow this form)

**Use case**

Sometimes, for really sophisticated scenarios it can be hard to control the amount of in-progress backups run externally. For the purpose of simpler control we can introduce server-level setting which disallows running concurrent backups of any type. 

Something like this in `config.xml` (enabled by default):
`<allow_concurrent_backups>true</allow_concurrent_backups>`

**Describe the solution you'd like**

It's important that backups can be executed in distributed way on multiple servers. Need to take it into account.

**Describe alternatives you've considered**
External check of `system.backups` table, but it can be complex.

{
    auto query_settings = std::make_shared<ASTSetQuery>();
    query_settings->is_standalone = false;
    static const BackupSettings default_settings;
    bool all_settings_are_default = true;
#define SET_SETTINGS_IN_BACKUP_QUERY_HELPER(TYPE, NAME) \
    if ((NAME) != default_settings.NAME) \
    { \
        query_settings->changes.emplace_back(#NAME, static_cast<Field>(SettingField##TYPE{NAME})); \
        all_settings_are_default = false; \
    }
    LIST_OF_BACKUP_SETTINGS(SET_SETTINGS_IN_BACKUP_QUERY_HELPER)
    if (all_settings_are_default)
        query_settings = nullptr;
    query.settings = query_settings;
    auto base_backup_name = base_backup_info ? base_backup_info->toAST() : nullptr;
    if (base_backup_name)
        query.setOrReplace(query.base_backup_name, base_backup_name);
    else
        query.reset(query.base_backup_name);
    query.cluster_host_ids = !cluster_host_ids.empty() ? Util::clusterHostIDsToAST(cluster_host_ids) : nullptr;
}
std::vector<Strings> BackupSettings::Util::clusterHostIDsFromAST(const IAST & ast)