mysql 主从复制

如果是A-->B-->C这样的复制模式,B的配置文件中要加上

log_slave_updates=1

Mysql主从复制

1.1Mysql主从复制原理

Mysql的复制是一个异步复制的过程,从一个主(master)的复制到另一个备(salve)的。在主备之间实现复制过程主要有三个线程来完成,其中两个线程(sql线程和IO线程)在备端,另一个线程(IO线程)在主端。

要实现主备之间的复制,首先要打开master端的二进制日志(mysql-bin.XXXXXX)功能。因为整个复制过程实际上就是slave从master端获取该日志然后再在自己身上按照顺序的执行日志中所记录的各种操作。

打开mysql的二进制日志可以通过在启动mysql server的过程中使用“-log-bin”参数选项,或者在my.cnf配置文件中的msyqld参数组([mysqld]标识后的参数部分)增加“log-bin”参数项。

如:log-bin=mysql-bin

1.2Msyql复制基本过程

Slave上的IO线程连接上master,并要求从指定日志文件的指定位置之后的日志内容;

Master接收到来自slave的IO线程的请求后,通过负责复制的IO线程根据请求信息读取指定日志指定位置之后的信息,返回给slave端的IO线程。返回信息中除了日志包含的信息之外,还包括本次返回的信息在master端的二进制日志文件的名称以及在二进制日志中的位置;

Slave的IO线程接收到信息后,将接收到的日志内容依次写入到slave端的Relay Log文件(mysql-relay-bin.XXXXXX)的最末端,并读取到的master端的bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉master“我需要某个bin-log的哪个位置开始之后的日志内容,请发给我”;

Slave的sql线程检测到Relay Log中新增加了内容后,会马上解析该Log文件中的内容成为在master端真实执行时候的那些可执行的Query语句,并在自身执行这些Query语句。这样就是在master和slave执行力同样的Query,所以两端的数据是完全一样的。

1.3Mysql主从复制实现过程

环境介绍:

服务器名

IP地址

数据库版本

Data目录

Master

192.168.2.98

Mysql-5.5.24

/servyou/app/mysql/data/

Slave

192.168.2.133

Mysql-5.5.24

/servyou/app/mysql/data/

1.4Master端设置

1)   修改my.cnf配置文件;

[mysqld] log-bin=mysql-bin 启动二进制文件 server-id=1 服务器ID #binlog-do-db=test需要同步的二进制数据库名 #binlog-ignore-db=mysql不需要同步的二进制数据库,如果不需要可注释掉

2)   重启mysql;

/etc/init.d/mysqld restart

3)   建立slave复制所需要使用的帐号,并授权给slave服务器;

mysql> grant replication slave on *.* to 'backup'@'192.168.2.194'  identified by 'backup';

4)   设置读锁,清除写入操作;

mysql>flush tables with read lock;

5)   获得二进制日志文件名和偏移量

mysql> show master status;

6)   备份数据库

mysqldump  test >  test.sql

7)   解锁;

mysql>unlock tables;

1.5Slave端设置

还原master端备份的数据库

1)  修改my.cnf配置文件

修改my.cnf配置文件

[mysqld] log-bin=mysql-bin 启动二进制文件 server-id=2 服务器ID #binlog-do-db=test需要同步的二进制数据库名 #binlog-ignore-db=mysql不需要同步的二进制数据库,如果不需要可注释掉

2)  执行同步

mysql> change master to master_host='192.168.2.179', master_user='backup', master_password='backup' ,master_log_file='mysql-bin.000032' ,master_log_pos=249279507;

3)  启动备服务器的slave线程

mysql> start slave;

4)  验证

mysql> show slave status\G;

看到上面的两个“Yes”说明同步成功。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏一枝花算不算浪漫

[Linux]Linux下redis的安装及配置.

30780
来自专栏L宝宝聊IT

Nagios监控系统应用示例

21860
来自专栏性能与架构

Mysql 读写分离中间件 MaxScale

MaxScale 是干什么的? 配置好了 Mysql 的主从复制结构后,我们希望实现读写分离,把读操作分散到从服务器中,并且对多个从服务器能实现负载均衡 读写分...

59850
来自专栏运维技术迷

centos7下卸载python后yum不能使用的恢复方法

手贱!本来是想把python2.7重新安装一下,结果直接remove了。然后使用yum install python的时候发现已经command not fou...

46760
来自专栏salesforce零基础学习

salesforce 零基础学习(六十四)页面初始化时实现DML操作

有的时候我们往往会遇到此种类似的需求:用户在访问某个详细的记录时,需要记录一下什么时候哪个用户访问过此页面,也就是说进入此页面时,需要插入一条记录到表中,表有用...

23180
来自专栏CaiRui

Mysql-14-mysql的日志管理

1.简介   日志文件记录着mysql数据库运行期间发生的变化,如:mysql数据库的客户端连接状况、sql语句的执行情况和错误信息等。当数据库遭到意外的损坏时...

23450
来自专栏linux运维学习

linux学习第十四篇:查看磁盘,文件大小命令:df,du;磁盘分区

df命令 df:查看已挂载磁盘的总容量、使用容量、剩余容量等,可以不加任何参数,默认是按k为单位显示的。 ? 带有tmpfs的都是临时的文件系统,所以在对应的挂...

24380
来自专栏开源优测

AutoLine开源平台安装部署教程

github地址:https://github.com/small99/AutoLine

12820
来自专栏LanceToBigData

MySQL集群(三)mysql-proxy搭建负载均衡与读写分离

前言 前面学习了主从复制和主主复制,接下来给大家分享一下怎么去使用mysql-proxy这个插件去配置MySQL集群中的负载均衡以及读写分离。 注意:这里比较坑...

47290
来自专栏小文博客

VUTLR定时创建快照(Take Snapshot)备份服务器

38250

扫码关注云+社区

领取腾讯云代金券