MySQL复制(一) --- 二进制日志干什么的

标签: mysql 复制 二进制 | 发表时间:2011-10-26 09:54 | 作者:foxracle We_Get
出处:http://www.cnblogs.com/

与小站点相比,大型站点的数据库管理员,需要提前做好以下的事情:

  • 提供灾难发生时核心业务数据的恢复计划。理论上这个过程至少需要执行一次。
  • 通过采集大量用户数据并监控网站各节点的负载,提供优化计划
  • 当用户数量急剧增长时的快速横向扩展计划
对于所有这些事情,提前计划并准备好必要时的快速应对是很重要的。

为了保证站点可响应和可用性,需要做两件事:系统的数据备份和冗余。备份可以将节点恢复到它崩溃之前的状态,备份根据需求有几种比如及时恢复(PITR:point-in-time-recovery),在线备份等等;而冗余则保证即使在一个或更多节点停止服务的情况下,站点仍能继续运行,备份一般通过硬件副本来实现,让几个实例并行运行,并通过复制在几个机器上保存相同数据的多个可用副本。复制的主要应用场景:1)针对高读写比的,scale out;2)添加冗余保证高可用性,比如双主配置(dual-master setup)。

二进制日志(binlog)

复制过程需要二进制日志。二进制日志的目的是记录数据库中表的更改,然后用于复制和PITR,另外少数审计情况下也会用到。

传统意义上说,MySQL复制记录了产生变化的SQL语句,称为基于语句的复制(statement-based replication)。基于语句的复制的缺点是无法保证所有语句都正确复制。所以在5.1版本中,MySQL还提供了基于行的复制(row-based replication)。

查看二进制日志:

# 强制把缓存的东西刷到LOGS中,并产生一个Rotate事件写入binlog中
FLUSH LOGS;

# 正常使用很久的DB不建议使用这个命令,需要加参数,指定具体的binlog文件名 【IN 'xxxx'】
SHOW BINLOG EVENTS\G

二进制日志中事件所包含的字段:

Event_type: 比如Format_desc, Query, Rotate
Server_id : 创建事件的服务器id
Log_name : 存储事件的文件名,一个事件只能存储在一个文件中
Pos : 事件在文件中的开始位置,及事件的第一个字节
End_log_pos:事件在文件中的结束位置,也就是下一个事件的开始位置
Info : 具体事件的信息,Query的时候就是SQL语句

二进制日志的结构和内容:

二进制日志不是一个的单独的文件,它包括一组存储实际内容的二进制日志文件和一个二进制日志索引文件。每个二进制日志文件都以format description event开始,以rotate event结束。rotate event包含下一个二进制日志文件的名称,以告知二进制日志继续写入哪个文件。因此FLUSH LOGS的时候会新建一个新binlog文件。 

获取当前正在写入的是哪一个二进制日志文件:

SHOW MASTER STATUS\G

RESET MASTER命令删除了所有的二进制日志文件并清空了二进制日志索引文件。RESET SLAVE命令删除了Slave复制所用的所有文件,重新开始。

CHANGE MASTER TO命令用于改变slave连接master的一些参数,其中就包括slave读取master二进制日志文件的参数。比如使用MASTER_LOG_FILE和MASTER_LOG_POS来指定master开始发送事件的binlog位置。

如何建立新Slave

1:配置新的Slave
2:备份Master(或者备份已经复制了Master的Slave)
3:接下该备份相应的binlog位置
4:在新Slave上恢复备份
5:配置Slave从这个binlog位置开始复制

区别就在于第二步,一种是直接从Master进行备份,一种是通过现有Slave备份,下面分别介绍两种。

1:克隆Master:

# 刷新所有的表并锁定数据库,防止在检查binlog位置之前数据库发生改变
FLUSH TABLES WITH READ LOCK

# 获取当前的binlog文件和pos
SHOW MASTER STATUS\G

# 备份master
mysqldump --all-databases --host=master-1 >backup.sql

# 解锁
UNLOCK TABLES;

# 在slave上恢复备份
mysql --host=slave-1 <backup.sql

# 配置slave
CHANGE MASTER TO
MASTER_HOST = 'master-1',
MASTER_PORT = 3306,
MASTER_USER = 'slave-1',
MASTER_PASSWORD = 'xxxx',
MASTER_LOG_FILE = 'master-bin.000042',
MASTER_LOG_POS = 546552;

# 启动slave
START SLAVE;

其实mysqldump命令提供了master_data选项,自动把MASTER_LOG_FILE和MASTER_LOG_POS信息dump到backup.sql中

另外:FLUSH TABLES WITH READ LOCK对于InnoDB是不安全的,因为虽然会锁表,不会产生新事务,但是后台仍然有一些活动在继续进行。

所以安全的创建InnoDB数据表的备份可以使用下面的方法。

1:关闭服务器,然后复制文件。如果数据库很大 ,最好采取这种方法,因为这时使用mysqldump进行数据恢复会很慢

2:执行FLUSH TABLES WITH READ LOCK之后,使用mysqldump

3:执行FLUSH TABLES WITH READ LOCK之后,使用快照的方法,比如LVM(Linux),ZFS(Solaris)快照

2:克隆Slave:

# 防止出现不一致的备份映像,备份Slave之前需要先停止replication
STOP SLAVE;

# 确定从哪里开始复制,注意Relay_Master_Log_File和Exec_Master_Log_Pos
SHOW SLAVE STATUS\G

# 配置新的slave,指向master
CHANGE MASTER TO
MASTER_HOST = 'master-1',
MASTER_PORT = 3306,
MASTER_USER = 'slave-1',
MASTER_PASSWORD = 'xxxx',
MASTER_LOG_FILE = 'master-bin.000042',
MASTER_LOG_POS = 546632;

# 启动新的slave
START SLAVE

作者: foxracle 发表于 2011-10-26 09:54 原文链接

评论: 1 查看评论 发表评论


最新新闻:
· 亚马逊挑战苹果付出代价 市值缩水200亿美元(2011-10-26 20:25)
· LG称四季度手机业务利润率将提升(2011-10-26 20:23)
· 谷歌向德国一互联网研究中心资助450万欧元(2011-10-26 20:21)
· 诺基亚宣布两款Mango手机(2011-10-26 20:18)
· 谷歌宣布Nexus系统升级至4.0 Nexus One遭遗弃(2011-10-26 20:15)

编辑推荐:新起点:诺基亚 Windows Phone 发布总结

网站导航:博客园首页  我的园子  新闻  闪存  小组  博问  知识库

相关 [mysql 复制 二进制] 推荐:

MySQL复制(一) --- 二进制日志干什么的

- We_Get - 博客园-首页原创精华区
与小站点相比,大型站点的数据库管理员,需要提前做好以下的事情:. 提供灾难发生时核心业务数据的恢复计划. 理论上这个过程至少需要执行一次. 通过采集大量用户数据并监控网站各节点的负载,提供优化计划. 当用户数量急剧增长时的快速横向扩展计划. 对于所有这些事情,提前计划并准备好必要时的快速应对是很重要的.

mysql主从复制

- - SQL - 编程语言 - ITeye博客
从库的配置,mysql5.5不支持配置文件的配置了,问了数据库的人,用命令行指定. 修改从库的配置 #default-storage-engine = InnoDB #修改 default-storage-engine = blackhole server-id = 11215004 #新增 replicate-do-db = test log-bin = mysql-bin #新增 binlog_format = row.

MySQL主从复制配置

- - 天空极速
在实际企业应用环境当中,单台MySQL数据库是不足以满足日后业务需求的. 譬如服务器发生故障,没有备份服务器来提供服务的话,业务就得停止. 使用MySQL主从复制的好处有:. 1、采用主从服务器这种架构,稳定性得以提升. 如果主服务器发生故障,我们可以使用从服务器来提供服务;. 2、在主从服务器上分开处理用户的请求,可以提升数据处理效率;.

MySQL 5.6 测试之 Replication(主从复制)

- - MySQL 中文网 -
MySQL 5.6测试之Replication. MySQL 5.6版本相比以前新增了很多令人激动的特性,简要介绍见: 转:MySQL 5.6新特性. 性能方面已经做过测试了,详细请见: MySQL 5.6 vs MariaDB 5.5 vs Percona(5.5 & 5.6) 之TPCC性能测试.

MySQL半同步复制(Semisynchronous Replication)

- - IT技术博客大学习
MySQL5.5引入了半同步复制(Semi-synchronous Replication),以下是对于半同步复制的认知和理解:. 半同步启动需要主从两端都需要加载安装各自对应的semi模块,从库端支持半同步功能的数量至少一台;主库端当一个事务成功提交后,并不及时反馈给前端用户,该线程会被临时block,等待由从库端返回确认该条事务也同时成功写入到relay log中的receipt(回执确认),这时主库线程才返回给当前session告知操作完成,半同步复制并不关心在从库一端该事务是否都被执行并被提交完成.

[玩转MySQL Replication] 复制拓扑

- - CSDN博客数据库推荐文章
     朴实简单的才是真、那些高端洋气的复制拓扑纯属自虐.      实施复制大概会有 4 个原则:.      ① 一个主库可以有多个备库.      ② 一个备库只能有一个主库.      ③ 每个备库 Server ID全局唯一.      ④ log_slave_updates 有薪火相传之效用.

MySQL主从复制与读写分离

- - 数据库 - ITeye博客
MySQL主从复制与读写分离. MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践. Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过. 但在实际的生产环境中,由单台Mysql作为独立的数据库是完全不能满足实际需求的,无论是在安全性,高可用性以及高并发等各个方面.

MySQL数据库复制概论

- - Float_Luuu的博客
每当我们讨论一项(新的)领域技术的时候,最好的方式通常是首先抛出一些问题,这些问题大致分为三类:诶. 这项技术又是什么玩意(What)?这项技术为什么会存在. 我们已经有那么多解决方案(Method)了,我们问什么要用它(Why). 如果这项技术那么好且我们正好有场景可以用到这项技术,且能使我们的系统得到很乐观的优化,那么我们怎么用呢(How).

MySQL Gtid复制方案学习

- - 小火箭
MySQL从5.6开始出了新的主从复制解决方案: Replication with Global Transaction Identifiers. 在整个复制集群中能够唯一的标识一个事务. 确保同一个事务只会被执行一次. 无法使用 CREATE TABLE. SELECT statements语句.