位置: 编程技术 - 正文

MySQL对数据库数据进行复制的基本过程详解(mysql 数据库)

编辑:rootadmin

推荐整理分享MySQL对数据库数据进行复制的基本过程详解(mysql 数据库),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:对mysql数据库的简单认识,数据库mysql语句,mysql数据数据库,mysql数据数据库,数据库mysql语句,mysql的数据,mysql对数据的操作主要有什么,mysql数据库sid,内容如对您有帮助,希望把文章链接给更多的朋友!

复制

复制是从一个MySQL服务器(master)将数据拷贝到另外一台或多台MySQL服务器(slaves)的过程.复制是异步进行的--slaves服务器不需要持续地保持连接来接收master的数据.依据配置的不同,可以复制所有数据库,或指定的数据库,甚至是某一数据库指定的表.

使用复制功能的目的在于:

向外扩展的解决方案 -- 通过在多台服务器之间分散负载来提高性能.在这种环境下,所有写和更新操作都在master服务器上进行,而读操作则发生在一台或多台slaves服务器上.数据安全 -- 因为数据是被复制到slave上的,并且slave可以暂停复制过程,因此可以在不破坏master数据的前提下在slave服务器上进行备份分析 -- 实时数据在master上创建,然而数据分析却可以slave服务器上进行,且不会影响master的性能长距离数据分布 -- 如果分公司需要主公司的数据复本进行工作,就可以通过复制创建一个本地复本,从而不需要长久地访问master服务器 MySQL的复制是单向异步的,这与MySQL Cluster的同步复制特性正好相反.MySQL5.5支持半同步(semisynchronous),即在master上的提交之后,并不是立即返回,而是等待至少有一个slave确认说已经收到和记录了当前事务之后,再返回.

最好的复制方法与数据的展现方式及所选择的存储引擎有关,核心的复制格式有两种:SBR(Statement Based Replication) -- 复制所有的SQL语句,和RBR(Row Based Replication) -- 仅复制被改变的rows. 当然也有最三种方案可供选择:MBR(Mixed Based Replication),这也是MySQL5.5之后版本的默认模式.

复制配置

MySQL服务器之间的复制使用的是二进制日志机制.对master的更新与变动都会作为事件(event)记录在日志中,日志中的信息会随变化的不同被记录成不同的格式.slaves被配置成从master读取日志,并且执行二进制日志中的事件到slave本地数据库.一旦master启动二进制日志功能,那么所有语句操作都会被记录下来,每一个slave会收到一份整个日志内容的拷贝.slave的责任就是决定日志中的哪条语句需要被执行,而我们不能通过配置master来仅仅记录某些特定的事件.如果您没有另行指定,在主服务器二进制日志中的所有事件都在slave上执行.如果需要,还可以配置slave仅应用来自于特定数据库或表的事件.

每个slave都会保持一份二进制日志文件的记录,且记录其已经读取和处理过记录的位置.这表明,多个slaves可以连接到master,并且执行日志的不同部分,因为slave自己来控制这个过程,单个slave的断开与连接,不会影响master的操作.同时也正因为每个slave会记录二进制日志中的位置,所以slaves可以断开,重连,然后从记录的位置开始起上.

Master和每一个slave都必须赋予一个唯一的ID(可能使用server_id),另外,还必须告知slave其master的主机,日志文件名和位置(position).可以在会话中通过CHANGE MASTER TO来改变,详细信息会记录在master.info文件中.

1. 如何启动复制

1.1 创建一个用于复制的用户

每个slave都必须使用标准MySQL用户名和密码连接到master,任何帐号都可以,只要被授予了REPLICATION SLAVE权限.虽然创建一个单独用于复制的用户并不是必须的,但是你需要清楚的是用于复制的帐号的用户名与密码都是用明文的方式存储在master.info中的,因此出于安全的考虑还是创建一个的好.如:

即创建了一个用户名为"repl",密码为"testpass"的帐号,所有的slaves都可以使用同一个帐号,当然我们也可以为每一个slave都创建一个登录帐号.

1.2 配置Master

首先,必须得开启master的二进制日志功能,其次为master设置一个唯一的server-id -- 1~p, li { white-space: pre-wrap; }-1 之间的正整数.如在my.cnf或my.ini中作如下设置:

需要注意的是:为了在使用InnoDB事务时创建复制达到最大可能的稳定及一致,你需要使用:innodb_flush_log_at_trx_commit=1和sync_binlog=1两个选项.并同时确保:skip-networking=0否则slave与master就无法通信了.

MySQL对数据库数据进行复制的基本过程详解(mysql 数据库)

1.3配置Slave

在slave上我们唯一需要配置的就是为slave指定一个唯一的server-id. Slave上的二进制日志功能的开启不必须的,但开启可以用来作slave上的数据备份或灾难数据恢复,同时也可以使用slave作为更复杂复制拓扑架构的一部分(如:某个slave作为其它slaver的master时).

1.4 获取Master信息

为了配置slave复制,你需要知道master在其二进制日志中的当前位置,这样当slave开始复制过程时,就知道从当前这个点开始处理事件了.如果在master上已经存在数据,且这些数据需要在开始复制之前同步到其它slaves上,那么你就得让master停止处理语句,获得当前位置,然后导出数据.为了得到master的状态信息,需要通过下面的步骤:

执行:

来阻止所有的写操作,包括InnoDB的commit操作. 需要注意的此时只有退出了连接客户端这个"锁"才能被释放掉.通过:

来确定当前的二进制日志文件及位移量(offset)p, li { white-space: pr

1.5 在Slave上配置Master信息

2. 复制格式的选择

每种二进制日志格式都有自己的优缺点,对大多数用户来说,MBR提供了最好的效果.但当需要为某些特定任务选取SBR或RBR时,可以通过下面的比较来决定哪一个更适合:

SBR的优势:

从MySQL3.开始,就被证明了的技术更少的数据写入日志. 当更新或删除影响到很多行时,SBR会使用更少的存储空间,这也意味着在导入或恢复时需要更少的时间日志文件包含所有的语句操作所作的变动,因此可以用来审计数据库 SBR的劣势:

语句表述(Statements)对SBR来说是不安全的,不是所有修改数据的语句都可以使用SBR复制.任何为确定的行为都很难被复制,如具有LIMIT或ORDER BY的DELETE或UPDATEINSERT ... SELECT 比RBR需要更多数量的行锁定需要扫描整个表的UPDATE(因为没有在WHERE中使用索引)比RBR要锁定更多的行对InnoDB,使用了AUTO_INCREMENT的INSERT会阻塞其它非冲突的INSERT对于复杂的语句,slave在更新或插入之前必须先进行评估和执行,而RBR只需要运行语句应用不同就可以了存储过程执行同样的NOW()确定的UDFs必须被应用到所有的slaves上master与slave上的表必须(几乎)相同 RBR的优势:

所有的改变都能被复制,这是最安全的复制模式. 但mysql数据库不会被复制,mysql会被认为是一个特殊节点数据库这种技术与很多其它数据库管理系统一样,因此可以许多在其它系统上的认知,都可以转移到MySQL上来Master需要更少的锁定来执行:INSERT ... SELECT,INSERT中有AUTO_INCREMENT,以及WHERE中没有使用键值的 UPDATE/DELETESlaves在执行INSERT,UPDATE/DELETE时,需要更少的锁定 RBR的劣势:

RBR势必会产生更多的日志数据你不能通过log知道什么语句被执行了,然后你却可以通过mysqlbinlog查看什么数据被改变了相关命令

mysql>show slave hosts -- 查看所有连接到Master的Slave信息 mysql>show master status -- 查看Master状态信息 mysql>show slave status -- 查看Slave状态信息 mysql>show binary logs -- 查看所有二进制日志 mysql>show binlog events [IN log_file] -- 查看二进制日志中的事件

简单讲解MySQL的数据库复制方法 MySQL复制其实就是把数据从一个节点(master)拷贝到另一个节点(slaves),当然根据应用架构的不同,采用的方式也不同,MySQL服务器之间的复制使用的是二进制日

mysql每半小时平均值计算的sql语句 表结构:CREATETABLE`instance`(`id`int()unsignedNOTNULLAUTO_INCREMENT,`timestamp`int()unsignedDEFAULTNULL,`cpu`decimal(8,3)DEFAULTNULL,PRIMARYKEY(`id`))ENGINE=InnoDB;统计每半小时平均值

MySQL的集群配置的基本命令使用及一次操作过程实录 1.先了解一下你是否应该用MySQL集群。减少数据中心结点压力和大数据量处理,采用把MySQL分布,一个或多个application对应一个MySQL数据库。把几个MySQL数

标签: mysql 数据库

本文链接地址:https://www.jiuchutong.com/biancheng/312390.html 转载请保留说明!

上一篇:MySQL的查询缓存机制基本学习教程(mysql的查询缓存与redis的区别)

下一篇:简单讲解MySQL的数据库复制方法(mysql详细教程)

  • 固定资产计提减值后可以转回吗
  • 养老保险滞纳金最高限额规定
  • 保本理财收益增值税纳税主体
  • 个人账户发工资扣税吗
  • 高管个人所得税政策
  • 会计账簿账目核对要求包括哪些
  • 增值税怎样报税
  • 用人单位必须要有试用期吗
  • 监控系统计入开户费用吗
  • 第三方汽车贷款平台有哪些
  • 因质量出问题的事件
  • 股权转让 分期付款
  • 小规模纳税人的好处
  • 计提无形资产累计摊销9083.33
  • 外贸企业出口货物会计账务处理
  • 业务招待费在税法上的规定
  • 使用权资产的界定
  • 服装具有什么性
  • 电子承兑转出后多久到账
  • 累计结转是什么意思
  • Win11 Build 10.0.22000.51 预览版ISO镜像下载汇总(苹果M1也可用)
  • 积分兑换步骤
  • 怎么让别人无法访问我的qq空间
  • 其它权益工具投资处置时其他综合收益转那
  • 如何编制处置固定资产
  • 在windows7中桌面指的是全部窗口
  • php解析xml文件
  • php中的变量都以什么开头
  • windows10右键刷新有点卡
  • postman入门
  • node -v
  • PHP:stream_set_chunk_size()的用法_Stream函数
  • 一只猫在花园里英语
  • 增值税不允许抵扣计入什么科目
  • 不良品返修流程
  • 持有可转换债券的会计分录
  • 巴塞罗那城市布局
  • 解决laravel 5.1报错:No supported encrypter found的办法
  • 财税2016年12号文件解读
  • php 7.4
  • 普通发票收款人填管理员可以吗
  • python怎么做gui
  • 包装费和售后服务的区别
  • 购货方享受现金流量吗
  • 帝国cms简介标签
  • java的范式
  • 幼儿园固定资产说明怎么写
  • 出售金融资产计入
  • 现金返利的会计分录
  • 暂估入库的商品能出库吗
  • 暂估入库的商品作暂估冲红会计分录
  • 企业取得的跨期业务
  • 企业购进的固定资产
  • 什么叫做进项税不得抵扣
  • 其他综合收益什么时候转留存收益什么时候转损益
  • 典当行收房产证吗直接可以拿钱吗
  • 所有者权益的确认依赖于资产和负债的确认
  • 如何设置sqlserver数据库用户名密码
  • gdiwindow是什么
  • linux c命令
  • 怎么才能更好的优化我的电脑
  • 怎样加快电脑开机速度
  • win7系统怎样
  • win7系统如何关闭开机自动启动软件
  • 飞完整版歌曲
  • bootstrap和jsp
  • android模块开发
  • glsl编译
  • onkeyup,onkeydown和onkeypress的区别介绍
  • javascript脚本怎么用
  • android内存优化三 简书
  • python裁剪不规则区域
  • 我置顶你也只顶你
  • python怎么写函数
  • webpack循环引用
  • 税务部门公务员报考条件
  • 重庆电子税务局网页版登录
  • 安徽省各地区最低录取中考分数线
  • 销售哪些产品需要基金从业资格证?
  • 湖南社保费申报测算管理系统登录不了
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设