首页 > 代码库 > Mysql快速为线上的Master新增Slave节点
Mysql快速为线上的Master新增Slave节点
转载:http://blog.longwin.com.tw/2008/07/mysql_set_master_slave_replication_fase_online_2008/
已经在线上运作的MySQL Master, 希望能在最短的时间内做mysqldump, 然后马上就让他还原上线, 所以主要就是利用--master-data, 然后短暂的READ LOCK, mysqldump, UNLOCK 的动作, 希望把时间降到最短啰~
注: 如果有完整的mysql bin log 的话, 可以直接设好replication 即可, 就会自动开始从binlog 最前面开始抓, 连停机都不用了.
操作步骤
ssh master.hostname # 先设 MASTER
mysql> FLUSH TABLES WITH READ LOCK;
克隆一个master.hostname # 做mysqldump
$ mysqldump -u root DATABASE_NAME --master-data > DATABASE_NAME.sql
# 若不加--master-data, 就需要用show master status 来记下要组合出下述语法:
# CHANGE MASTER TO MASTER_HOST=‘MASTER_HOSTNAME‘, MASTER_USER=‘repl‘, MASTER_PASSWORD=‘repl_passord‘, MASTER_LOG_FILE=‘mysql-bin.000014‘, MASTER_LOG_POS=232;
dump 完后就离开此Terminal, 回到刚刚的MySQL
mysql> UNLOCK TABLES;
mysql> quit
# 到此MASTER 设定就算完工, 也已经恢复上线了, 再下来就是SLAVE 啰~
ssh slave.hostname
$ scp master.hostname:DATABASE_NAME.sql
$ mysql -u root
mysql> CREATE DATABASE DATABASE_NAME;
mysql> use DATABASE_NAME;
mysql> source DATABASE_NAME.sql;
# 因为上述有加入--master-data 的命令, 所以CHANGE MASTER 等, 已经有自动加在档案的开头, 不过此CHANGE MASTER 并没有写MASTER 主机的资讯, 所以可于下述/etc/my.cnf设定, 或者去修改DATABASE_NAME.sql, 将CHANGE MASTER 加入主机资讯. (在此采用修改/etc/my.cnf 的作法)
mysql> quit
$ vim /etc/my.cnf
log-bin=mysql-bin
server-id = 3
master-host = MASTER_DB.HOSTNAME
master-user = repl
master-password = repl_password
master-port = 3306
$ sudo /usr/local/etc/rc.d/mysql-server restart # BSD 预设路径
$ mysql -u root
mysql> start slave;
mysql> show slave status \G
Mysql快速为线上的Master新增Slave节点