设为首页 收藏本站
查看: 949|回复: 0

[经验分享] 企业 - MySQL主从备份

[复制链接]

尚未签到

发表于 2018-9-30 08:21:55 | 显示全部楼层 |阅读模式
一、mysql主从备份原理
  一、双机热备的概念简单说一下,就是要保持两个数据库的状态自动同步。对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库中的数据一致。 这样做有如下几点好处:
  1. 可以做灾备,其中一个坏了可以切换到另一个。
  2. 可以做负载均衡,可以将请求分摊到其中任何一台上,提高网站吞吐量。  对于异地热备,尤其适合灾备。
  二、mysql 主从备份工作原理
  简单的说就是把 一个服务器上执行过的sql语句在别的服务器上也重复执行一遍, 这样只要两个数据库的初态是一样的,那么它们就能一直同步。
二、实现方式
  MYSQL主从同步是在MySQL主从复制(Master-Slave Replication)基础上实现的,通过设置在Master上的binlog,使其处于打开状态;Slave通过一个I/O线程从Master上读取binlog,然后传输到Slave的中继日志中,然后使用SQL线程读取中继日志,并应用到自身数据库中,从而实现主从数据同步功能。
  有两个服务器,演示了从一个主服务器(master)把数据同步到从服务器(slave)的过程。
  对于一个mysql服务器,一般有两个线程来负责复制和被复制。当开启复制这个开关之后(start slave)
  1. 作为主服务器Master,会把自己的每一次改动都记录到 二进制日志 Binarylog 中。 (从服务器会负责来读取这个log,然后在自己那里再执行一遍。)
  
  2. 作为从服务器Slave,会用master上的账号登陆到master上,去读取master的Binarylog,  然后写入到自己的中继日志Relaylog,然后自己的sql线程会负责读取这个中继日志,并执行一遍。到这里主服务器上的更改就同步到从服务器上了。
  
  在mysql上可以查看当前服务器的主,从状态。 其实就是当前服务器的 Binary(作为主服务器角色)状态和位置。以及其RelayLog(作为从服务器)的复制进度。
  三、复制的过程
   DSC0000.jpg
  该过程的第一部分就是master记录二进制日志。在每个事务更新数据完成之前,master在二日志记录这些改变。MySQL将事务串行的写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。        下一步就是slave将master的binary log拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlogdump process。Binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。        SQL slave thread(SQL从线程)处理该过程的最后一步。SQL线程从中继日志读取事件,并重放其中的事件而更新slave的数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。         此外,在master中也有一个工作线程:和其它MySQL的连接一样,slave在master中打开一个连接也会使得master开始一个线程。复制过程有一个很重要的限制——复制在slave上是串行化的,也就是说master上的并行更新操作不能在slave上并行操作。
  实验
  实验环境
  server2   master
  server3   slave
  master上下载包
  mysql-5.7.17-1.el6.x86_64.rpm-bundle.tar
  安装数据库
  [root@server2~]# yum install -y mysql-community-client-5.7.17-1.el6.x86_64.rpm mysql-community-common-5.7.17-1.el6.x86_64.rpm mysql-community-libs-5.7.17-1.el6.x86_64.rpm mysql-community-libs-compat-5.7.17-1.el6.x86_64.rpm mysql-community-server-5.7.17-1.el6.x86_64.rpm
   DSC0001.jpg
  [root@server3 ~]# yum install -y *
  修改mysql的配置文件
  [root@server2 ~]# vim /etc/my.cnf
  server-id = n
  给服务器分配一个唯一的ID编号
  log-bin [= filename]
  把对数据进行修改的所有SQL命令(也就是INSERT、UPDATE和DELETE命令)以二进制格式记入日志(二进制变更日志,binary update log)。这种日志的文件名是filename.n或默认的hostname.n,其中n是一个6位数字的整数(日志文件按顺序编号)。
   DSC0002.jpg
  开启服务
   DSC0003.jpg
   DSC0004.jpg
  修改slave配置文件
  server-id = n
  给服务器分配一个唯一的ID编号
  [root@server3 ~]# vim /etc/my.cnf
   DSC0005.jpg
  开启服务
DSC0006.jpg

  查看密码
   DSC0007.jpg
  安全配置向导
   DSC0008.jpg
   DSC0009.jpg
   DSC00010.jpg
  如下方法修改slave密码
  mysql>>
   DSC00011.jpg
  master上进行授权
  mysql> grant replication slave on *.* to cara@'192.168.122.13'>
  mysql> flush privileges;  刷新
   DSC00012.jpg
  master授权后,slave可以远程登录
   DSC00013.jpg
  master端查看
   DSC00014.jpg
  使 slave 与 master 建立连接,从而同步:
  mysql> change master to master_host='192.168.122.12',master_user='cara',master_password='LH=redhat123',master_log_file='mysql-bin.000003',master_log_pos=1706;
  slave端  mysql -p 登录
   DSC00015.jpg
  查看
  [root@server3 mysql]# pwd
  /var/lib/mysql
  [root@server3 mysql]# cat master.info
   DSC00016.jpg
  [root@server3 mysql]# cat server3-relay-bin.index
   DSC00017.jpg
  mysql> show slave status\G;  查看slave状态
   DSC00018.jpg
  mysql> start slave;  开启slave
   DSC00019.jpg
  创建库westos,创建表usertb
   DSC00020.jpg
  在表中插入数据
   DSC00021.jpg
  更改密码
   DSC00022.jpg
  删除表中数据
   DSC00023.jpg
  [root@server2 mysql]# mysqlbinlog mysql-bin.000003   可查看master所做的操作
   DSC00024.jpg
  在slave上也可查看master上数据
   DSC00025.jpg
   DSC00026.jpg
深入了解复制-全局事务标识符(GTID)
1)什么是GTID
  GTID(Global Transaction ID)是对于一个已提交事务的编号,并且是一个全局唯一的编号。GTID实际上是由UUID+TID组成的。其中UUID是一个MySQL实例的唯一标识,保存在mysql数据目录下的auto.cnf文件里。TID代表了该实例上已经提交的事务数量,并且随着事务提交单调递增。下面是一个GTID的具体形式:3E11FA47-71CA-11E1-9E33-C80AA9429562:23。
2)GTID的作用
  根据GTID可以知道事务最初是在哪个实例上提交的
  GTID的存在方便了Replication的Failover
3)GTID比传统复制的优势
  更简单的实现failover,不用以前那样在需要找log_file和log_Pos。
  更简单的搭建主从复制。
  比传统复制更加安全。
  GTID是连续没有空洞的,因此主从库出现数据冲突时,可以用添加空事物的方式进行跳过。
4)GTID的工作原理:
  master更新数据时,会在事务前产生GTID,一同记录到binlog日志中。
  slave端的i/o线程将变更的binlog,写入到本地的relay log中。
  sql线程从relay log中获取GTID,然后对比slave端的binlog是否有记录。
  如果有记录,说明该GTID的事务已经执行,slave会忽略。
  如果没有记录,slave就会从relay log中执行该GTID的事务,并记录到binlog。
  在解析过程中会判断是否有主键,如果没有就用二级索引,如果没有就用全部扫描。
  先关掉slave
   DSC00027.jpg
  修改配置文件/etc/my.cof
  master
   DSC00028.jpg
  slave
   DSC00029.jpg
  重启服务
   DSC00030.jpg
   DSC00031.jpg
  更录数据库,查看
  master
   DSC00032.jpg
   DSC00033.jpg
   DSC00034.jpg
  slave
   DSC00035.jpg
   DSC00036.jpg
   DSC00037.jpg
  change master to master_host='192.168.122.12',master_user='cara',master_password='LH=redhat123',master_auto_position=1;
   DSC00038.jpg
   DSC00039.jpg
  --------------------------------------------------------------------master端--------------------------------------------------------------------
   DSC00040.jpg
   DSC00041.jpg
  --------------------------------------------------------------------slave端--------------------------------------------------------------------
   DSC00042.jpg
   DSC00043.jpg
   DSC00044.jpg
   DSC00045.jpg


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-606415-1-1.html 上篇帖子: MySQL5.7多表关联更新 下篇帖子: mysql手记
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表