首页 > 代码库 > 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节点