snippetsqlMinor
How to setup replication(Master/slave) in MySQL 5.5.20?
Viewed 0 times
slavereplicationmysqlmastersetuphow
Problem
I have two servers both running on MySQL 5.5.20 and I want to setup replication, so every update/insert on Master would reflect immediately on Slave machine.
I tried following this tutorial (I used instructions given on this website.) but it is not working. I found that after doing all this I couldn't ... (((Please update this part with your experiences)))
Could you please suggest me a tested and an efficient way to do this in MySQL 5.5.20?
I tried following this tutorial (I used instructions given on this website.) but it is not working. I found that after doing all this I couldn't ... (((Please update this part with your experiences)))
Could you please suggest me a tested and an efficient way to do this in MySQL 5.5.20?
Solution
Please create this script
Fron the Linux prompt, open up an editor like vi
and add these lines to it
Next, make the file executable and run it
That's it !!!
Make sure you set the IP Address for
By the way, don't worry about the
Make sure binary logging is already enabled on the master. Here is how you can tell: run
Add this to /etc/my.cnf
then restart mysql
OK that takes care of binary logging for the Master.
You also need to make sure the Master and the Slave have different server IDs. Here is how you can tell:
Run
Goto the Master and add this to /etc/my.cnf
Goto the Slave and add this to /etc/my.cnf
The main thing here is to make sure
If you are new to this, have a sysadmin join you to do this.
Fron the Linux prompt, open up an editor like vi
vi /root/CreateMySQLSlave.shand add these lines to it
MYSQL_MASTER_HOST=10.1.2.20
MYSQL_SLAVE_HOST=10.1.2.30
MYSQL_USER=root
MYSQL_PASS=rootpassword
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
MYSQL_MASTER_CONN="-h${MYSQL_MASTER_HOST} ${MYSQL_CONN}"
MYSQL_SLAVE_CONN="-h${MYSQL_SLAVE_HOST} ${MYSQL_CONN}"
MYSQLDUMP_OPTIONS="--master-data=1"
MYSQLDUMP_OPTIONS="${MYSQLDUMP_OPTIONS} --single-transaction"
MYSQLDUMP_OPTIONS="${MYSQLDUMP_OPTIONS} --routines"
MYSQLDUMP_OPTIONS="${MYSQLDUMP_OPTIONS} --triggers"
MYSQLDUMP_OPTIONS="${MYSQLDUMP_OPTIONS} --flush-privileges"
MYSQLDUMP_OPTIONS="${MYSQLDUMP_OPTIONS} --all-databases"
CREATE_REPL_USER="GRANT REPLICATION SLAVE ON *.* TO repluser@'%' IDENTIFIED BY 'replpass'"
mysql ${MYSQL_MASTER_CONN} -AN -e"${CREATE_REPL_USER}"
RELOAD_FILE=/root/MySQLData.sql
echo "STOP SLAVE;" > ${RELOAD_FILE}
echo "CHANGE MASTER TO master_host='${MYSQL_MASTER_HOST}'," >> ${RELOAD_FILE}
echo "master_port=3306," >> ${RELOAD_FILE}
echo "master_user='repluser'," >> ${RELOAD_FILE}
echo "master_password='replpass'," >> ${RELOAD_FILE}
echo "master_log_file='dummy-file'," >> ${RELOAD_FILE}
echo "master_log_pos=1;" >> ${RELOAD_FILE}
mysqldump ${MYSQL_MASTER_CONN} ${MYSQLDUMP_OPTIONS} >> ${RELOAD_FILE}
echo "START SLAVE;" >> ${RELOAD_FILE}
mysql ${MYSQL_SLAVE_CONN} -A < ${RELOAD_FILE}Next, make the file executable and run it
chmod +x /root/CreateMySQLSlave.sh
/root/CreateMySQLSlave.shThat's it !!!
Make sure you set the IP Address for
MYSQL_MASTER_HOST and MYSQL_SLAVE_HOSTBy the way, don't worry about the
dummy-file in the master_log_file parameter for CHANGE MASTER TO. Line 29 of the dump file should have the correct setting there due to the --master-data=1. You can see it by doing this to the dump filehead -29 /root/MySQLData.sql | tail -1Make sure binary logging is already enabled on the master. Here is how you can tell: run
SHOW MASTER STATUS;. If you get nothing back, you need to enable it like this:Add this to /etc/my.cnf
[mysqld]
log-bin=mysql-binthen restart mysql
OK that takes care of binary logging for the Master.
You also need to make sure the Master and the Slave have different server IDs. Here is how you can tell:
Run
SHOW VARIABLES LIKE 'server_id'; If the result comes up as 1, you must set it explicitly.Goto the Master and add this to /etc/my.cnf
[mysqld]
server-id=1Goto the Slave and add this to /etc/my.cnf
[mysqld]
server-id=2The main thing here is to make sure
server_id is explicitly set in my.cnf on both Master and Slave. You must also make sure the server_id values are different from all other servers involved in the replication topology.If you are new to this, have a sysadmin join you to do this.
Code Snippets
vi /root/CreateMySQLSlave.shMYSQL_MASTER_HOST=10.1.2.20
MYSQL_SLAVE_HOST=10.1.2.30
MYSQL_USER=root
MYSQL_PASS=rootpassword
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
MYSQL_MASTER_CONN="-h${MYSQL_MASTER_HOST} ${MYSQL_CONN}"
MYSQL_SLAVE_CONN="-h${MYSQL_SLAVE_HOST} ${MYSQL_CONN}"
MYSQLDUMP_OPTIONS="--master-data=1"
MYSQLDUMP_OPTIONS="${MYSQLDUMP_OPTIONS} --single-transaction"
MYSQLDUMP_OPTIONS="${MYSQLDUMP_OPTIONS} --routines"
MYSQLDUMP_OPTIONS="${MYSQLDUMP_OPTIONS} --triggers"
MYSQLDUMP_OPTIONS="${MYSQLDUMP_OPTIONS} --flush-privileges"
MYSQLDUMP_OPTIONS="${MYSQLDUMP_OPTIONS} --all-databases"
CREATE_REPL_USER="GRANT REPLICATION SLAVE ON *.* TO repluser@'%' IDENTIFIED BY 'replpass'"
mysql ${MYSQL_MASTER_CONN} -AN -e"${CREATE_REPL_USER}"
RELOAD_FILE=/root/MySQLData.sql
echo "STOP SLAVE;" > ${RELOAD_FILE}
echo "CHANGE MASTER TO master_host='${MYSQL_MASTER_HOST}'," >> ${RELOAD_FILE}
echo "master_port=3306," >> ${RELOAD_FILE}
echo "master_user='repluser'," >> ${RELOAD_FILE}
echo "master_password='replpass'," >> ${RELOAD_FILE}
echo "master_log_file='dummy-file'," >> ${RELOAD_FILE}
echo "master_log_pos=1;" >> ${RELOAD_FILE}
mysqldump ${MYSQL_MASTER_CONN} ${MYSQLDUMP_OPTIONS} >> ${RELOAD_FILE}
echo "START SLAVE;" >> ${RELOAD_FILE}
mysql ${MYSQL_SLAVE_CONN} -A < ${RELOAD_FILE}chmod +x /root/CreateMySQLSlave.sh
/root/CreateMySQLSlave.shhead -29 /root/MySQLData.sql | tail -1[mysqld]
log-bin=mysql-binContext
StackExchange Database Administrators Q#12345, answer score: 6
Revisions (0)
No revisions yet.