4.mysql学习笔记:mysql的复制(一)

原创 2015年11月20日 11:17:23

mysql的复制

复制概述

复制要解决的一个基本问题是服务器之间数据的同步,一个master(主库)的数据可以同步到多个备库(slave)上。而且其中一个备库也可以配置成令一个服务器的主库。

mysql支持两种复制方式:

1.基于行的复制
2.基于语句的复制

两种方式都是在主库上记录二进制日志,在备库上重放日志的方式来实现异步的数据复制的(mysql还支持半同步复制,不过效率要略低于异步复制)。这个方式可能会导致备库(slave)上的数据可能与主库(master)上的有所延迟。

一般来讲:msyql的复制大部分是向后兼容的,也就是说新版本的服务器要作为老版本的备库(slave),因为旧版的不一定能够支持新的特性。


复制需要解决的问题

复制常见的用途有:

1.数据分布
2.负载均衡

通过mysql的复制可以将读操作分布到多个服务器上,实现对读密集型应用的优化。

可以采用的技巧是:
(1)DNS轮询
(2)LVS(linux虚拟服务器)

3.高性能和故障分析
帮助应用程序避开单点故障
4.mysql升级测试


复制的如何工作

mysql的复制包含有三个步骤:

1.在主库(master)上把数据更改记录到二进制日志中(Binary Log),这些记录被成为二进制日志事件。
2.备库(slave)将主库上的日志复制到自己的中继日志(Relay Log)中。
3.备库读取中继日志中的事件,将其放到备库数据之上。

如下图所示:
这里写图片描述

注意:mysql会根据事务提交的顺序而非每条语句的执行顺序来记录二进制日志


配置复制

为mysql服务器配置复制一般分为以下几个步骤:

1.在每台服务器上创建复制帐号
2.配置主库(master)和备库(slave)
3.通知备库(slave)连接到主库(master)并从主库复制数据

准备:
主库(master): 192.168.3.245 (server5.example.com)
备库(slave): 192.168.3.242 (server2.example.com)


创建复制帐号

mysql会赋予一些特殊的权限给复制线程,在备库(slave)运行的I/O线程会建立一个到主库(master)的TCP/IP链接,所以就要求我们必须在master上建立一个用户,并赋予其合适的权限,slave通过该用户连接到主库并读取日志。

在192.168.3.245和192.168.3.242做如下操作:

192.168.3.245(master):
这里写图片描述

192.168.3.242(slave):
这里写图片描述

注意:为什么在slave也要创建复制帐号,其中一个好处就是后续如果有需要的话可以方便的交换主备库的角色。


配置主库(master)和备库(slave)

在192.168.3.245(master)mysql的配置文件/etc/my.cnf上做如下修改:

[root@server5 ~]# vim /etc/my.cnf
这里写图片描述

重起192.168.3.245上的mysql服务:
这里写图片描述

确认二进制日志文件已经在master上建立,使用show master status命令:
这里写图片描述


在192.168.3.242上做如下配置:

[root@server5 ~]# vim /etc/my.cnf

这里写图片描述

relay_log 为中继日志的位置和名称
log_slave_updates 允许备库将其重要的事件也记录到自身的二进制日志中
read_only 阻止没有任何特殊权限的线程修改数据(通常不是十分使用,特别针对那些需要建表的应用)

重起mysql数据库:
这里写图片描述


启动复制

备库连接到主库并重放其二进制文件:
这里写图片描述

可以看到Slave_IO_State、Slave_IP_Running、Slave_SQL_Running这三个显示当前备库复制尚未运行。

开始复制:
这里写图片描述

执行该命令没有显示错误,查看状态发现已经开始运行,等待主库更改日志信息。

在主库中做一些修改操作,可以看到备库的文件和日志位置都有可能会增加:

我们在主库中创建了数据库haha:
这里写图片描述

然后查看备库中也多了一个数据库haha,说明复制是成功的:
这里写图片描述

在master中显示进程列表,可以看到id2的进程发送了二进制日志给slave:
这里写图片描述

在slave中也会看到有两个线程在进行处理:
这里写图片描述

小结:
至此,我们通过一个简单的示例介绍了mysql的复制过程,在接下来的章节里将会着重介绍mysql的多种使用和复制原理。敬请期待。

版权声明:本文为博主原创文章,未经博主允许不得转载。

MySQL学习笔记4:完整性约束

完整性约束是对字段进行限制,从而符合该字段达到我们期望的效果 比如字段含有默认值,不能是NULL等 直观点说:如果插入的数据不满足限制要求,数据库管理系统就拒绝执行操作   设置表的主键 主...

MySQL学习笔记(4)

MySQL中的InnoDB引擎所用到的索引算法,树的相关知识。
  • daj14
  • daj14
  • 2017年06月01日 18:36
  • 98

MySQL学习笔记4:操作数据表中的记录(增删改查)

MySQL操作数据表中的记录(增删改查)

《PHP和MySQL Web开发》学习笔记:4~5章

这中间又隔了这么多天,今天才继续记录第4~5章…… 1、字符串操作和正则表达式 * 去除空格或其他字符:trim()、ltrim()、rtrim()即chop(); * 使用HTML格式化:nl2...
  • shhider
  • shhider
  • 2014年03月09日 11:20
  • 678

修改阿里云MySQL密码的问题---Linux学习笔记(4)

1、关闭mysql服务 # service mysql stop 如果提示mysql: unrecognized service这样的错误提示。 先查...

Hibernate4学习笔记(一): 生成mysql数据库表

是一个hibernate完成mysql实体类到数据库表字段的映射。

MySql 基础学习笔记 1——概述与基本数据类型: 整型: 1)TINYINT 2)SMALLINT 3) MEDIUMINT 4)INT 5)BIGINT 主要是大小的区别 图 浮点型:命令

一、CMD中常用mysql相关命令 mysql -D, --database=name  //打开数据库 --delimiter=name  //指定分隔符 -h, --host=nam...
  • sjyhehe
  • sjyhehe
  • 2015年03月13日 15:34
  • 925

MySQL学习笔记4:完整性约束

MySQL学习笔记4:完整性约束 完整性约束是对字段进行限制,从而符合该字段达到我们期望的效果 比如字段含有默认值,不能是NULL等 直观点说:如果插入的数据不满足限制要求,数据库管...

高性能MySQL学习笔记(4) —— 事务隔离级别

事务隔离级别事务的ACID属性中的隔离性,如何实现呢?在SQL标准中定义了四种隔离级别。 但要注意,标准中定义的这四个级别,在实际上各个存储引擎的实现是不尽相同的,有些细节地方还是不一样的,学习的时...

linux学习笔记4:linux的任务调度,进程管理,mysql的安装和使用,ssh工具的使用,linux网络编程

1、设置任务调度命令crontab 任务调度是指系统在某个时间执行的特定的命令或程序。任务调度分为:1)系统工作:有些重要的工作必须周而复始的执行,如病毒扫描。2)个别用户工作:个别用户可能希望执行某...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:4.mysql学习笔记:mysql的复制(一)
举报原因:
原因补充:

(最多只允许输入30个字)