diff --git a/mysql/defaults/main.yml b/mysql/defaults/main.yml
index 38ce525a10fbcf767b2a5c930433540057d3d05c..996a3c54b3bc49d1d284e825f88592a308844c6f 100644
--- a/mysql/defaults/main.yml
+++ b/mysql/defaults/main.yml
@@ -8,3 +8,6 @@ mysql_backup_user: "backup"
 mysql_backup_password: "{{ lookup('passwordstore', 'db/{{ ansible_hostname }}-mysql-backup create=true length=20') }}"
 
 mysql_rsnapshot: false
+# It is the admin’s responsibility to further configure binlogs, especially
+# purging them if required.
+mysql_enable_binlog: false
diff --git a/mysql/handlers/main.yml b/mysql/handlers/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..1d24e328fac09656147134d8147563a698003e29
--- /dev/null
+++ b/mysql/handlers/main.yml
@@ -0,0 +1,10 @@
+---
+
+- name: Reload systemd
+  systemd:
+    daemon_reload: true
+
+- name: Restart mariadb.service
+  systemd:
+    name: mariadb.service
+    state: restarted
diff --git a/mysql/tasks/main.yml b/mysql/tasks/main.yml
index 999f5648a64ba9d8906baa34d2f3f7b2f27bbd2e..fa4ae7c1c128668024a9a2e3bd5dcfd6eeb26fd1 100644
--- a/mysql/tasks/main.yml
+++ b/mysql/tasks/main.yml
@@ -62,3 +62,22 @@
       file:
         path: /etc/cron.d/mysql-snapshot
         state: absent
+
+- name: Create mariadb.service override directory
+  file:
+    path: /etc/systemd/system/mariadb.service.d
+    state: directory
+    owner: root
+    group: root
+    mode: '0755'
+
+- name: Configure binlog
+  template:
+    src: override.conf
+    dest: /etc/systemd/system/mariadb.service.d/override.conf
+    owner: root
+    group: root
+    mode: '0644'
+  notify:
+    - Reload systemd
+    - Restart mariadb.service
diff --git a/mysql/templates/override.conf b/mysql/templates/override.conf
new file mode 100644
index 0000000000000000000000000000000000000000..8db12afa1994ac7e9f94836952d92c36d6b31ea0
--- /dev/null
+++ b/mysql/templates/override.conf
@@ -0,0 +1,2 @@
+[Service]
+Environment=MYSQLD_OPTS={{ '--log-bin' if mysql_enable_binlog }}