mysql的binlog日志有三种格式,分别为statement,mixed,以及row。

1.Statement:每一条会修改数据的sql都会记录在binlog中

优缺点:1)不用记录每一行的变化,日志量小(执行update table set column=xx,只需记录一条sql即可);

2)有些sql语句可能会跟数据库环境有关,比如登录用户等等数据,导致复制的时候数据出问题。

2.Row:不记录sql语句上下文相关信息,仅保存哪条记录被修改(默认的数据复制方式,通过show variables like 'binlog_format'命令查看)

优缺点:1)binlog日志会记录每一行数据修改的细节,不会使用和当前数据库环境相关的数据;

2)日志量较大(如执行update table set column=xx,会记录和表数据数量一样的日志记录)

3.Mixedlevel:是以上两种level的混合使用

mysql数据复制架构

一、主从架构(Master-Slave)

优缺点:

1)一台master对应多台slave,数据修改可在master操作,数据查询分别在2台slave中操作,主要用于读操作大于写操作的请情况,可提高数据库的查询性能;

2)如果slave比较多,会严重增加master数据库的压力,因为一台slave连上master时,会开启3个线程(Connection Thread 连接master的线程,IO Thread slave接受master二进制数据的线程, SQL Thread slave处理日志重放的线程);

3)可能会造成单点故障,因为master只有一台,如果master宕机之后,需要重新指定master;

4)slave库的数据会出现延时(延时时间为slave端运行show slave status时,Seconds_Behind_Master选项的值)。

实现步骤:(默认都是新装的机器,数据库中都没有数据)

1、安装3台mysql服务器,一台master,二台slave,master的端口是3307,二台slave的端口分别是3308、3309;

2、安装成功之后,修改master配置my.ini文件(假设master的服务名为mysqlmaster),我的配置如下:

[mysqld]

innodb_buffer_pool_size = 128M

#启用二进制日志

log_bin=mysql-bin

innodb_flush_log_at_trx_commit=1

#事物一提交,就必须同步二进制日志,这样会降低性能,但是数据比较重要

sync_binlog=1

#服务器ID不能重复

server_id=10

#需要做主从备份的数据库名字

#binlog-do-db=test_custer

#只保留7天的二进制日志,以防磁盘被日志占满

expire-logs-days=7

#mysql的安装目录

basedir=D:\mysqlcuster\mysqlmaster

#mysql数据存放目录

datadir=D:\mysqlcuster\mysqlmaster\data

port=3307

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

#服务端的编码方式

character-set-server=utf8

[client]

port=3307

default-character-set=utf8

3、使用net start mysqlmaster启动master服务器,启动成功之后,登录mysql,命令为mysql -uroot -p -P3307;

4、在master中创建用于复制的账号,账号名、密码、ip可修改:grant replication slave on *.* to repl_user@127.0.0.1 identified by 'repl_password';

5、修改slave的my.ini文件配置,以其中一台slave为例,配置如下:

[mysqld]

innodb_buffer_pool_size = 128M

#需要做复制的数据库名

#replicate-do-db=test_custer

#服务器id

server_id=2

#自动跳过的表,session表没必要做复制

#replicate-ignore-table=dzx2.pre_common_session

#自动跳过的错误代码,以防复制出错被中断

#slave-skip-errors=1032,1062,126,1114,1146,1048,1396

#避免从库意外崩溃,导致数据重复复制

sync_master_info=1

basedir=D:\mysqlcuster\mysqlslave

datadir=D:\mysqlcuster\mysqlslave\data

port=3308

#设置从节点只读,防止从节点写入数据,导致主从数据库数据不一致

read_only=1

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

#服务端的编码方式

character-set-server=utf8

[client]

port=3308

default-character-set=utf8

6、使用net start mysqlsalve启动salve服务器,启动成功之后,登录mysql,命令为mysql -uroot -p -P3308和mysql -uroot -p -P3309;

7、在master端输入show master status,得到查询结果file和position;

8、在slave设置master的信息

change master to master_host='master的ip',

master_user='master创建的复制账号',

master_password='master创建的复制账号用户名',

master_port=master的数据库端口,

master_log_file='master运行show master status的结果中的file字段值',

master_log_pos=master运行show master status的结果中的position字段值';

9、在slave端运行start slave,之后再运行show slave status\G;如果查询结果中的Slave_IO_Running、Slave_SQL_Running的值都为yes,表示环境设置成功,如图所示

10、测试。在master中创建test_custer数据库和test表,查看slave数据库也会存在test_custer数据库和test表。

二、主主架构(Master-Master)

master-master模式和master-slave模式差不多,需要在2台master中打开二进制文件,只是master-master模式中,存在2台主机,2台主机均可执行读写操作,这种模式有个缺点就是怎么保证数据完整性,因为2台主机均可执行写操作,可能会存在一部分数据存放在master1,另一部分数据存放在master2中,如果master1宕机了,整个数据库环境的数据也就不完整了。

三、主从从架构(Master-Slave-Slave)

优点:1)减轻master的复制压力;

2)master宕机后,slave可充当master角色,可避免单点故障

步骤:(master-slave-slave2,即slave充当slave2实例的master角色)

1)修改master配置文件my.ini,同上;

2)修改slave、slave2配置文件,同上。不过需要在slave服务器配置文件中新加2项配置

#二进制日志文件

log_bin=myslave-bin

#从服务器从主服务器接收到的更新记入到slave的二进制日志

log_slave_updates=1

3)分别启动master、slave、slave2服务器

4)登录master服务器,输入show master status;命令,查看file和position字段的值

5)登录slave服务器,指定master服务器

6)在slave服务器中输入start slave;命令,之后再运行show slave status\G;如果查询结果中的Slave_IO_Running、Slave_SQL_Running的值都为yes,表示环境设置成功,如图所示

7)在slave服务器中运行show master status,查看file和position字段的值

8)启动slave2服务器,设置slave2服务器对应的主服务器的信息

9)在slave2服务器中输入start slave;命令,之后再运行show slave status\G;如果查询结果中的Slave_IO_Running、Slave_SQL_Running的值都为yes,表示环境设置成功,如图所示

10)测试。在master上的test表中添加数据,如果master、slave、slave2服务器均有新插入的数据,表示成功

11)停止master服务器,然后在slave服务器中添加数据,如果slave2服务器的数据库中有新添加的数据,表示slave2的主服务器就是slave服务器

mysql二进制日志文件差不多_mysql数据同步-基于二进制日志文件和position复制点的方式...相关推荐

  1. mysql 定时同步数据_MySQL数据同步之otter

    一.otter介绍 基于日志数据,用于MySQL或者ORACLE之间准实时同步数据. 用途: mysql/oracle互相同步 中间表/行记录同步 二.原理及架构图 otter整体模块 manager ...

  2. mysql otter 数据同步_MySQL数据同步之otter

    一.otter介绍 基于日志数据,用于MySQL或者ORACLE之间准实时同步数据. 用途: mysql/oracle互相同步 中间表/行记录同步 二.原理及架构图 otter整体模块 manager ...

  3. mysql sync es 异步双写_mysql数据同步es方案思考

    在线QQ客服:1922638 专业的SQL Server.MySQL数据库同步软件 大体计划 1.双写 矫捷长处:简略. 错误谬误: a.停业代码耦合严重. b.如何保证双写成功 c.同步双写会增加响 ...

  4. mysql数据导入导出 CSV格式_mysql数据一键导出到csv文件

    在数据库中获取数据的结果集,通过fputcsv() 函数将行格式化为 CSV 并写入一个打开的文件. fputcsv('打开的文件','数组数据'),该函数返回写入字符串的长度.若出错,则返回 fal ...

  5. mysql 同步设置密码_mySQL数据同步设置

    使用的mysql版本:mysql4.0.X master: 192.168.1.102 slave:    192.168.1.109 如果是win机子修改c:\winnt\my.ini 如果是lin ...

  6. mysql如何查看事务日记_MySQL中的几种日志了解

    前言 MySQL中有以下日志文件,分别是: 1:重做日志(redo log) 2:回滚日志(undo log) 3:二进制日志(binlog) 4:错误日志(errorlog) 5:慢查询日志(slo ...

  7. mysql innodb文件存储_MySQL数据库和InnoDB存储引擎文件

    参数文件 当MySQL示例启动时,数据库会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等.在默认情况下,MySQL实例会按照一定 ...

  8. 【技术实现】java实时同步postgresql变更数据,基于WAL日志

    [技术实现]java基于WAL日志订阅获取postgresql实时变更数据 一.前言 二.WAL日志 三.逻辑解码和逻辑复制 四.准备工作 五.实现步骤(代码示例) 五.总结 一.前言 在以往的工作中 ...

  9. mysql两台服务器怎么做数据同步_两台mysql服务器实现双机互备配置并测试数据同步...

    对于实现两台机子的互备配置,本文作出了详细的介绍,之后的测试数据同步,在10.168.1.44服务器数据库里修改一条数据, 可以看到数据已经同步过来了.反过来,修改10.168.0.126的数据,也可 ...

最新文章

  1. 小白成长之路_LeetCode刷题记录
  2. php array的实现原理,PHP数组遍历与实现原理
  3. php判断日期为空值,php判断值是否为空实例代码
  4. Red Hat忘记root密码,重置root管理员密码
  5. 分析.cpp文件编译生成的汇编文件里语句的作用
  6. Ruby编程语言学习笔记4
  7. spark学习-SparkSQL-SparkSession与SparkContext
  8. TCP/IP网络编程(2)
  9. ssm框架从前端传值到后台出现乱码的解决办法,你遇到的可能就是这几种
  10. 面向对象之自动生成助记码
  11. 2020-06-21
  12. 免费证件照制作的软件有哪些?来看看这几个好用的软件
  13. 《Spring揭秘》知识点总结
  14. java初级面试总结
  15. 一文彻底看懂成交量的本质
  16. gym101964 G.Matrix Queries(思维+线段树)
  17. JS学习之路系列总结二阴阳阵(此文犹如武林之中的易筋经,是你驰骋IT界的武功心法,学会JS五大阵法就学会了JS,博主建议先学三才阵)
  18. 【整理】C#中GridView隐藏指定列的方法
  19. 动态规划:奶牛吃草问题
  20. 【CSDN下载】第二期:Xcode iOS真机镜像包、人脸探测与识别源码资源

热门文章

  1. 安装suricata
  2. RxJava2 / RxAndroid2的merge操作合并多个Observable
  3. linux命令: tree的c实现
  4. 性能测试之开源的性能监控软件
  5. 快速增强路由器安全的十个小技巧
  6. 全国默哀 网站首页都要变成灰色的简单解决办法
  7. CSW是怎样用极端化来分裂BCH社区的
  8. 美国政府机构成为接受比特币和比特现金支付税金的政府机构
  9. Tensorflow nmt源码解析
  10. SQL Server-聚焦事务、隔离级别详解(二十九)