commit e180c4c0ca366baeba835b07954bdc1b173159cf
Author: Nicolas Chauvet <kwizart(a)gmail.com>
Date: Thu Sep 1 13:04:40 2016 +0200
Add mariadb_server role
roles/mariadb_server/files/backup-database | 13 ++
roles/mariadb_server/files/my.cnf.default | 152 ++++++++++++++++++++
roles/mariadb_server/handlers/main.yml | 3 +
roles/mariadb_server/tasks/main.yml | 57 ++++++++
.../mariadb_server/templates/cron-backup-database | 1 +
roles/mariadb_server/templates/dotmy.cnf.j2 | 3 +
6 files changed, 229 insertions(+), 0 deletions(-)
---
diff --git a/roles/mariadb_server/files/backup-database
b/roles/mariadb_server/files/backup-database
new file mode 100644
index 0000000..8dea2b2
--- /dev/null
+++ b/roles/mariadb_server/files/backup-database
@@ -0,0 +1,13 @@
+#!/bin/bash
+# Backup a database *locally* to /backups/.
+
+DB=$1
+
+# Make our latest backup
+/bin/mysqldump --user=root --add-drop-database $DB | /usr/bin/xz > /backups/$DB-$(date
+%F).dump.xz
+
+# link to the latest backup
+ln -sf /backups/$DB-$(date +%F).dump.xz /backups/$DB-latest.xz
+
+# Also, delete the backup from a few days ago.
+rm -f /backups/$DB-$(date --date="3 days ago" +%F).dump.xz
diff --git a/roles/mariadb_server/files/my.cnf.default
b/roles/mariadb_server/files/my.cnf.default
new file mode 100644
index 0000000..4633d7a
--- /dev/null
+++ b/roles/mariadb_server/files/my.cnf.default
@@ -0,0 +1,152 @@
+# Example MariaDB config file for medium systems.
+#
+# This is for a system with little memory (32M - 64M) where MariaDB plays
+# an important part, or systems up to 128M where MariaDB is used together with
+# other programs (such as a web server)
+#
+# MariaDB programs look for option files in a set of
+# locations which depend on the deployment platform.
+# You can copy this option file to one of those
+# locations. For information about these locations, do:
+# 'my_print_defaults --help' and see what is printed under
+# Default options are read from the following files in the given order:
+# More information at:
http://dev.mysql.com/doc/mysql/en/option-files.html
+#
+# In this file, you can use all long options that a program supports.
+# If you want to know which options a program supports, run the program
+# with the "--help" option.
+
+# The following options will be passed to all MariaDB clients
+[client]
+#password = your_password
+port = 3306
+socket = /var/lib/mysql/mysql.sock
+
+# Here follows entries for some specific programs
+
+# The MariaDB server
+[mysqld]
+port = 3306
+socket = /var/lib/mysql/mysql.sock
+skip-external-locking
+key_buffer_size = 16M
+max_allowed_packet = 1M
+table_open_cache = 64
+sort_buffer_size = 512K
+net_buffer_length = 8K
+read_buffer_size = 256K
+read_rnd_buffer_size = 512K
+myisam_sort_buffer_size = 8M
+
+# setting STRICT_ALL_TABLES for phabricator
+sql_mode=STRICT_ALL_TABLES
+
+# Point the following paths to different dedicated disks
+#tmpdir = /tmp/
+
+# Don't listen on a TCP/IP port at all. This can be a security enhancement,
+# if all processes that need to connect to mysqld run on the same host.
+# All interaction with mysqld must be made via Unix sockets or named pipes.
+# Note that using this option without enabling named pipes on Windows
+# (via the "enable-named-pipe" option) will render mysqld useless!
+#
+#skip-networking
+
+# Replication Master Server (default)
+# binary logging is required for replication
+log-bin=mysql-bin
+
+# binary logging format - mixed recommended
+binlog_format=mixed
+
+# required unique id between 1 and 2^32 - 1
+# defaults to 1 if master-host is not set
+# but will not function as a master if omitted
+server-id = 1
+
+# Replication Slave (comment out master section to use this)
+#
+# To configure this host as a replication slave, you can choose between
+# two methods :
+#
+# 1) Use the CHANGE MASTER TO command (fully described in our manual) -
+# the syntax is:
+#
+# CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=<port>,
+# MASTER_USER=<user>, MASTER_PASSWORD=<password> ;
+#
+# where you replace <host>, <user>, <password> by quoted strings
and
+# <port> by the master's port number (3306 by default).
+#
+# Example:
+#
+# CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306,
+# MASTER_USER='joe', MASTER_PASSWORD='secret';
+#
+# OR
+#
+# 2) Set the variables below. However, in case you choose this method, then
+# start replication for the first time (even unsuccessfully, for example
+# if you mistyped the password in master-password and the slave fails to
+# connect), the slave will create a master.info file, and any later
+# change in this file to the variables' values below will be ignored and
+# overridden by the content of the master.info file, unless you shutdown
+# the slave server, delete master.info and restart the slaver server.
+# For that reason, you may want to leave the lines below untouched
+# (commented) and instead use CHANGE MASTER TO (see above)
+#
+# required unique id between 2 and 2^32 - 1
+# (and different from the master)
+# defaults to 2 if master-host is set
+# but will not function as a slave if omitted
+#server-id = 2
+#
+# The replication master for this slave - required
+#master-host = <hostname>
+#
+# The username the slave will use for authentication when connecting
+# to the master - required
+#master-user = <username>
+#
+# The password the slave will authenticate with when connecting to
+# the master - required
+#master-password = <password>
+#
+# The port the master is listening on.
+# optional - defaults to 3306
+#master-port = <port>
+#
+# binary logging - not required for slaves, but recommended
+#log-bin=mysql-bin
+
+# Uncomment the following if you are using InnoDB tables
+#innodb_data_home_dir = /var/lib/mysql
+#innodb_data_file_path = ibdata1:10M:autoextend
+#innodb_log_group_home_dir = /var/lib/mysql
+# You can set .._buffer_pool_size up to 50 - 80 %
+# of RAM but beware of setting memory usage too high
+#innodb_buffer_pool_size = 16M
+#innodb_additional_mem_pool_size = 2M
+# Set .._log_file_size to 25 % of buffer pool size
+#innodb_log_file_size = 5M
+#innodb_log_buffer_size = 8M
+#innodb_flush_log_at_trx_commit = 1
+#innodb_lock_wait_timeout = 50
+
+[mysqldump]
+quick
+max_allowed_packet = 16M
+
+[mysql]
+no-auto-rehash
+# Remove the next comment character if you are not familiar with SQL
+#safe-updates
+
+[myisamchk]
+key_buffer_size = 20M
+sort_buffer_size = 20M
+read_buffer = 2M
+write_buffer = 2M
+
+[mysqlhotcopy]
+interactive-timeout
diff --git a/roles/mariadb_server/handlers/main.yml
b/roles/mariadb_server/handlers/main.yml
new file mode 100644
index 0000000..6f737d9
--- /dev/null
+++ b/roles/mariadb_server/handlers/main.yml
@@ -0,0 +1,3 @@
+---
+- name: restart mariadb
+ service: name=mariadb state=restarted
diff --git a/roles/mariadb_server/tasks/main.yml b/roles/mariadb_server/tasks/main.yml
new file mode 100644
index 0000000..6eb3bb7
--- /dev/null
+++ b/roles/mariadb_server/tasks/main.yml
@@ -0,0 +1,57 @@
+- name: ensure packages required for mariadb are installed
+ yum: name={{ item }} state=present enablerepo={{ extra_enablerepos }}
+ with_items:
+ - mariadb-server
+ - MySQL-python
+ when: ansible_distribution_major_version|int < 22
+
+- name: ensure packages required for mariadb are installed
+ dnf: name={{ item }} state=present enablerepo={{ extra_enablerepos }}
+ with_items:
+ - mariadb-server
+ - MySQL-python
+ when: ansible_distribution_major_version|int > 21 and ansible_cmdline.ostree is not
defined
+
+- name: copy my.cnf
+ copy: src={{ item }} dest=/etc/my.cnf owner=root group=root mode=0644
+ with_first_found:
+ - "{{ mariadb_config }}"
+ - my.cnf.{{ inventory_hostname }}
+ - my.cnf.{{ host_group }}
+ - my.cnf.{{ dist_tag }}
+ - my.cnf.{{ ansible_distribution }}
+ - my.cnf.{{ ansible_distribution_version }}
+ - my.cnf.default
+ notify:
+ - restart mariadb
+
+- name: enable and start mariadb database
+ service: name=mariadb enabled=yes state=started
+
+- name: set mariaddb root user password
+ no_log: True
+ mysql_user: name=root password={{ mariadb_root_password }} check_implicit_admin=true
+
+- name: create .my.cnf file for future logins
+ template: src=dotmy.cnf.j2 dest=/root/.my.cnf owner=root group=root mode=0700
+
+- name: Ensure mariadb has a place to backup to
+ file: dest=/backups state=directory owner=mysql
+ tags:
+ - mariadb-server
+
+- name: Copy over backup scriplet
+ copy: src=backup-database dest=/usr/local/bin/backup-database mode=0755
+ tags:
+ - mariadb-server
+
+- name: Set up some cronjobs to backup databases as configured
+ template: >
+ src=cron-backup-database
+ dest=/etc/cron.d/cron-backup-database-{{ item }}
+ with_items:
+ - "{{ dbs_to_backup }}"
+ when: dbs_to_backup != []
+ tags:
+ - cron
+ - mariadb-server
diff --git a/roles/mariadb_server/templates/cron-backup-database
b/roles/mariadb_server/templates/cron-backup-database
new file mode 100644
index 0000000..200727e
--- /dev/null
+++ b/roles/mariadb_server/templates/cron-backup-database
@@ -0,0 +1 @@
+0 0 * * * root /usr/local/bin/backup-database {{ item }}
diff --git a/roles/mariadb_server/templates/dotmy.cnf.j2
b/roles/mariadb_server/templates/dotmy.cnf.j2
new file mode 100644
index 0000000..0a8e76c
--- /dev/null
+++ b/roles/mariadb_server/templates/dotmy.cnf.j2
@@ -0,0 +1,3 @@
+[client]
+user=root
+password={{ mariadb_root_password }}