diff --git a/slapos/recipe/erp5_test/__init__.py b/slapos/recipe/erp5_test/__init__.py
index a9ed300a061cc56af6d710a9fc23b56aa771cf0a..567a5534894bf8ca830bece3d25cfbccfd1f59fb 100644
--- a/slapos/recipe/erp5_test/__init__.py
+++ b/slapos/recipe/erp5_test/__init__.py
@@ -38,12 +38,25 @@ class Recipe(GenericBaseRecipe):
     # XXX: assume existence of 100 test databases, because slaves are not
     # functional yet in slapos: testdb_0...testdb_100, with testuser_N
     mysql_template = "%s@%s:%s %s %s"
-    mysql_parsed = urlparse.urlparse(self.options['mysql-url'])
-    for i in range(0, 100):
-      mysql_connection_string_list.append(mysql_template % ('testdb_%s'% i,
-        mysql_parsed.hostname, mysql_parsed.port, 'testuser_%s'% i, mysql_parsed.password))
-    mysql_connection_string = mysql_template % ('erp5_test', mysql_parsed.hostname,
-      mysql_parsed.port, 'erp5_test', mysql_parsed.password)
+    mysql_url_list = self.options.get('mysql-url-list')
+    if mysql_url_list is None:
+      mysql_parsed = urlparse.urlparse(self.options['mysql-url'])
+      for i in range(0, 100):
+        mysql_connection_string_list.append(mysql_template % ('testdb_%s'% i,
+          mysql_parsed.hostname, mysql_parsed.port, 'testuser_%s'% i, mysql_parsed.password))
+      mysql_connection_string = mysql_template % ('erp5_test', mysql_parsed.hostname,
+        mysql_parsed.port, 'erp5_test', mysql_parsed.password)
+    else:
+      for mysql_url in mysql_url_list:
+        mysql_parsed = urlparse.urlparse(mysql_url)
+        mysql_connection_string_list.append(mysql_template % (
+          mysql_parsed.path.lstrip('/'),
+          mysql_parsed.hostname,
+          mysql_parsed.port,
+          mysql_parsed.username,
+          mysql_parsed.password,
+        ))
+      mysql_connection_string = mysql_connection_string_list.pop()
     cloudooo_parsed = urlparse.urlparse(self.options['cloudooo-url'])
     memcached_parsed = urlparse.urlparse(self.options['memcached-url'])
     kumofs_parsed = urlparse.urlparse(self.options['kumofs-url'])
diff --git a/stack/erp5/buildout.cfg b/stack/erp5/buildout.cfg
index c4ce72763cb25991655860341d54fa22e0455f5c..fe062bc7b0a077b6100dd8ffedb84a51ad2e3578 100644
--- a/stack/erp5/buildout.cfg
+++ b/stack/erp5/buildout.cfg
@@ -171,7 +171,7 @@ context =
 [template-mariadb]
 < = download-base
 filename = instance-mariadb.cfg.in
-md5sum = cc6469a092d0b09008dca6507ae4cb02
+md5sum = 917f3e96819193ac183c7ee84e650eba
 
 [template-kumofs]
 < = download-base
@@ -269,7 +269,7 @@ extra-context =
 [template-erp5]
 < = download-base
 filename = instance-erp5.cfg.in
-md5sum = 4a0cd404bed41a58512396af9f964c66
+md5sum = a24bd5283599807799adb2aeea1ad7ba
 
 [template-neo]
 < = download-base
diff --git a/stack/erp5/instance-erp5.cfg.in b/stack/erp5/instance-erp5.cfg.in
index 28ea473d2f9ab30d866c84e687183d117fa60bd3..545c5adce8a31787dd2f287598a25b8455952915 100644
--- a/stack/erp5/instance-erp5.cfg.in
+++ b/stack/erp5/instance-erp5.cfg.in
@@ -41,7 +41,7 @@ config-{{ option }} = {{ dumps(value) }}
 {{ request('memcached-persistent', 'kumofs', 'kumofs', {'tcpv4-port': 2000}) }}
 {{ request('memcached-volatile', 'kumofs', 'memcached', {'tcpv4-port': 2010, 'ram-storage-size': 64}) }}
 {{ request('cloudooo', 'cloudooo', 'cloudooo', {'tcpv4-port': 2020}) }}
-{{ request('mariadb', 'mariadb', 'mariadb', {'tcpv4-port': 2099}) }}
+{{ request('mariadb', 'mariadb', 'mariadb', {'tcpv4-port': 2099}, {'database-list': True, 'test-database-list': True}) }}
 {{ request('zodb', 'zodb-' ~ slapparameter_dict.get('zodb-software-type', 'zeo'), 'zodb', {'tcpv4-port': 2100, 'zodb-dict': {'root': {}}}, {'zodb-storage-type': False, 'zodb-dict': False, 'tidstorage-ip': False, 'tidstorage-port': False}) }}
 
 [request-zope-base]
@@ -49,7 +49,7 @@ config-{{ option }} = {{ dumps(value) }}
 return =
   zope-address-list
 extra-config =
-  mysql-url
+  mysql-url-list
   memcached-url
   cloudooo-url
   kumofs-url
@@ -68,7 +68,7 @@ extra-config =
   longrequest-logger-interval
   longrequest-logger-timeout
   port-base
-config-mysql-url = ${request-mariadb:connection-url}
+config-mysql-url-list = ${request-mariadb:connection-database-list}
 config-memcached-url = ${request-memcached-volatile:connection-url}
 config-cloudooo-url = ${request-cloudooo:connection-url}
 config-kumofs-url = ${request-memcached-persistent:connection-url}
diff --git a/stack/erp5/instance-mariadb.cfg.in b/stack/erp5/instance-mariadb.cfg.in
index 80358bf9c84892e00dedbe60b11a01d29f240283..0379e8b065b418a7806d913989565f98b3b96674 100644
--- a/stack/erp5/instance-mariadb.cfg.in
+++ b/stack/erp5/instance-mariadb.cfg.in
@@ -3,23 +3,31 @@
 {% macro section(name) %}{% do part_list.append(name) %}{{ name }}{% endmacro -%}
 {% set use_ipv6 = slapparameter_dict.get('use-ipv6', False) -%}
 {% set database_list = slapparameter_dict.get('database-list', [{'name': 'erp5', 'user': 'user', 'password': 'insecure'}]) -%}
+{% set test_database_list = [] %}
 {% for database_count in range(slapparameter_dict.get('test-database-amount', 30)) -%}
-{%   do database_list.append({'name': 'erp5_test_' ~ database_count, 'user': 'testuser_' ~ database_count, 'password': 'testpassword' ~ database_count}) -%}
+{%   do test_database_list.append({'name': 'erp5_test_' ~ database_count, 'user': 'testuser_' ~ database_count, 'password': 'testpassword' ~ database_count}) -%}
 {% endfor -%}
 {% set catalog_backup = slapparameter_dict.get('catalog-backup', {}) -%}
 {% set full_backup_retention_days = catalog_backup.get('full-retention-days', 7) -%}
 {% set incremental_backup_retention_days = catalog_backup.get('incremental-retention-days', full_backup_retention_days) -%}
-
-[publish-mariadb-url]
-recipe = slapos.cookbook:publish.serialised
+{% set port = slapparameter_dict['tcpv4-port'] %}
 {% if use_ipv6 -%}
-{%   set address = "[${my-cnf-parameters:ip}]" -%}
+{%   set ip = (ipv6_set | list)[0] -%}
 {% else -%}
-{%   set address = "${my-cnf-parameters:ip}" -%}
+{%   set ip = (ipv4_set | list)[0] -%}
 {% endif -%}
-{# TODO: support any number of databases -#}
-{% set database = database_list[0] %}
-url = mysql://{{ database['user'] }}:{{ database['password'] }}@{{ address }}:${my-cnf-parameters:port}/{{ database['name'] }}
+
+[publish-mariadb-url]
+recipe = slapos.cookbook:publish.serialised
+{% macro render_database_list(database_list) -%}
+{% set publish_database_list = [] -%}
+{% for database in database_list -%}
+{%   do publish_database_list.append("mysql://" ~ database['user'] ~ ":" ~ database['password'] ~ "@" ~ ip ~ ":" ~ port ~ "/" ~ database['name']) -%}
+{% endfor -%}
+{{ dumps(publish_database_list) }}
+{% endmacro -%}
+database-list = {{ render_database_list(database_list) }}
+test-database-list = {{ render_database_list(test_database_list) }}
 
 {% if full_backup_retention_days > -1 -%}
 [{{ section('cron-entry-mariadb-backup') }}]
@@ -49,12 +57,8 @@ command = {{ parameter_dict['findutils-location'] }}/bin/find "${directory:maria
 {%- endif %}
 
 [my-cnf-parameters]
-{% if use_ipv6 -%}
-ip = {{ (ipv6_set | list)[0] }}
-{% else -%}
-ip = {{ (ipv4_set | list)[0] }}
-{% endif -%}
-port = {{ slapparameter_dict['tcpv4-port'] }}
+ip = {{ ip }}
+port = {{ port }}
 socket = ${directory:run}/mariadb.sock
 data-directory = ${directory:mariadb-data}
 pid-file = ${directory:run}/mariadb.pid
@@ -79,7 +83,7 @@ template = {{ parameter_dict['template-my-cnf'] }}
 context = section parameter_dict my-cnf-parameters
 
 [init-script-parameters]
-database-list = {{ dumps(database_list) }}
+database-list = {{ dumps(database_list + test_database_list) }}
 
 [init-script]
 recipe = slapos.recipe.template:jinja2