7 12 2013
MySQL Replication with Puppet
This is how I setup MySQL replication with puppet managing the configuration files/install.
The MySQL module used is – https://github.com/puppetlabs/puppetlabs-mysql
Puppet Config for the master;
class { 'mysql':} ->
class { 'mysql::server':
config_hash => {
'root_password' => '<password>',
'bind_address' => '0.0.0.0'
}
} ->
mysql::server::config { 'basic_config':
settings => {
'mysqld' => {
'server-id' => '1',
'binlog-format' => 'mixed',
'log-bin' => 'mysql-bin',
'datadir' => '/var/lib/mysql',
'innodb_flush_log_at_trx_commit' => '1',
'sync_binlog' => '1',
'binlog-do-db' => [ 'database1',
'database2',
'database3',
'database4',
],
},
}
}
database_user { '<user>@<master>':
password_hash => mysql_password('<password>')
} ->
database_grant { '<user>@<master>/*':
privileges => ['REPLICATION SLAVE'] ,
}
mysql::db { 'database1':
ensure => 'present',
user => 'user1',
password => '<password>',
host => '<host>',
grant => ['all'],
require => Class['mysql::config'],
}
mysql::db { 'database2':
ensure => 'present',
user => 'user2',
password => '<password>',
host => '<host>',
grant => ['all'],
require => Class['mysql::config'],
}
mysql::db { 'database3':
ensure => 'present',
user => 'user3',
password => '<password>',
host => '<host>',
grant => ['all'],
require => Class['mysql::config'],
}
mysql::db { 'database4':
ensure => 'present',
user => 'user4',
password => '<password>',
host => '<host>',
grant => ['all'],
require => Class['mysql::config'],
}
Puppet Config for the slave;
class { 'mysql': } ->
class { 'mysql::server':
config_hash => {
'root_password' => '<password>',
'bind_address' => '0.0.0.0',
}
} ->
mysql::server::config { 'basic_config':
settings => {
'mysqld' => {
'server-id' => '2',
'binlog-format' => 'mixed',
'log-bin' => 'mysql-bin',
'relay-log' => 'mysql-relay-bin',
'log-slave-updates' => '1',
'read-only' => '1',
'replicate-do-db' => [ 'database1',
'database2',
'database3',
'database4',
],
},
}
}
mysql::db { 'database1':
ensure => 'present',
user => 'user1',
password => '<password>',
host => '<host>',
grant => ['all'],
require => Class['mysql::config'],
}
mysql::db { 'database2':
ensure => 'present',
user => 'user2',
password => '<password>',
host => '<host>',
grant => ['all'],
require => Class['mysql::config'],
}
mysql::db { 'database3':
ensure => 'present',
user => 'user3',
password => '<password>',
host => '<host>',
grant => ['all'],
require => Class['mysql::config'],
}
mysql::db { 'database4':
ensure => 'present',
user => 'user4',
password => '<password>',
host => '<host>',
grant => ['all'],
require => Class['mysql::config'],
}
SQL Syntax (Yes, there are some manual bits..)
On Master;
FLUSH PRIVILEGES; FLUSH TABLES WITH READ LOCK; UNLOCK TABLES; mysql> SHOW MASTER STATUS; +------------------+----------+----------------------------------------------------------------------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+----------------------------------------------------------------------------+------------------+ | mysql-bin.000270 | 71440377 | database1,database2,database3,database4 | | +------------------+----------+----------------------------------------------------------------------------+------------------+
Make a note of the mysql-bin file name and the postition number, then dump the databases you are going to replicate and copy them to the slave.
On Slave;
Import the SQL dumps from the master.
SLAVE STOP; CHANGE MASTER TO MASTER_HOST='<master>', MASTER_USER='<user>', MASTER_PASSWORD='<password>', MASTER_LOG_FILE='mysql-bin.000270', MASTER_LOG_POS=71440377; START SLAVE; SHOW SLAVE STATUS\G
MASTER_LOG_FILE= and MASTER_LOG_POS=; are displayed when you run “SHOW MASTER STATUS;” on the master.
When you run “SHOW SLAVE STATUS\G” make sure you see;
Slave_IO_Running: Yes Slave_SQL_Running: Yes
Also check on “Seconds_Behind_Master” you will need to wait for this to drop to 0.
Once it’s on 0, create a table in a database on the master and check to see if it’s replicated to the slave.
Template Error: The template file must be given (or the template could not be opened) Error: Missing Dependency: rtld(GNU_HASH)