MySQL Replication
These are the steps to set up Master/Slave replication on MySQL
mysql> grant replication slave, replication client on *.* to
repl@'10.%' identified by 'rvisitor';
mysql> show master status;
Change on my.cnf on salve
table_cache=750
query_cache_size = 32M
query_cache_limit = 512K
#replication settings
log_bin = replicate/mysql-bin
server_id = 20
relay_log = mysql-relay-bin
log_slave_updates = 1
log-slow-queries = mysql-slow-queries
long_query_time = 1
log-queries-not-using-indexes
replicate-do-db=test
replicate-do-db=test2
binlog_cache_size=128K
Change on my.cnf on Master
table_cache=750
query_cache_size = 32M
query_cache_limit = 512K
#replication settings
log_bin = replication/mysql-bin
binlog-do-db=test
binlog-do-db=test2
binlog-do-db=test2
expire_logs_days=10
server_id = 10
log-slow-queries = mysql-slow-queries
long_query_time = 1
Then restart mysql on both
mysql>
change master to master_host='witwicky',
master_user='repl',
master_password='rvisitor',
master_log_file='mysql-bin.000001',
master_log_pos=0;
mysql> show slave status;
mysql> start slave;
mysql> show slave status;
SHOW MASTER STATUS;
SHOW SLAVE STATUS;
SHOW MASTER LOGS;
PURGE MASTER LOGS TO 'bin-log.XYZ';
To stop execution of the binary log from the master, use STOP SLAVE
:
mysql> STOP SLAVE;
When execution is stopped, the slave does not read the binary log from the master (the IO_THREAD
) and stops processing events from the relay log that have not yet been executed (the SQL_THREAD
). You can pause either the IO or SQL threads individually by specifying the thread type. For example:
mysql> STOP SLAVE IO_THREAD;
mysql> LOAD DATA FROM MASTER;
Simple Replication example
MySql Class - Instalation & Replication (last day)
Create 2 databases, my1 and my2, my1 will be the master and will replicate to my2.
Install my5.1 into c:\my51
In windoes, set the env variable for the new MySql instance.
Create my1:
mkdir c:/data1
mkdir c:/log1
create c:/my1.cnt
In notepad add to c:/my1.cnt:
[mysql]
datadir=c:/data1
basedir=c:/my51
port=5011
log-bin=c:/log1/inst1
#unique id for each instance in replication topology
server-id=1
navigate to the my51/bin dir and type: mysqld --defaults-file=c:\my1.cnf --skip-grant-tables
Connect to the instanse (another commandline window): mysql -P 5011 (notice the upper case P)
Create the MySql db: create database mysql;
Navigate to the MySql db: use mysql;
Run sys scripts:
source c:\my51\share\mysql_system_tables.sql
source c:\my51\share\mysql_system_tables_data.sql
source c:\my51\share\fill_help_tables.sql (if help files/data/info is needed)
To shutdown the instanse, exit out of the instanse into the OS: mysqladmin shutdown -P 5011
navigate to the my51/bin dir and type: mysqld --defaults-file=c:\my1.cnf
Connect to the instanse (another commandline window): mysql -P 5011 -u root (notice the upper case P and -u for the root user)
Create a replication user on the master:
create user repl@localhost identified by 'repl';
grant replication slave on *.* to repl@localhost;
Create my2:
mkdir c:/data2
mkdir c:/log2
create c:/my2.cnt
In notepad add to c:/my2.cnt:
[mysql]
datadir=c:/data2
basedir=c:/my51
port=5022
log-bin=c:/log2/inst2 (set if you want to replicate my3 from my2 vs replicating from master my1)
log_slave_update=on (set if you want to replicate my3 from my2 vs replicating from master my1)
#unique id for each instance in replication topology
server-id=2
navigate to the my51/bin dir and type: mysqld --defaults-file=c:\my2.cnf --skip-grant-tables
Connect to the instanse (another commandline window): mysql -P 5022 (notice the upper case P)
Create the MySql db: create database mysql;
Navigate to the MySql db: use mysql;
Run sys scripts:
source c:\my51\share\mysql_system_tables.sql
source c:\my51\share\mysql_system_tables_data.sql
source c:\my51\share\fill_help_tables.sql (if help files/data/info is needed)
To shutdown the instanse, exit out of the instanse into the OS: mysqladmin shutdown -P 5022
navigate to the my51/bin dir and type: mysqld --defaults-file=c:\my2.cnf
Connect to the instanse (another commandline window): mysql -P 5022 -u root (notice the upper case P and -u for the root user)
Prep the slave for the master:
run: show master status on the master to see what logile to use and at what possition on the log file to start replicate.
change master to master_host = 'localhost', master_user='repl', master_password='repl', master_port=5011, master_log_file='inst1.000002', master_log_pos=329;
start slave;
show slave status\G
MySql Class Instructur Notes (MySqlClassInstructorNotes.txt)