暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【日积月累】Mysql复制机制

老张的技术博客 2018-02-28
144

一、Mysql复制


mysql的复制由两个组件组成:主服务器和从服务器

mysql的复制是单向、异步的

支持链式复制


三种复制方式:

(1)基于语句的复制

将主服务器上的sql,传递到从服务器上执行。这种方式效率很高,一但没法精确复制,就会选择基于行的复制

(2)基于行的复制

把主服务器上改变的内容复制过去,而不是把sql语句在从服务器上执行。Mysql5.0才开始支持

(3)混合类型的复制


二、Mysql复制实现原理


涉及到三个线程:I/O线程(主服务器)、I/O线程(从服务器)、sql线程(从服务器)


复制过程如下:

(1)从服务器上的I/O线程连接主服务器,请求指定日志文件的位置和内容

(2)主服务器上的I/O线程收到请求之后,将日志内容和位置等信息返回给从服务器

(3)从服务器I/O线程接受到信息之后,将获取的日志依次转入中继日志文件(mysql-relay-bin),并将主服务器端的二进制日志文件名和位置记录到一个名为master-info文件中,以便在下一次读取时能迅速定位后读取增量

(4)从服务器sql线程解析中继日志文件中的内容为sql语句,放到从库中执行。


三、Mysql复制常用架构


一主一从、一主多从、主主复制、双主多从


注意:

1、同一时刻,只能有有一个主服务器进行写操作(写唯一)

2、一个主服务器可以有多个从服务器(可扩展)

3、主从服务器ID名要唯一(访问唯一)


四、主主互备架构


1、两台服务器护卫主从,同一时刻只有一个服务器可读写,另一个服务器只读

2、keepalived维持一个vip,正常情况下此vip在主服务器上,webserver 通过vip来对db1(主)进行读写,db2(从)于db1保持数据同步(类似于oracle中的dataguard),当db1出现故障无法ping通时,keepalived就会进行vip漂移到db2上(也就是主备库切换),这个切换相当迅速(几乎不会对webserver产生任何影响)


(1)修改my.cnf文件


server_id为服务器标识名,从服务器不能和主服务器相同。

log-bin为开启二进制日志功能,这里的日志格式定义为mysql-bin

relay-log为定义中继日志文件格式

replicate-wild-ignore-table为不复制哪些内容


(2)手动同步数据

上锁,防止配置过程中产生数据

flush tables with read lock

打包传输

cd var/lib/

tar zcvf mysql.tar.gz mysql

scp mysql.tar.gz 【从服务器IP】:/var/lib

从服务器上解压


(3)创建复制用户并授权

在db1 mysql库中创建复制用户

grant replication slave on *.* to 'repl_user'@139.199.131.193 identified by 'Cbl3S*D~p25~5R+';


查看复制状态,从中可以看到master_log_file、master_log_pos

show master status;


在db2 mysql库中将db1设为子机的主服务器

change master to \

master_host='139.199.111.35',

master_user='repl_user',

master_passwd='Cbl3S*D~p25~5R+',

master_log_file='mysql-bin.000003',

master_log_pos=749;


启动服务器复制进程

先在db2上启动从服务器

start slave

再在db1上启动主服务器

startslave


在db2 mysql库中创建复制用户

grant replication slave on *.* to 'repl_user'@[主库IP] identified by [passwd];


查看复制状态,从中可以看到master_log_file、master_log_pos

show master status;


在db1 mysql库中将db2设为子机的主服务器

change master to \

master_host=[从库IP],

master_user='repl_user',

master_passwd=[passwd],

master_log_file=[logfile_name],

master_log_pos=[logfile_num]


注意:

1、show  slave  status 中slave_IO_running和slave_sql_running中为yes则表明工作正常

2、不要在主库使用binlog-do-db或binlog-ignore-db选项,不要在从库使用replicate-do-db或replicate-ignore-db选项,这样可能会带来跨库更新失败




文章转载自老张的技术博客,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论