Skip to content

chef cookbook for installing and configuring mysql, only changing explicitly given options from the systems defaults

Notifications You must be signed in to change notification settings

asmarre/mysqld

 
 

Repository files navigation

mysqld Cookbook

Manage your mysqld servers with this cookbook. Unlike the official opscode mysql cookbook, it doesn't mess with the default mysql configuration. If you do not specify anything explicitly, the defaults of your distribution will be used. (At least if I do not mess up - Check the default attributes, if unsure (and file a pull request if you need to correct anything))

Features

  • Defaults to OS settings unless explicitly specified otherwise
  • Supports all my.cnf settings

Currently tested on Ubuntu, should work on RHEL and Debian as well. Contributions to support other systems are very welcome!

Requirements

You need to add the following line to your metadata.rb

depends 'mysqld'

Attributes

Configuration

Everything in your my.cnf can be maintained using attributes. Consider using the provides LWRPs (see below)

If you do not specify anything, the defaults of your os will be used.

This recipe supports every setting in the my.cnf. All your settings will be merged with the systems default, and then written to the my.cnf config file. The packages to install, the path to my.cnf as well as the name of the service are set automatically, and can be overwritten using the following attributes:

node['mysqld']['my.cnf_path']
node['mysqld']['service_name']
node['mysqld']['mysql_packages']          # When using mysql_install recipe
node['mysqld']['mariadb_packages']        # When using mariadb_install recipe
node['mysqld']['mariadb_galera_packages'] # When using mariadb_galera_install recipe

The configuration is stored in the node['mysqld']['my.cnf'] hash, and can be adapted like so

# node['mysqld']['my.conf'][<category>][<key>] = <value>
node['mysqld']['my.cnf']['mysqld']['bind-address'] = '0.0.0.0'

This will expand to the following in your config file (leaving all other settings untouched)

[mysqld]
  bind-address = 0.0.0.0

To remove a default option, you can pass false or nil as the value

# Remove deprecated innodb option
default['mysqld']['my.cnf']['mysqld']['innodb_additional_mem_pool_size'] = false

As the configuration file is constructed from the config hash, every my.cnf configuration option is supported.

node['mysqld']['root_password'] = 'yourpass'

Recipes

default

  • Setup official MariaDB repository
  • Install MariaDB server
  • Configure MariaDB server according to the attributes. If no attributes are given, stick with the systems default

mariadb_repository

Runs mariadb_apt_repository or mariadb_yum_repository recipe according to your platform

mariadb_apt_repository

Sets up official MariaDB repository to install packages from. Configure it using the following attributes

node['mysqld']['repository']['version'] # Defaults to '10.1'
node['mysqld']['repository']['mirror']  # Defaults to HostEurope mirror

mariadb_yum_repository

Sets up official MariaDB repository to install packages from. Configure it using the following attributes

node['mysqld']['repository']['version'] # Defaults to '10.1'
node['mysqld']['repository']['mirror']  # Defaults to HostEurope mirror

mariadb_install

Install mariadb packages (according to attributes, defaults to mariadb-server)

mysql_install

Install mysql packages (according to attributes, defaults to mysql-server)

configure

Configure mysql according to attributes. Sets the databases root account (resp. debian-sys-maint on Debian/Ubuntu systems) to use the password in node['mysqld']['root_password'], if the attribute is set.

mariadb_galera_init

Run mariadb\_repository and mariadb\_galera\_install recipes, then configure as the configure recipe would do, but start mariadb with --wsrep-new-cluster --wsrep\_cluster\_address=gcomm:// to initialize a new Galera cluster.

Use this if you want to setup a new Galera cluster, and run it on your first node once:

$ sudo chef-client --once -o 'recipe[mysqld::mariadb_galera_init]'

Once you connected the other nodes using the regular recipes, re-run chef-client as you did on the other servers.

Note: If you use a wrapper cookbook to configure your instances, attributes might not be available when running the recipe with -o recipe[]. Create a mariadb_galera_init recipe in your wrapper cookbook, calling this recipe if you have trouble.

Providers

mysqld

You can configure your database also using the mysqld provider:

include_recipe 'mysqld::mariadb_galera_install'

# Name attribute will be ignored. Choose something that makes sense for you
mysqld 'galera' do
  my_cnf { 'bind-address' => '0.0.0.0' }
end

password

You can set passwords (incl. root and debian-sys-maint accounts) using this provider. By default, the provider uses the created root/debian-sys-maint accounts depending on the system you are on.

mysqld_password 'root' do
  password 'get_from_data_bag_maybe?'
.
  # If required, you can specify your own auth-scheme here
  # auth '-u specialuser -pmypass'
end


# Contributing

Contributions are very welcome!

1. Fork the repository on Github
2. Create a named feature branch (like `add_component_x`)
3. Write you change
4. Write tests for your change (if applicable)
5. Run the tests, ensuring they all pass
6. Submit a Pull Request using Github


# License and Authors

Authors: Chris Aumann <me@chr4.org>

License: GPLv3

About

chef cookbook for installing and configuring mysql, only changing explicitly given options from the systems defaults

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Ruby 100.0%