MySQL复制之实践篇
本文主要以“一个主库,两个备库”代表“一个主库,多个备库”的拓扑结构来展示MySQL复制的实践过程。
拓扑结构:
主库创建复制账号:
grant replication slave,replication client on *.* to 'Jet'@'192.168.0.%' identified by 'JetWu@boyaa';
复制配置:
主库配置:
log_bin = mysql-bin
server_id = 11(每个服务器的server_id必须在拓扑中是唯一的)
重启mysql,使用命令show master status确认二进制日志文件是否已在主库创建:
备库1配置:
log_bin = mysql-bin
server_id = 21
relay_log = /var/lib/mysql/mysql-relay-bin
重启mysql
备库2配置:
log-bin="WJT-PC-bin.log"
server-id=22
relay_log="D:/wamp/mysqldata/Data/mysql-relay-bin"
重启mysql
告诉各个备库如何连接到主库并重放其二进制日志:
change master to master_host='192.168.0.113',master_user='Jet',master_password='JetWu@boyaa',
master_log_file='mysql-bin.000001',master_log_pos=0;
通过show slave status查看复制状态:
复制启动前:
复制启动后:
在各个备库开始复制:
start slave;
如无意外或错误,至此“一个主库,两个备库”拓扑结构的MySQL复制就已成功启动。主库会将造成数据更改
的查询记录入其二进制日志文件中,而备库1、备库2则会读取主库的二进制日志文件并写入各自的中继日志文
件中,然后重放其中记录的事件。
在备库上执行show processlist命令可以看到多了两个名为“system user”的线程,其中一个是负责读取主
库二进制日志并写入中继日志的I/O线程,另一个是读取中继日志并重放事件的SQL线程。
在主库上则可发现多了两个名为“Jet”的线程,也就是前面在主库上创建的复制账号。
基于语句复制:
若在备库上将某条记录的某个字段值修改,然后在主库上执行数据修改查询语句,以这一条记录中这个字段
原来的值作为修改条件,由于在备库上已经找不到拥有原来字段值的记录了,所以备库上的数据将不改变。
主键冲突导致复制中断:
先在备库上插入一条记录,然后在主库上插入一条和它主键一样的记录,这时备库上会因为SQL线程在重放
事件的时候遇到主键冲突而导致复制中断,主键冲突的记录将不被插入备库中,以后主库执行的数据更改再也无
法在备库上重放。从show processlist命令打印出的结果可以看到备库上已经少了SQL线程,从show slave status命令
打印出的结果的last_error列可以查看复制中断的原因。这时如果想要将备库重新连上主库,有两种方法:
1. 首先在备库上删除主键冲突的记录,然后再重启备库的mysql服务,或者先执行stop slave,然后start slave即可。
2. 在主库上使用mysqlbinlog工具查看当前二进制日志文件,找到冲突的位置,然后在备库上先stop slave,然后
再执行change master to命令将复制位置指定到跳过主键冲突的位置,最后start slave。相对于第一种方法,这种方
法不需要删除备库上冲突的记录。
MySQL复制之实践篇的更多相关文章
- 浅析MySQL复制
MySQL的复制是基于binlog来实现的. 流程如下 涉及到三个线程,主库的DUMP线程,从库的IO线程和SQL线程. 1. 主库将所有操作都记录到binlog中.当复制开启时,主库的DUMP线程根 ...
- MySQL复制环境(主从/主主)部署总结性梳理
Mysql复制概念说明Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves) ...
- MYSQL复制
今天我们聊聊复制,复制对于mysql的重要性不言而喻,mysql集群的负载均衡,读写分离和高可用都是基于复制实现.下文主要从4个方面展开,mysql的异步复制,半同步复制和并行复制,最后会简单聊下第三 ...
- mysql复制一列到另一列
mysql复制一列到另一列 UPDATE 表名 SET B列名=A列名 需求:把一个表某个字段内容复制到另一张表的某个字段. 实现sql语句1: 复制代码代码如下: UPDATE file_man ...
- MySQL 复制介绍及搭建
MySQL复制介绍 MySQL复制就是一台MySQL服务器(slave)从另一台MySQL服务器(master)进行日志的复制然后再解析日志并应用到自身,类似Oracle中的Data Guard. M ...
- 转mysql复制主从集群搭建
最近搭了个主从复制,中间出了点小问题,排查搞定,记录下来 1环境:虚拟机:OS:centos6.5Linux host2 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 ...
- MySQL复制表结构表数据
MySQL复制表结构 表数据 1.复制表结构及数据到新表CREATE TABLE 新表 SELECT * FROM 旧表这种方法会将oldtable中所有的内容都拷贝过来,当然我们可以用delete ...
- MySQL复制的基本概念和实现
MySQL的复制的概念是完成水平扩展的架构 MySQL性能方面的扩展方式有scale on(向上扩展,垂直扩展) scale out(向外扩展,水平扩 ...
- 理解MySQL——复制(Replication)
1.复制概述 1.1.复制解决的问题数据复制技术有以下一些特点:(1) 数据分布(2) 负载平衡(load balancing)(3) 备份(4) 高可用性(high avai ...
随机推荐
- PHP面向对象三大特性之一:封装
面向对象的三大特性:封装.继承.多态 1.封装 封装的目的:让类更加安全,做法是不让外界直接访问类的成员 具体做法:1.成员变为私有:访问修饰符(public.private.protected) ...
- 如何使用IntelliJ IDEA的Favorites来管理项目中的常用代码
http://www.cnblogs.com/deng-cc/p/6530279.html
- Zabbix 添加脚本检测IP变化
监控环境 IP和HOSTNAME 有时会有变化.但目前是通过IP地址监控,不是DNS名,添加一个外部脚本,发现IP和HOSTNAME发生变化时告警. vim /usr/local/etc/zabbix ...
- Java对象大小:size和retained size
最近看到网上很多文章讲如何计算java对象的大小(size),很多观点不敢苟同. 这是其中一篇比较靠前的文章,写的也比较全面: http://blog.csdn.net/iter_zc/article ...
- All about Div内显示滚动桥
Div内显示滚动桥看似是一个简单的前端问题,然而实际会发现还是有挺多需要注意的, 本文尝试对div内显示滚动桥的各种主要实现及一些难题进行研究. 横向滚动桥 横向滚动桥比较简单,无需设置宽度,直接ov ...
- 转换时间对象和字符串对象&添加时间
/* *基本思路,将字符串时间转化为时间对象,通过毫秒数来加减时间,然后在转化为字符串输出 */ //转化字符时间yy-mm-dd hh:mm:ss 为时间对象 使用split进行字符串的分割,取 ...
- js 各种循环的区别与用法(for in,forEach,for of)
1,forEach循环 不能跳过或者终止循环 const a = ["a","ss","cc"] a.dd="11" ...
- 如何用Python脚本从文件读取数据?
最近自学Python的进度比较慢,工作之余断断续续的看着效率比较低,看来还是要狠下心来每天进步一点点. 还记得前段时间陈大猫提了一口"先实现用python读取本地文件",碰巧今天看 ...
- ThinkPHP中:多个项目共享同一个session问题
使用ThinkPHP3.1.3版本的session时,多个项目同时调试会使得一维数组式的session不够用,导致在A项目登录后台后,在B项目就不用登录后台就可以进入后台操作了. 问题在于他们都调用同 ...
- 模糊搜索神器fzf
前言 fzf是目前最快的fuzzy finder.使用golang编写.结合其他工具(比如ag和fasd)可以完成非常多的工作. 让你通过输入模糊的关键词就可以定位文件或文件夹.当你的思维也习惯了模糊 ...