mysql     主从复制

MySQL复制其实就是把数据从一个节点(master) 拷贝到另一个节点(slaves), 当然根据应用架构的不同,采用的方式也不同,MySQL服务器之间的复制使用的是二进制日志机制。
 

实验环境

rhel 5.8   +    mysql-5.5.28-linux2.6-i686.tar.gz

主    172.16.111.1

从    172.16.111.123

首先在两台机器上安装mysql   测试可以正常启动

mysql主从复制_第1张图片
复制原理:
         1, 主服务器将开启一个dump线程     作用是将二进制日志中的数据读取出来发送给
            从服务器中的I/O线程

         2,从服务器的I/O线程接受到dump线程发送过来的数据并且写入本地的中继日志中
            一旦中继日志中有了新的数据从发服器将启动另一个线程     SQL线程
            SQL线程作用     读取中继日志中新增的数据并逐行在数据库中执行
            从而完成主从复杂
   


配置如下:

主服务器配置
vim /etc/my.cnf

server-id = 1          可以修改默认也可以     但是一定要和从服务器的id 不一样
                              这里默认  一会去修改从服务器的server-id

二进制日志          一定要开启默认都是开启的


授予一个用户具有复制权限
mysql> grant replication slave,replication client on *.* to kaka@'172.16.111.123' identified by 'kaka';


从服务器配置
vim /etc/my.cnf

修改server-id = 10

二进制日志          这里可以关闭     因为这是复制过来的数据没必要将这些数据再写入二进制中
                              开启也可以

开启中继日志     relay-log=relay-bin
                             relay-log-index=relay-bin.index


查看主服务器使用的二进制日志 及位置

mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 |      190 |              |                  |
+------------------+----------+--------------+------------------+


进入mysql     执行如下命令

mysql> change master to master_host='172.16.111.1', master_user='kaka', master_password='kaka', master_log_file='mysql-bin.000004', master_log_pos=190;

指定主服务器的ip地址     具有复制权限的用户名和密码     以及从哪个二进制日志的什么位置开始复制

mysql> start slave;     开启从服务器线程

查看从服务器信息

   
   
   
   
  1. mysql> show slave status\G;  
  2. *************************** 1. row ***************************  
  3.                Slave_IO_State: Waiting for master to send event  
  4.                   Master_Host: 172.16.111.1 
  5.                   Master_User: kaka  
  6.                   Master_Port: 3306 
  7.                 Connect_Retry: 60 
  8.               Master_Log_File: mysql-bin.000004 
  9.           Read_Master_Log_Pos: 273 
  10.                Relay_Log_File: relay-bin.000002 
  11.                 Relay_Log_Pos: 336 
  12.         Relay_Master_Log_File: mysql-bin.000004 
  13.              Slave_IO_Running: Yes  
  14.             Slave_SQL_Running: Yes  
  15.               Replicate_Do_DB:  
  16.           Replicate_Ignore_DB:  
  17.            Replicate_Do_Table:  
  18.        Replicate_Ignore_Table:  
  19.       Replicate_Wild_Do_Table:  
  20.   Replicate_Wild_Ignore_Table:  
  21.                    Last_Errno: 0 
  22.                    Last_Error:  
  23.                  Skip_Counter: 0 
  24.           Exec_Master_Log_Pos: 273 
  25.               Relay_Log_Space: 486 
  26.               Until_Condition: None 
  27.                Until_Log_File:  
  28.                 Until_Log_Pos: 0 
  29.            Master_SSL_Allowed: No  
  30.            Master_SSL_CA_File:  
  31.            Master_SSL_CA_Path:  
  32.               Master_SSL_Cert:  
  33.             Master_SSL_Cipher:  
  34.                Master_SSL_Key:  
  35.         Seconds_Behind_Master: 0 
  36. Master_SSL_Verify_Server_Cert: No  
  37.                 Last_IO_Errno: 0 
  38.                 Last_IO_Error:  
  39.                Last_SQL_Errno: 0 
  40.                Last_SQL_Error:  
  41.   Replicate_Ignore_Server_Ids:  
  42.              Master_Server_Id: 1 
  43.  

Slave_IO_Running: Yes
Slave_SQL_Running: Yes 

这两个线程已经启动  OK

=================================================

注意事项:
   主:开启二进制日志(默认)  
     保证server-id不于从服务器相同
     创建复制权限用户
   从:关闭二进制日志 开启中继日志
     同样server-id不能相同
     
如果数据库中已有运行的数据 需要在主服务器上做一次完全备份
恢复到从服务器中
然后指定主服务器二进制日志和事件位置开始复制