原理:

    主服务器将所有命令写入二进制日志当中,从服务器将主服务器中的二进制日志复制到中继日志中,在执行一遍,即实现复制。

 

复制的三个线程:

主服务器:Dump线程  提供数据给从服务器。

从服务器:I/O线程,从主服务器接受并写入中继日志中。

          SQL thread 从中继日志中读出数据,并执行一次,应用数据,写数据。

 

 

实现复制的个步骤:

1.改主从上的server-id ,主为1,从是不能为1的任意数

  主:vim /etc/my.cnf

     server-id = 1

  从:vim /etc/my.cnf

     server-id = 10

2.主启动二进制日志,从启动中继日志

    从启动中继日志:

      vim /etc/my.cnf

        relay-log=relay-bin

        relay-log-index=relay-bin.index  

    

3.在主服务器上建立复制用户账户,使之具有REPLICATION SLAVE和REPLICATION CLIENT的权限

  mysql>  GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO repl(用户)@'192.168.0.%' IDENTIFIED BY '123456(密码)'

   

   //// SHOW GRANT FOR rel@ '192.168.0.%';  显示用户

   

4.在从服务器上执行命令:

   mysql>CHANGE MASTER TO MASTER_HOST='server(主服务器的ip地址)',

       ->MASTER_USER='REPL'

       ->MASTER_PASSWORD='123456'   

       

   

   

5.启动从服务器进程:

  mysql> START SLAVE;

  

  mysql> SHOW SLAVE STATUS\G  查看从服务器的工作属性:

     当显示有:

        Slave_IO_Running:Yes

        Slave_SQL_Running:Yes

       时,表示从服务器正常启动

  

配置完成后,在主服务器上创建数据库和表后,从服务器上都会自动创建 。另外,当从服务器停止后,在主服务器上创建数据库和表后,在启动从服务器,从服务器上会自动创建数据库和表(因为从服务器中有CHANGE MASTER命令,且已经被记录下来),但可能会有一定的延时。

 

 

 

如果主服务器上已经有很多数据,而从服务器刚刚创建,可以使用如下方法进行备份:

 1.先将主服务器中的数据复制:

   # mysqldump --all-databases --lock-all-tables --master-data=2 > /root/slave.sql(复制到哪里)

 2.在从服务器中导入: 

   由于在root目录下mysql不能读取所以:

    #mv slave.sql /tmp

   然后读入:

    mysql> SOURCE /tmp/slave.sql

    mysql>CHANGE MASTER TO MASTER_HOST='server(主服务器的ip地址)',MASTER_USER='REPL',MASTER_PASSWORD='123456' ,MASTER_LOG_FILE='mysql-bin.000001',MASRER_LOG_POS=备份的位置

    mysql>START SLAVE;