Thursday, May 5, 2011

How to implement MySql replication on same Windows machine.


1. First install mysql-5.5.11-win32.msi on windows machine. While installing choose custom installation and change
installation path to D:\MySQL\MySQL Server 5.5
2. Use all the default parameter like Service name is MYSQL and port number is 3306 and setup bin path.
3. And also modify root password to mysql.
3. Now check whether your installation is correct or not.
4.Open dos prompt and type below command.
c:\> mysql -uroot -pmysql -hlocalhost -P3306;

If you get mysql command then everything is ok.
We will treat mysql 5.5 is MASTER.
Now create one database:

mysql> create database suman;

5. Now install another version of mysql (mysql-5.1.56-win32.msi)  for SLAVE. Again while installing choose custome
installation and change installation path to D:\MySQL\MySQL Server 5.1
6. Change service name to MYSQL2 and port number to 3307
7. Modify root password to root.
8.Now check whether your installation is correct or not.
9.Open new dos prompot and type below command.

c:\> mysql -uroot -proot -hlocalhost -P3307;

If you get mysql command then everything is ok.
We will treat mysql 5.1 is SLAVE.
Now create one database:
mysql> create database suman;

Up to here two mysql instance are running in your windows machine.

Now start the replication implementation.

1. Open D:\MySQL\MySQL Server 5.5\my.ini then add four options to the [mysqld] section of the my.ini file

[mysqld]
log-bin=dellxp1-bin.log
server-id=1
innodb_flush_log_at_trx_commit=1
sync_binlog=1

save it.
Restart the MYSQL service from your pc. MyComputer -> Right click -> click on Manage -> Services and Application -> Services ->
search MYSQL on right side, right click on that MYSQL and click on restart.

The next step in setting up replication is creating an account that will be used exclusively for replication. We strongly advise creating a dedicated replication user be created for better security so you won't need to grant any additional privileges besides replication permissions. Create an account on the master server that the slave server can use to connect. As mentioned, this account must be given the REPLICATION SLAVE privilege.

Open one dos windows for all MASTER operation.
c:\>mysql -uroot -pmysql -hlocalhost -P3306;
mysql> create user 'replication_user' identified by 'password';
mysql> grant replication slave on *.* to 'replication_user'@'%' identified by 'password';
mysql> flush privileges;
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;

+--------------------+----------+--------------+------------------+
| File               | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| dellxp1-bin.000001 |     338 |              |                  |
+--------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

Please note down this file name and position, it will use to later.

Now take your backup of your MASTER database as we have new database so this below step are not required. But when you have to create SLAVE of running database then it step must be required, so lets go these below step too.

Open new dos prompt.

Taking backup from MASTER:
C:\>mysqldump -uroot -pmysql -hlocalhost -P3306 suman > d:\test2.sql

Now export this back to SLAVE, run below command on same dos windows.
C:\Users\sumankbi>mysql -uroot -proot -hlocalhost -P3307 suman < d:\test2.sql

Now some change on SLAVE side:
1. Open D:\MySQL\MySQL Server 5.1\my.ini then add four options to the [mysqld] section of the my.ini file

[mysqld]
server-id=2

save it.
Restart the MYSQL2 service from your pc. MyComputer -> Right click -> click on Manage -> Services and Application -> Services ->
search MYSQL on right side, right click on that MYSQL2 and click on restart.

Open one dos windows for all SLAVE operation.
c:\>mysql -uroot -proot -hlocalhost -P3307;

mysql> stop slave;
mysql> CHANGE MASTER TO
MASTER_HOST='localhost',
MASTER_USER='replication_user',
MASTER_PASSWORD='password',
MASTER_PORT=3306,
MASTER_LOG_FILE='dellxp1-bin.000001',
MASTER_LOG_POS=338;

mysql> show slave status\G;
Output will come huge, among two line should be like:
    Slave_IO_Running: No
    Slave_SQL_Running: No
   
Because slave is stopped now.
Now time came to start slave.
on slave side:

mysql> start slave;
Now check slave status:
mysql> show slave status\G;
Output will come huge, among two line should be like:
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
   
 If both values are Yes, then everything are ok.

 Now you can check your replication work.

 Create some table in MASTER suman database or any database (those should be there at SLAVE side) then check at slave side.

 Now you stop slave again then you change of MASTER will not come but once again you will start slave then  slave will get automatically updated from last time stopped pointer.

More details on http://dev.mysql.com/doc/refman/5.0/en/replication.html

Thanks:

Binod Suman

13 comments:

  1. Thank you so much, i have operator many time. final it work, now i don't know why it work.

    ReplyDelete
  2. Hi Suman ,
    This one is very useful...
    But
    nothing is showing when I type SHOW MASTER STATUS
    Can u help me?

    ReplyDelete
    Replies
    1. hi sumi,
      please check whether ur bin log is enabled or not..

      Delete
  3. WOW ! Awesome article. Every thing is mentioned precisely. It worked 100% for me and even I didn't have to go for a second attempt to make it work. Thank you so much for sharing it.

    ReplyDelete
  4. WOW ! Awesome article. Every thing is mentioned precisely. It worked 100% for me and even I didn't have to go for a second attempt to make it work. Thank you so much for sharing it.

    ReplyDelete
  5. Thank you for sharing this article.... Worked for me!!!

    ReplyDelete
  6. Exactly What i was looking for :) Thanks..

    ReplyDelete
  7. After backup completed in master command prompt enter UNLOCK TABLES;

    ReplyDelete
  8. Pretty much needful....Thanks a lot.

    ReplyDelete
  9. Hi all,
    Could you please help me out to get the data replication process in windows7 machine from mysql(Master) and Sql(Slave)....I mean to say data replication(Master-Slave DataBase) between MySql and Sql in windows7

    ReplyDelete
  10. Hi suman/all,
    I tried this,but at last i got
    Slave_IO_Running: No
    Slave_SQL_Running: Yes, hw at resolve this. Slave_IO_Running is no. hw to make it yes.

    ReplyDelete

You can put your comments here (Either feedback or your Question related to blog)