>  기사  >  데이터 베이스  >  MySQL互为主从复制详解----mysql-mm

MySQL互为主从复制详解----mysql-mm

WBOY
WBOY원래의
2016-06-07 17:11:42799검색

1)Slave启动I/O进程连接Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容2)Master接到请求后通过

原理讲述:
AB复制主要是通过两个slave进程(Sql和I/O进程)和Master的I/O进程完成的
复制过程主要是Slave从Master端获取该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作
复制过程三部曲:
1)Slave启动I/O进程连接Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容
2)Master接到请求后通过负责复制的IO进程将Master端的bin-log文件的名称 bin-log的位置以及日志信息返回给Slave
3)Slave收到信息后将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的
   bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉Master“我需要从
   某个bin-log的哪个位置开始往后的日志内容,请发给我”
   Slave的Sql进程检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在Master端真实执行时候
   的那些可执行的内容,并在自身执行

环境描述:最好两台机器的mysql版本完全相同
A:211.100.97.246  Linux  x86_64  mysql5.1.56
B:211.100.97.250  Linux  x86_64  mysql5.1.56

启动mysql进程
A 和 B均启动mysql进程


修改安全级别
关闭selinux,iptables允许两台机器之间的mysql端口互连
可以在/etc/sysconfig/selinux中设置参数selinux= disabled。
添加iptables -A INPUT -s SourceIP -p tcp --dport 3306 -j ACCEPT
修改完测试一下端口:
A: telnet B_IP 3306
B:  telnet A_IP 3306

 

创建账户
A: useradd repl1
B: useradd repl2
添加完查看账户信息
A: id repl1
B: id repl2


A:mysql配置文件
user=mysql
log-bin=mysql-bin
server-id = 1         
binlog-do-db=test
binlog-ignore-db=mysql
replicate-do-db=test
replicate-ignore-db=mysql
log-slave-updates
slave-skip-errors=all
sync_binlog=1
auto_increment_increment=2
auto_increment_offset=1


B:mysql配置文件
user=mysql
log-bin=mysql-bin
server-id = 2
binlog-do-db=test
binlog-ignore-db=mysql
replicate-do-db=test
replicate-ignore-db=mysql
log-slave-updates
slave-skip-errors=all
sync_binlog=1
auto_increment_increment=2
auto_increment_offset=1

说明:
server-id表示本机的序列号,如果为1的话一般代表master
binlog-do-db 表示需要备份哪个数据库,如果要备份多个数据库,应该添加多条记录
replicate-do-db 表示要同步的那个数据库
log-bin  表示开启binlog日志功能,,打开该选项才可以通过I/O进程将mater上的日志信息写入到Slave的relay-log
auto_increment_increment定义下一次AUTO_INCREMENT的步长
auto_increment_offset 定义AUTO_INCREMENT的起点值


授权用户【至少赋予FILE,SELECT,REPLICATION SLAVE权限】
A:允许B通过repl2账户与A同步数据
mysql> grant replication client on *.* to 'repl2'@'B_IP' identified by 'PASSWD';
mysql> flush privileges;
查看一下授权情况:
mysql> select * from mysql.user where host='repl1'@'B_IP'\G ;
*************************** 1. row ***************************
                 Host: 211.100.97.250
                 User: repl2
             Password: *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
          Select_priv: Y
          Insert_priv: Y
          Update_priv: Y
          Delete_priv: Y
          Create_priv: Y
            Drop_priv: Y
          Reload_priv: Y
        Shutdown_priv: Y
         Process_priv: Y
            File_priv: Y
           Grant_priv: Y
      References_priv: Y
           Index_priv: Y
           Alter_priv: Y
         Show_db_priv: Y
           Super_priv: Y
Create_tmp_table_priv: Y
     Lock_tables_priv: Y
         Execute_priv: Y
      Repl_slave_priv: Y
     Repl_client_priv: Y
     Create_view_priv: Y
       Show_view_priv: Y
  Create_routine_priv: Y
   Alter_routine_priv: Y
     Create_user_priv: Y
           Event_priv: Y
         Trigger_priv: Y
             ssl_type:
           ssl_cipher:
          x509_issuer:
         x509_subject:
        max_questions: 0
          max_updates: 0
      max_connections: 0
 max_user_connections: 0
1 row in set (0.00 sec)

linux

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.