首页
学习
活动
专区
工具
TVP
发布

【日积月累】Mysql复制机制

一、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/

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选项,这样可能会带来跨库更新失败

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180228G1FAPX00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

加入 开发者社群

领取 专属20元代金券

Get大咖技术交流圈

扫码加入开发者社群
领券