Mercurial > repos > other > Puppet
annotate modules/mysql/README.md @ 418:dd12bb713260
Fix mod_wsgi package install on CentOS
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sat, 08 Oct 2022 15:24:44 +0100 |
parents | 668df4711671 |
children | c6c9a2cfcfbd |
rev | line source |
---|---|
244 | 1 # mysql |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
2 |
244 | 3 #### Table of Contents |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
4 |
244 | 5 1. [Module Description - What the module does and why it is useful](#module-description) |
6 2. [Setup - The basics of getting started with mysql](#setup) | |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
7 * [Beginning with mysql](#beginning-with-mysql) |
244 | 8 3. [Usage - Configuration options and additional functionality](#usage) |
9 * [Customize server options](#customize-server-options) | |
10 * [Create a database](#create-a-database) | |
11 * [Customize configuration](#customize-configuration) | |
12 * [Work with an existing server](#work-with-an-existing-server) | |
13 * [Specify passwords](#specify-passwords) | |
14 * [Install Percona server on CentOS](#install-percona-server-on-centos) | |
15 * [Install MariaDB on Ubuntu](#install-mariadb-on-ubuntu) | |
16 * [Install Plugins](#install-plugins) | |
389 | 17 * [Use Percona XtraBackup](#use-percona-xtrabackup) |
244 | 18 4. [Reference - An under-the-hood peek at what the module is doing and how](REFERENCE.md) |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
19 5. [Limitations - OS compatibility, etc.](#limitations) |
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
20 6. [Development - Guide for contributing to the module](#development) |
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
21 |
244 | 22 ## Module Description |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
23 |
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
24 The mysql module installs, configures, and manages the MySQL service. |
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
25 |
244 | 26 This module manages both the installation and configuration of MySQL, as well as extending Puppet to allow management of MySQL resources, such as databases, users, and grants. |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
27 |
244 | 28 ## Setup |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
29 |
244 | 30 ### Beginning with mysql |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
31 |
244 | 32 To install a server with the default options: |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
33 |
389 | 34 `include mysql::server`. |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
35 |
244 | 36 To customize options, such as the root password or `/etc/my.cnf` settings, you must also pass in an override hash: |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
37 |
244 | 38 ```puppet |
389 | 39 class { 'mysql::server': |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
40 root_password => 'strongpassword', |
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
41 remove_default_accounts => true, |
244 | 42 restart => true, |
389 | 43 override_options => $override_options, |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
44 } |
244 | 45 ``` |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
46 |
244 | 47 Nota bene: Configuration changes will only be applied to the running |
48 MySQL server if you pass true as restart to mysql::server. | |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
49 |
244 | 50 See [**Customize Server Options**](#customize-server-options) below for examples of the hash structure for $override_options. |
51 | |
52 ## Usage | |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
53 |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
54 All interaction for the server is done via `mysql::server`. To install the client, use `mysql::client`. To install bindings, use `mysql::bindings`. |
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
55 |
244 | 56 ### Customize server options |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
57 |
244 | 58 To define server options, structure a hash structure of overrides in `mysql::server`. This hash resembles a hash in the my.cnf file: |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
59 |
244 | 60 ```puppet |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
61 $override_options = { |
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
62 'section' => { |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
63 'item' => 'thing', |
389 | 64 }, |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
65 } |
244 | 66 ``` |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
67 |
244 | 68 For options that you would traditionally represent in this format: |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
69 |
389 | 70 ```ini |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
71 [section] |
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
72 thing = X |
244 | 73 ``` |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
74 |
244 | 75 Entries can be created as `thing => true`, `thing => value`, or `thing => ""` in the hash. Alternatively, you can pass an array as `thing => ['value', 'value2']` or list each `thing => value` separately on individual lines. |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
76 |
244 | 77 You can pass a variable in the hash without setting a value for it; the variable would then use MySQL's default settings. To exclude an option from the `my.cnf` file --- for example, when using `override_options` to revert to a default value --- pass `thing => undef`. |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
78 |
244 | 79 If an option needs multiple instances, pass an array. For example, |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
80 |
244 | 81 ```puppet |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
82 $override_options = { |
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
83 'mysqld' => { |
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
84 'replicate-do-db' => ['base1', 'base2'], |
389 | 85 }, |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
86 } |
244 | 87 ``` |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
88 |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
89 produces |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
90 |
389 | 91 ```ini |
244 | 92 [mysqld] |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
93 replicate-do-db = base1 |
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
94 replicate-do-db = base2 |
244 | 95 ``` |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
96 |
244 | 97 To implement version specific parameters, specify the version, such as [mysqld-5.5]. This allows one config for different versions of MySQL. |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
98 |
389 | 99 If you don’t want to use the default configuration, you can also supply your options to the `$options` parameter instead of `$override_options`. |
100 Please note that `$options` and `$override_options` are mutually exclusive, you can only use one of them. | |
101 | |
244 | 102 ### Create a database |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
103 |
244 | 104 To create a database with a user and some assigned privileges: |
105 | |
106 ```puppet | |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
107 mysql::db { 'mydb': |
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
108 user => 'myuser', |
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
109 password => 'mypass', |
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
110 host => 'localhost', |
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
111 grant => ['SELECT', 'UPDATE'], |
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
112 } |
244 | 113 ``` |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
114 |
244 | 115 To use a different resource name with exported resources: |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
116 |
244 | 117 ```puppet |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
118 @@mysql::db { "mydb_${fqdn}": |
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
119 user => 'myuser', |
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
120 password => 'mypass', |
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
121 dbname => 'mydb', |
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
122 host => ${fqdn}, |
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
123 grant => ['SELECT', 'UPDATE'], |
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
124 tag => $domain, |
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
125 } |
244 | 126 ``` |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
127 |
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
128 Then you can collect it on the remote DB server: |
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
129 |
244 | 130 ```puppet |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
131 Mysql::Db <<| tag == $domain |>> |
244 | 132 ``` |
133 | |
134 If you set the sql parameter to a file when creating a database, the file is imported into the new database. | |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
135 |
244 | 136 For large sql files, increase the `import_timeout` parameter, which defaults to 300 seconds. |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
137 |
244 | 138 If you have installed the mysql client in a non standard bin/sbin path you can set this with `mysql_exec_path` . |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
139 |
244 | 140 ```puppet |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
141 mysql::db { 'mydb': |
389 | 142 user => 'myuser', |
143 password => 'mypass', | |
144 host => 'localhost', | |
145 grant => ['SELECT', 'UPDATE'], | |
146 sql => '/path/to/sqlfile.gz', | |
147 import_cat_cmd => 'zcat', | |
148 import_timeout => 900, | |
149 mysql_exec_path => '/opt/rh/rh-myql57/root/bin', | |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
150 } |
244 | 151 ``` |
152 | |
153 ### Customize configuration | |
154 | |
155 To add custom MySQL configuration, place additional files into `includedir`. This allows you to override settings or add additional ones, which is helpful if you don't use `override_options` in `mysql::server`. The `includedir` location is by default set to `/etc/mysql/conf.d`. | |
156 | |
389 | 157 ### Managing Root Passwords |
158 | |
159 If you want the password managed by puppet for `127.0.0.1` and `::1` as an end user you would need to explicitly manage them with additional manifest entries. For example: | |
160 | |
161 ```puppet | |
162 mysql_user { '[root@127.0.0.1]': | |
163 ensure => present, | |
164 password_hash => mysql::password($mysql::server::root_password), | |
165 } | |
166 | |
167 mysql_user { 'root@::1': | |
168 ensure => present, | |
169 password_hash => mysql::password($mysql::server::root_password), | |
170 } | |
171 ``` | |
172 | |
173 **Note:** This module is not designed to carry out additional DNS and aliasing. | |
174 | |
244 | 175 ### Work with an existing server |
176 | |
177 To instantiate databases and users on an existing MySQL server, you need a `.my.cnf` file in `root`'s home directory. This file must specify the remote server address and credentials. For example: | |
178 | |
389 | 179 ```ini |
244 | 180 [client] |
181 user=root | |
182 host=localhost | |
183 password=secret | |
184 ``` | |
185 | |
186 This module uses the `mysqld_version` fact to discover the server version being used. By default, this is set to the output of `mysqld -V`. If you're working with a remote MySQL server, you may need to set a custom fact for `mysqld_version` to ensure correct behaviour. | |
187 | |
188 When working with a remote server, do *not* use the `mysql::server` class in your Puppet manifests. | |
189 | |
190 ### Specify passwords | |
191 | |
192 In addition to passing passwords as plain text, you can input them as hashes. For example: | |
193 | |
194 ```puppet | |
195 mysql::db { 'mydb': | |
196 user => 'myuser', | |
197 password => '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4', | |
198 host => 'localhost', | |
199 grant => ['SELECT', 'UPDATE'], | |
200 } | |
201 ``` | |
202 | |
203 If required, the password can also be an empty string to allow connections without an password. | |
204 | |
389 | 205 ### Create login paths |
206 | |
207 This feature works only for the MySQL Community Edition >= 5.6.6. | |
208 | |
209 A login path is a set of options (host, user, password, port and socket) that specify which MySQL server to connect to and which account to authenticate as. The authentication credentials and the other options are stored in an encrypted login file named .mylogin.cnf typically under the users home directory. | |
210 | |
211 More information about MySQL login paths: https://dev.mysql.com/doc/refman/8.0/en/mysql-config-editor.html. | |
212 | |
213 Some example for login paths: | |
214 | |
215 ```puppet | |
216 mysql_login_path { 'client': | |
217 owner => root, | |
218 host => 'localhost', | |
219 user => 'root', | |
220 password => Sensitive('secure'), | |
221 socket => '/var/run/mysqld/mysqld.sock', | |
222 ensure => present, | |
223 } | |
224 | |
225 mysql_login_path { 'remote_db': | |
226 owner => root, | |
227 host => '10.0.0.1', | |
228 user => 'network', | |
229 password => Sensitive('secure'), | |
230 port => 3306, | |
231 ensure => present, | |
232 } | |
233 ``` | |
234 See examples/mysql_login_path.pp for further examples. | |
235 | |
244 | 236 ### Install Percona server on CentOS |
237 | |
238 This example shows how to do a minimal installation of a Percona server on a | |
239 CentOS system. This sets up the Percona server, client, and bindings (including Perl and Python bindings). You can customize this usage and update the version as needed. | |
240 | |
241 This usage has been tested on Puppet 4.4, 5.5 and 6.3.0 / CentOS 7 / Percona Server 5.7. | |
242 | |
243 **Note:** The installation of the yum repository is not part of this package | |
244 and is here only to show a full example of how you can install. | |
245 | |
246 ```puppet | |
247 yumrepo { 'percona': | |
248 descr => 'CentOS $releasever - Percona', | |
249 baseurl => 'http://repo.percona.com/percona/yum/release/$releasever/RPMS/$basearch', | |
250 gpgkey => 'https://repo.percona.com/yum/PERCONA-PACKAGING-KEY', | |
251 enabled => 1, | |
252 gpgcheck => 1, | |
253 } | |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
254 |
389 | 255 class { 'mysql::server': |
244 | 256 package_name => 'Percona-Server-server-57', |
257 service_name => 'mysql', | |
258 config_file => '/etc/my.cnf', | |
259 includedir => '/etc/my.cnf.d', | |
260 root_password => 'PutYourOwnPwdHere', | |
261 override_options => { | |
262 mysqld => { | |
263 log-error => '/var/log/mysqld.log', | |
264 pid-file => '/var/run/mysqld/mysqld.pid', | |
265 }, | |
266 mysqld_safe => { | |
267 log-error => '/var/log/mysqld.log', | |
268 }, | |
389 | 269 }, |
244 | 270 } |
271 | |
272 # Note: Installing Percona-Server-server-57 also installs Percona-Server-client-57. | |
273 # This shows how to install the Percona MySQL client on its own | |
389 | 274 class { 'mysql::client': |
275 package_name => 'Percona-Server-client-57', | |
244 | 276 } |
277 | |
278 # These packages are normally installed along with Percona-Server-server-57 | |
279 # If you needed to install the bindings, however, you could do so with this code | |
280 class { 'mysql::bindings': | |
389 | 281 client_dev_package_name => 'Percona-Server-shared-57', |
282 client_dev => true, | |
283 daemon_dev_package_name => 'Percona-Server-devel-57', | |
284 daemon_dev => true, | |
285 perl_enable => true, | |
286 perl_package_name => 'perl-DBD-MySQL', | |
287 python_enable => true, | |
288 python_package_name => 'MySQL-python', | |
244 | 289 } |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
290 |
244 | 291 # Dependencies definition |
292 Yumrepo['percona']-> | |
293 Class['mysql::server'] | |
294 | |
295 Yumrepo['percona']-> | |
296 Class['mysql::client'] | |
297 | |
298 Yumrepo['percona']-> | |
299 Class['mysql::bindings'] | |
300 ``` | |
301 | |
302 ### Install MariaDB on Ubuntu | |
303 | |
304 #### Optional: Install the MariaDB official repo | |
305 | |
389 | 306 In this example, we'll use the latest stable (currently 10.3) from the official MariaDB repository, not the one from the distro repository. You could instead use the package from the Ubuntu repository. Make sure you use the repository corresponding to the version you want. |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
307 |
244 | 308 **Note:** `sfo1.mirrors.digitalocean.com` is one of many mirrors available. You can use any official mirror. |
309 | |
310 ```puppet | |
311 include apt | |
312 | |
313 apt::source { 'mariadb': | |
389 | 314 location => 'http://sfo1.mirrors.digitalocean.com/mariadb/repo/10.3/ubuntu', |
315 release => $::facts['os']['codename'], | |
244 | 316 repos => 'main', |
317 key => { | |
389 | 318 id => '177F4010FE56CA3336300305F1656F24C74CD1D8', |
244 | 319 server => 'hkp://keyserver.ubuntu.com:80', |
320 }, | |
321 include => { | |
322 src => false, | |
323 deb => true, | |
324 }, | |
325 } | |
326 ``` | |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
327 |
244 | 328 #### Install the MariaDB server |
329 | |
389 | 330 This example shows MariaDB server installation on Ubuntu Xenial. Adjust the version and the parameters of `my.cnf` as needed. All parameters of the `my.cnf` can be defined using the `override_options` parameter. |
244 | 331 |
332 The folders `/var/log/mysql` and `/var/run/mysqld` are created automatically, but if you are using other custom folders, they should exist as prerequisites for this code. | |
333 | |
334 All the values set here are an example of a working minimal configuration. | |
335 | |
336 Specify the version of the package you want with the `package_ensure` parameter. | |
337 | |
338 ```puppet | |
389 | 339 class { 'mysql::server': |
244 | 340 package_name => 'mariadb-server', |
389 | 341 package_ensure => '1:10.3.21+maria~xenial', |
342 service_name => 'mysqld', | |
244 | 343 root_password => 'AVeryStrongPasswordUShouldEncrypt!', |
344 override_options => { | |
345 mysqld => { | |
346 'log-error' => '/var/log/mysql/mariadb.log', | |
347 'pid-file' => '/var/run/mysqld/mysqld.pid', | |
348 }, | |
349 mysqld_safe => { | |
350 'log-error' => '/var/log/mysql/mariadb.log', | |
351 }, | |
389 | 352 }, |
244 | 353 } |
354 | |
355 # Dependency management. Only use that part if you are installing the repository | |
356 # as shown in the Preliminary step of this example. | |
357 Apt::Source['mariadb'] ~> | |
358 Class['apt::update'] -> | |
389 | 359 Class['mysql::server'] |
244 | 360 |
361 ``` | |
362 | |
363 #### Install the MariaDB client | |
364 | |
365 This example shows how to install the MariaDB client and all of the bindings at once. You can do this installation separately from the server installation. | |
366 | |
367 Specify the version of the package you want with the `package_ensure` parameter. | |
368 | |
369 ```puppet | |
389 | 370 class { 'mysql::client': |
244 | 371 package_name => 'mariadb-client', |
389 | 372 package_ensure => '1:10.3.21+maria~xenial', |
244 | 373 bindings_enable => true, |
374 } | |
375 | |
376 # Dependency management. Only use that part if you are installing the repository as shown in the Preliminary step of this example. | |
377 Apt::Source['mariadb'] ~> | |
378 Class['apt::update'] -> | |
389 | 379 Class['mysql::client'] |
244 | 380 ``` |
381 | |
382 ### Install MySQL Community server on CentOS | |
383 | |
384 You can install MySQL Community Server on CentOS using the mysql module and Hiera. This example was tested with the following versions: | |
385 | |
386 * MySQL Community Server 5.6 | |
387 * Centos 7.3 | |
388 * Puppet 3.8.7 using Hiera | |
389 * puppetlabs-mysql module v3.9.0 | |
390 | |
391 In Puppet: | |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
392 |
244 | 393 ```puppet |
389 | 394 include mysql::server |
244 | 395 |
396 create_resources(yumrepo, hiera('yumrepo', {})) | |
397 | |
398 Yumrepo['repo.mysql.com'] -> Anchor['mysql::server::start'] | |
399 Yumrepo['repo.mysql.com'] -> Package['mysql_client'] | |
400 | |
401 create_resources(mysql::db, hiera('mysql::server::db', {})) | |
402 ``` | |
403 | |
404 In Hiera: | |
405 | |
406 ```yaml | |
407 --- | |
408 | |
409 # Centos 7.3 | |
410 yumrepo: | |
411 'repo.mysql.com': | |
412 baseurl: "http://repo.mysql.com/yum/mysql-5.6-community/el/%{::operatingsystemmajrelease}/$basearch/" | |
413 descr: 'repo.mysql.com' | |
414 enabled: 1 | |
415 gpgcheck: true | |
416 gpgkey: 'http://repo.mysql.com/RPM-GPG-KEY-mysql' | |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
417 |
244 | 418 mysql::client::package_name: "mysql-community-client" # required for proper MySQL installation |
419 mysql::server::package_name: "mysql-community-server" # required for proper MySQL installation | |
420 mysql::server::package_ensure: 'installed' # do not specify version here, unfortunately yum fails with error that package is already installed | |
421 mysql::server::root_password: "change_me_i_am_insecure" | |
422 mysql::server::manage_config_file: true | |
423 mysql::server::service_name: 'mysqld' # required for puppet module | |
424 mysql::server::override_options: | |
425 'mysqld': | |
426 'bind-address': '127.0.0.1' | |
427 'log-error': '/var/log/mysqld.log' # required for proper MySQL installation | |
428 'mysqld_safe': | |
429 'log-error': '/var/log/mysqld.log' # required for proper MySQL installation | |
430 | |
431 # create database + account with access, passwords are not encrypted | |
432 mysql::server::db: | |
433 "dev": | |
434 user: "dev" | |
435 password: "devpass" | |
436 host: "127.0.0.1" | |
437 grant: | |
438 - "ALL" | |
439 | |
440 ``` | |
441 | |
442 ### Install Plugins | |
443 | |
444 Plugins can be installed by using the `mysql_plugin` defined type. See `examples/mysql_plugin.pp` for futher examples. | |
389 | 445 |
446 ### Use Percona XtraBackup | |
447 | |
448 This example shows how to configure MySQL backups with Percona XtraBackup. This sets up a weekly cronjob to perform a full backup and additional daily cronjobs for incremental backups. Each backup will create a new directory. A cleanup job will automatically remove backups that are older than 15 days. | |
449 | |
450 ```puppet | |
451 yumrepo { 'percona': | |
452 descr => 'CentOS $releasever - Percona', | |
453 baseurl => 'http://repo.percona.com/release/$releasever/RPMS/$basearch', | |
454 gpgkey => 'https://www.percona.com/downloads/RPM-GPG-KEY-percona https://repo.percona.com/yum/PERCONA-PACKAGING-KEY', | |
455 enabled => 1, | |
456 gpgcheck => 1, | |
457 } | |
458 | |
459 class { 'mysql::server::backup': | |
460 backupuser => 'myuser', | |
461 backuppassword => 'mypassword', | |
462 backupdir => '/tmp/backups', | |
463 provider => 'xtrabackup', | |
464 backuprotate => 15, | |
465 execpath => '/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin', | |
466 time => ['23', '15'], | |
467 } | |
468 ``` | |
469 | |
470 If the daily or weekly backup was successful, then the empty file `/tmp/mysqlbackup_success` is created, which makes it easy to monitor the status of the database backup. | |
471 | |
472 After two weeks the backup directory should look similar to the example below. | |
473 | |
474 ``` | |
475 /tmp/backups/2019-11-10_full | |
476 /tmp/backups/2019-11-11_23-15-01 | |
477 /tmp/backups/2019-11-13_23-15-01 | |
478 /tmp/backups/2019-11-13_23-15-02 | |
479 /tmp/backups/2019-11-14_23-15-01 | |
480 /tmp/backups/2019-11-15_23-15-02 | |
481 /tmp/backups/2019-11-16_23-15-01 | |
482 /tmp/backups/2019-11-17_full | |
483 /tmp/backups/2019-11-18_23-15-01 | |
484 /tmp/backups/2019-11-19_23-15-01 | |
485 /tmp/backups/2019-11-20_23-15-02 | |
486 /tmp/backups/2019-11-21_23-15-01 | |
487 /tmp/backups/2019-11-22_23-15-02 | |
488 /tmp/backups/2019-11-23_23-15-01 | |
489 ``` | |
490 | |
491 A drawback of using incremental backups is the need to keep at least 7 days of backups, otherwise the full backups is removed early and consecutive incremental backups will fail. Furthermore an incremental backups becomes obsolete once the required full backup was removed. | |
492 | |
493 The next example uses XtraBackup with incremental backups disabled. In this case the daily cronjob will always perform a full backup. | |
494 | |
495 ```puppet | |
496 class { 'mysql::server::backup': | |
497 backupuser => 'myuser', | |
498 backuppassword => 'mypassword', | |
499 backupdir => '/tmp/backups', | |
500 provider => 'xtrabackup', | |
501 incremental_backups => false, | |
502 backuprotate => 5, | |
503 execpath => '/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin', | |
504 time => ['23', '15'], | |
505 } | |
506 ``` | |
507 | |
244 | 508 ## Reference |
509 | |
510 ### Classes | |
511 | |
512 #### Public classes | |
513 | |
514 * [`mysql::server`](#mysqlserver): Installs and configures MySQL. | |
515 * [`mysql::server::backup`](#mysqlserverbackup): Sets up MySQL backups via cron. | |
516 * [`mysql::bindings`](#mysqlbindings): Installs various MySQL language bindings. | |
517 * [`mysql::client`](#mysqlclient): Installs MySQL client (for non-servers). | |
518 | |
519 #### Private classes | |
520 | |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
521 * `mysql::server::install`: Installs packages. |
244 | 522 * `mysql::server::installdb`: Implements setup of mysqld data directory (e.g. /var/lib/mysql) |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
523 * `mysql::server::config`: Configures MYSQL. |
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
524 * `mysql::server::service`: Manages service. |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
525 * `mysql::server::account_security`: Deletes default MySQL accounts. |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
526 * `mysql::server::root_password`: Sets MySQL root password. |
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
527 * `mysql::server::providers`: Creates users, grants, and databases. |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
528 * `mysql::bindings::client_dev`: Installs MySQL client development package. |
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
529 * `mysql::bindings::daemon_dev`: Installs MySQL daemon development package. |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
530 * `mysql::bindings::java`: Installs Java bindings. |
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
531 * `mysql::bindings::perl`: Installs Perl bindings. |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
532 * `mysql::bindings::php`: Installs PHP bindings. |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
533 * `mysql::bindings::python`: Installs Python bindings. |
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
534 * `mysql::bindings::ruby`: Installs Ruby bindings. |
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
535 * `mysql::client::install`: Installs MySQL client. |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
536 * `mysql::backup::mysqldump`: Implements mysqldump backups. |
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
537 * `mysql::backup::mysqlbackup`: Implements backups with Oracle MySQL Enterprise Backup. |
244 | 538 * `mysql::backup::xtrabackup`: Implements backups with XtraBackup from Percona or Mariabackup. |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
539 |
244 | 540 ### Parameters |
541 | |
542 #### mysql::server | |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
543 |
244 | 544 ##### `create_root_user` |
545 | |
546 Whether root user should be created. | |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
547 |
244 | 548 Valid values are `true`, `false`. |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
549 |
244 | 550 Defaults to `true`. |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
551 |
244 | 552 This is useful for a cluster setup with Galera. The root user has to be created only once. You can set this parameter true on one node and set it to false on the remaining nodes. |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
553 |
244 | 554 ##### `create_root_my_cnf` |
555 | |
556 Whether to create `/root/.my.cnf`. | |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
557 |
244 | 558 Valid values are `true`, `false`. |
559 | |
560 Defaults to `true`. | |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
561 |
244 | 562 `create_root_my_cnf` allows creation of `/root/.my.cnf` independently of `create_root_user`. You can use this for a cluster setup with Galera where you want `/root/.my.cnf` to exist on all nodes. |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
563 |
244 | 564 ##### `root_password` |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
565 |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
566 The MySQL root password. Puppet attempts to set the root password and update `/root/.my.cnf` with it. |
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
567 |
244 | 568 This is required if `create_root_user` or `create_root_my_cnf` are true. If `root_password` is 'UNSET', then `create_root_user` and `create_root_my_cnf` are assumed to be false --- that is, the MySQL root user and `/root/.my.cnf` are not created. |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
569 |
244 | 570 Password changes are supported; however, the old password must be set in `/root/.my.cnf`. Effectively, Puppet uses the old password, configured in `/root/my.cnf`, to set the new password in MySQL, and then updates `/root/.my.cnf` with the new password. |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
571 |
244 | 572 ##### `old_root_password` |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
573 |
244 | 574 This parameter no longer does anything. It exists only for backwards compatibility. See the `root_password` parameter above for details on changing the root password. |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
575 |
244 | 576 ##### `create_root_login_file` |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
577 |
244 | 578 Whether to create `/root/.mylogin.cnf` when using mysql 5.6.6+. |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
579 |
244 | 580 Valid values are `true`, `false`. |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
581 |
244 | 582 Defaults to `false`. |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
583 |
244 | 584 `create_root_login_file` will put a copy of your existing `.mylogin.cnf` in the `/root/.mylogin.cnf` location. |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
585 |
244 | 586 When set to 'true', this option also requires the `login_file` option. |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
587 |
244 | 588 The `login_file` option is required when set to true. |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
589 |
244 | 590 #### `login_file` |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
591 |
244 | 592 Whether to put the `/root/.mylogin.cnf` in place. |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
593 |
244 | 594 You need to create the `.mylogin.cnf` file with `mysql_config_editor`, this tool comes with mysql 5.6.6+. |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
595 |
244 | 596 The created .mylogin.cnf needs to be put under files in your module, see example below on how to use this. |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
597 |
244 | 598 When the `/root/.mylogin.cnf` exists the environment variable `MYSQL_TEST_LOGIN_FILE` will be set. |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
599 |
244 | 600 This is required if `create_root_user` and `create_root_login_file` are true. If `root_password` is 'UNSET', then `create_root_user` and `create_root_login_file` are assumed to be false --- that is, the MySQL root user and `/root/.mylogin.cnf` are not created. |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
601 |
244 | 602 ```puppet |
389 | 603 class { 'mysql::server': |
604 root_password => 'password', | |
605 create_root_my_cnf => false, | |
606 create_root_login_file => true, | |
607 login_file => 'puppet:///modules/${module_name}/mylogin.cnf', | |
244 | 608 } |
609 ``` | |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
610 |
244 | 611 ##### `override_options` |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
612 |
244 | 613 Specifies override options to pass into MySQL. Structured like a hash in the my.cnf file: |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
614 |
244 | 615 ```puppet |
616 class { 'mysql::server': | |
617 root_password => 'password' | |
618 } | |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
619 |
244 | 620 mysql_plugin { 'auth_pam': |
621 ensure => present, | |
622 soname => 'auth_pam.so', | |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
623 } |
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
624 |
244 | 625 ``` |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
626 |
244 | 627 ### Tasks |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
628 |
244 | 629 The MySQL module has an example task that allows a user to execute arbitary SQL against a database. Please refer to to the [PE documentation](https://puppet.com/docs/pe/2017.3/orchestrator/running_tasks.html) or [Bolt documentation](https://puppet.com/docs/bolt/latest/bolt.html) on how to execute a task. |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
630 |
244 | 631 ## Limitations |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
632 |
389 | 633 For an extensive list of supported operating systems, see [metadata.json](https://github.com/puppetlabs/puppetlabs-mysql/blob/main/metadata.json) |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
634 |
244 | 635 **Note:** The mysqlbackup.sh does not work and is not supported on MySQL 5.7 and greater. |
26
58d1818c2ded
Update MySQL module (which adds "staging" module)
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
636 |
244 | 637 ## Development |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
638 |
389 | 639 We are experimenting with a new tool for running acceptance tests. Its name is [puppet_litmus](https://github.com/puppetlabs/puppet_litmus) this replaces beaker as the test runner. To run the acceptance tests follow the [instructions](https://puppetlabs.github.io/litmus/Running-acceptance-tests.html) from the Litmus documentation. |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
640 |
244 | 641 Puppet modules on the Puppet Forge are open projects, and community contributions are essential for keeping them great. We can't access the huge number of platforms and myriad of hardware, software, and deployment configurations that Puppet is intended to serve. |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
642 |
244 | 643 We want to keep it as easy as possible to contribute changes so that our modules work in your environment. There are a few guidelines that we need contributors to follow so that we can have a chance of keeping on top of things. |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
644 |
244 | 645 Check out our the complete [module contribution guide](https://puppet.com/docs/puppet/latest/contributing.html). |
0
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
646 |
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
647 ### Authors |
956e484adc12
Initial public release of Puppet configs
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
648 |
389 | 649 This module is based on work by David Schmitt. Thank you to all of our [contributors](https://github.com/puppetlabs/puppetlabs-mysql/graphs/contributors). |