欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL双机热备简介实现(Windows+liunx)+liunx下MySQL数据库日常数据备份

程序员文章站 2022-04-09 10:29:20
...

一、为什么需要双机热备

  • 众所周知,数据是程序的根源,当服务器出现了故障,我们的程序肯定是无法正常使用的。服务器的故障可能由各种原因引起,如设备故障、操作系统故障、软件系统故障等,如果这时候有技术人员在场,当场修复故障问题,那么可能需要10分钟,也可能需要20分钟,也可能需要1个小时乃至更长,如果这个时候技术人员不在场,那么服务器将要等待很久才能被修复故障。

  • 至此,当服务器出现了故障,是否选择需要双机热备也是需要针对我们的需要,例如,我们的服务器宕机是否会对我们的用户软件造成业务流失、用户流失,如果一些重要系统而言,用户是很难忍受这样长时间的服务中断的。因此,就需要通过双机热备服务,来避免长时间的服务中断,保证系统长期、可靠的服务。

二、双机热备是什么,双机热备是如何工作的

1.双机热备是什么
双机热备特指基于高可用系统中的两台服务器的热备(或高可用),因两机高可用在国内使用较多,故得名双机热备,通俗易懂的来讲两台服务器一个操作,一台备份。双机热备我们可以分为主从热备、双主互备、一主多从等,根据你自己的选择可以选择不同的方式既为主机,又为从机。

2.双机热备是如何工作的
整体上来说,复制有3个步骤:
(1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
(2) slave将master的binary log events拷贝到它的中继日志(relay log);
(3) slave重做中继日志中的事件,将改变反映它自己的数据。

MySQL双机热备简介实现(Windows+liunx)+liunx下MySQL数据库日常数据备份

三、双机热备与备份的区别

双机热备是两台服务器之间一种时时的数据备份,是为了与主机数据一样,当发生故障的时候从而使用从机,属于一种故障点转移。而备份是备份的是数据,主要为了防止数据的丢失。

四、如何实现双机热备(本文通过mysql的my.ini/my.cnf配置文件实现)

环境描述:主机(Windows7 ip:192.168.100.1)(master),从机(centOS 7 ip:192.168.100.2)(slave),(MySQL 5.7)

1.要想实现mysql双机热备的前提是主机必须开启了二进制日志

(1)查看MySQL的二进制是否开启
MySQL双机热备简介实现(Windows+liunx)+liunx下MySQL数据库日常数据备份
log_bin就是二进制的日志开启状态

(2)MySQL开启二进制日志
需要在MySQL的my.ini配置文件中设置
# log-bin
log-bin=”logs/logbin.log”//指定一个二进制日志生成的路径
然后重启一下MySQL服务重新加载一下mysql服务是否启动,成功的话会在指定目录下看到”logbin.000001”相关的文件
使用命令:mysql> show master status;就可以查看当前最新二进制文件和二进制文件的节点
附:(mysql> show master logs;//显示所有日志)(mysql> reset master;//清空日志)

MySQL双机热备简介实现(Windows+liunx)+liunx下MySQL数据库日常数据备份

(3)配置master和slave配置

(3.1)主服务器配置
注:当开始配置主从热备的时候要确保数据库结构和数据同步,不然会以后的操作可能会引起报错到底转换二进制日志的sql线程阻塞报错。(虽然不同步数据也可以)

主服务器配置
server-id=1 #主服务器ID,唯一性
binlog-do-db=MyDBName #需同步的数据库,如果没有本行,即表示同步所有的数据库

主机给从机远程权限:

命令:grant replication slave on . to ‘root’@’192.168.100.1’ identified by ‘123456’;

(3.2)从服务器配置

server-id=2 #从服务区ID,唯一性
修改完成后,需要重启mysql服务。
然后通过命令行登录msyql(mysql –hlocalhost –uroot -ppwd)
Mysql>slave stop; #先停止slave服务

然后执行

Mysql>change master to
master_host=’192.168.100.1’,
master_user=’root’,
master_password=’123456’,
master_log_file=’ logbin.000005’ , #上面主服务器查询的值
master_log_pos=154; #上面主服务器查询的值(show master status命令看到的最新二进制日志)

配置好之后我们可以通过命令查看配置的值是否正确

mysql>show slave stauts

MySQL双机热备简介实现(Windows+liunx)+liunx下MySQL数据库日常数据备份
当然我这边配置的参数是不一样的,详细参数对看自己设置的值

  • 设置好之后,我们就可以开启从机的复制服务

    msyql> start slave


MySQL双机热备简介实现(Windows+liunx)+liunx下MySQL数据库日常数据备份
  • 当io和sql线程的状态都为Yes,就说明我们的复制线程已经成功连接到主机可以进行热拷贝了

  • 至此大家就可以去一阵操作看看是不是从机的数据库是否已有主机刚进行的操作结果

  • 经过上面的设置,我们已经可以进行两台服务器

五、MySQL数据库日常备份(sql语句的全量备份+二进制的增量备份)

  • 1.Windows 7
    再mysql数据库,mysqldump 内置工具可以帮我们导出需要备份的数据成MySQL可以执行的sql文件

//存放的目录
mysqldump -uroot -p123456 master > c:/mysql/master.sql
MySQL双机热备简介实现(Windows+liunx)+liunx下MySQL数据库日常数据备份
导出成功会在目录下看到相应的master.sql文件

那么我们知道了如何备份sql文件,该怎么去让它自己按照我们想要的时间去自动自己备份呢,这个时候我们就需要用到windows的(bat脚本)和(任务计划)

注:笔者这边没有去试过Windows的定时任务,此处给出一个友情链接,小伙伴们可以去自己尝试一下
http://blog.csdn.net/u013754060/article/details/50885804

  • 2.liunx(笔者采用shell脚本和cron定时服务实现备份(亲测))
    新建一个shell脚本,内容可以输入
    MySQL双机热备简介实现(Windows+liunx)+liunx下MySQL数据库日常数据备份

  • 然后执行一下是否能够生成正确的sql文件,可以的话就设置cron定时服务

    crontab -e

  • 编辑当前用户的定时服务内容
    MySQL双机热备简介实现(Windows+liunx)+liunx下MySQL数据库日常数据备份

  • cron服务常用命令和配置解释

    1.安装crontab:
    [aaa@qq.com ~]# yum install vixie-cron搜索
    [aaa@qq.com ~]# yum install crontabs
    2.启动服务
    #./sbin/service crond start //启动服务
    #./sbin/service crond stop //关闭服务
    #./sbin/service crond restart //重启服务
    #./sbin/service crond reload //重新载入配置 (配置文件在/etc/crontab)
    3.设置cron定时任务
    #设置语句语法结构
    *  *  *  *  *  command
    分 时 日 月 周 命令
    第1列表示分钟1~59 每分钟用或者 /1表示
    第2列表示小时1~23(0表示0点)
    第3列表示日期1~31
    第4列表示月份1~12
    第5列标识号星期0~6(0表示星期天)
    第6列要运行的命令
    –*/1 每隔多久
    –1,10,22 指定的哪几个时间
    –18-23 指定时间一直至指定时间
    –23-7/1 混合条件

  • 备份恢复

    恢复数据
    mysql -uroot -p123456 master < /data/mysql/master.sql
    恢复
    mysqlbinlog e:/log/logbin.000001 | mysql -u root -p
    按指定位置恢复
    mysqlbinlog –start-position=185 –stop-position=338 e:/log/logbin.000001 | mysql -u root -p
    按指定时间恢复:
    mysqlbinlog –start-datetime=”2010-01-07 11:25:56” –stop-datetime=”2010-01-07 13:23:50” e:/log/logbin.000001 | mysql -u root -p

  • 顺便给出一个把二进制日志转换成可读性强文件的命令

    导出binlog日志
    c:\mysql\bin>mysqlbinlog e:/log/logbin.000001 > e:/log/log.sql

  • 结束语:这是笔者第一次csdn上上写的博文,也是第一次在互联网上写的博文,更多的是记录自己在开发中的一些步骤和经验,是自己对技术的一个笔记,所以很多东西也都是从其他地方学习过来自己理解的,所以文中有些内容如有错误,也希望读者可以指出。谢谢大家的支持,最后抛出一张美图舒缓一下程序员压抑的大脑。

  • MySQL双机热备简介实现(Windows+liunx)+liunx下MySQL数据库日常数据备份