Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

This document will detail how to configure a generic MySQL instance using replication. This document does not detail a specific installation case, but is rather intended to be used as a guide.

You should make sure you start with a reasonably good copy of the master instance installed on the slave machine. You can do this by shutting both the master and slave instances down, and taking a cold copy of the MySQL database files from the master server and placing them onto the slave server. The exact location of these files will vary depending on where MySQL was installed.

Setting up Replication:

The process of setting up MySQL replication consists of three primary parts:

  • Setting up replication accounts on each machine
  • Configuring the master and slave machines
  • Starting the replication

To access a MySQL instance as the root user, use the following command:

Code Block

mysql -u root -p


On each server, as root:

Code Block
Wiki Markup
<\!-\- 		@page
{ size: 8.5in 11in; margin: 0.79in }
{ margin-bottom: 0.08in }
 
\-->This document will detail how to configure a generic MySQL instance using replication.  This document does not detail a specific installation case, but is rather intended to be used as a guide.
\\

You should make sure you start with a reasonably good copy of the master instance installed on the slave machine.  You can do this by shutting both the master and slave instances down, and taking a cold copy of the MySQL database files from the master server and placing them onto the slave server.  The exact location of these files will vary depending on where MySQL was installed.

Setting up Replication:

The process of setting up MySQL replication consists of three primary parts:
1.	Setting up replication accounts on each machine
2.	Configuring the master and slave machines
3.	Starting the replication

To access MySQL as the root user, use "mysql \-u root \-p" and enter the password.

On each server, as root:

mysql> grant replication slave, replication client on *.* to 'replicate'@'<IP Address of slave server>' identified by '<Replication password>';

In

...

this

...

case,

...

we

...

want

...

the

...

"IP

...

Address

...

of

...

slave

...

server",

...

for

...

each

...

machine,

...

to

...

be

...

the

...

IP

...

address

...

of

...

the

...

slave

...

server

...

that

...

will

...

connect

...

to

...

it.

...

For

...

instance,

...

if

...

your

...

master

...

server

...

is

...

10.0.0.1

...

and

...

your

...

slave

...

server

...

is

...

10.0.0.2,

...

you

...

would

...

do

...

the

...

following:

...

On

...

10.0.0.1:

Code Block
mysql> grant replication slave, replication client on *.* to 'replicate'@'10.0.0.2' identified by 'replicationpassword';

On

...

10.0.0.2:

Code Block
mysql> grant replication slave, replication client on *.* to 'replicate'@'10.0.0.1' identified by 'replicationpassword';

On

...

the

...

master

...

server,

...

ensure

...

the

...

following

...

is

...

in

...

the

...

/etc/my.cnf

...

file:

Code Block
log_bin = mysql-bin
server_id = 101

On

...

the

...

slave

...

server,

...

ensure

...

that

...

the

...

following

...

is

...

in

...

the

...

/etc/my.cnf

...

file:

Code Block
log_bin = mysql-bin
server_id = 202
relay_log = mysql-relay-bin
log_slave_updates = 1
read_only = 1

Please

...

note

...

that

...

the

...

server_id

...

should

...

only

...

be

...

2 for

...

the

...

first

...

slave

...

server.

...

Each

...

server

...

(including

...

the

...

master)

...

should

...

have

...

a

...

different

...

server_id.

...

You

...

don't

...

have

...

to

...

use

...

1 and 2; the point is to choose numbers that are unique.

Once the my.cnf files are updated on both machines, you should restart the MySQL instances on both machines in order for them to pick up the changes.

Please do not place replication configuration options such as "master_host"

...

and

...

"master_port"

...

into

...

the

...

slave

...

my.cnf

...

file,

...

as

...

this

...

can

...

cause problems.

Also note that the slave must be able to connect to the master server, so adjust any firewall rules for port 3306 accordingly.

On the master server:

Code Block
 problems.

On the master server:
mysql> show master status;

You

...

should

...

see

...

a

...

binary

...

log

...

file

...

name

...

returned

...

in

...

the

...

output

...

of

...

the

...

command.

...

That

...

file

...

name

...

is

...

needed

...

for

...

the

...

next

...

step,

...

which

...

is

...

performed

...

on

...

the

...

slave

...

server.

...

On

...

the

...

slave

...

server:

Code Block
mysql> change master to master_host='<master host name>', master_user='replicate', master_password='<replication password>', master_log_file='<log file name from "show master status" command on master server>', master_log_pos=0;

So,

...

for

...

example,

...

if

...

"show

...

master

...

status"

...

on

...

your

...

master

...

server

...

returns

...

the

...

filename

...

"mysql-bin.000001",

...

your

...

master

...

server

...

is

...

named

...

"masterserver",

...

and

...

your

...

replication

...

password

...

is

...

"password",

...

you

...

would

...

use

...

the

...

following

...

command

...

on

...

your

...

slave

...

server:

Code Block


mysql> change master to master_host='masterserver', master_user='replicate', master_password='password', master_log_file='mysql-bin.000001', master_log_pos=0;

At

...

this

...

point,

...

your

...

slave

...

server

...

is

...

configured

...

to

...

connect

...

to

...

the

...

master

...

server.

...

The

...

next

...

step

...

is

...

telling

...

the

...

slave

...

server

...

to

...

actually

...

start

...

the

...

replication

...

process.

...

You

...

can

...

do

...

this

...

by

...

running

...

the

...

following

...

command

...

on

...

the

...

slave

...

server:

Code Block


mysql> start slave;

Replication

...

should

...

now

...

be

...

fully

...

operational

...

on

...

your

...

MySQL

...

installation.

...

To

...

verify

...

that

...

the

...

replication

...

is

...

actually,

...

occurring,

...

you

...

could

...

issue

...

the

...

following

...

command

...

on

...

the

...

slave

...

server:

Code Block

mysql> show slave status\G

Your

...

output

...

from

...

the

...

"show

...

slave

...

status\G"

...

command

...

should

...

be

...

something

...

similar

...

to

...

the

...

following,

...

although

...

it

...

probably

...

will

...

not

...

be

...

identical:

Code Block

Slave_IO_State: Waiting for master to send event
Master_Host: masterserver.mit.edu
Master_User: replicate
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 298070
Relay_Log_File: mysql-relay-bin.000123
Relay_Log_Pos: 5250
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 298070
Relay_Log_Space: 5250
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0

1 row in set (0.00 sec)

You

...

should

...

now

...

have

...

a

...

fully

...

functional

...

MySQL

...

replication

...

setup.