Linux运维:MySQL备份,物理冷备份,热备,完备+二进制日志

备份类型

完全备份、增量备份、差异备份

完全备份:整个数据集都备份

增量备份:仅备份最近一次完全备份或增量备份(如果存在增量)以来变化的数据,备份较快,还原复杂。

差异备份:对比前一次备份,备份多出来的或者前一次备份有差异的数据。仅备份最近一次完全备份以来变化的数据或者增长的数据,备份较慢,还原简单。直接还原最新备份。

备份数据

cp,tar等复制归档工具:物理备份工具,适用所有存储引擎;只支持冷备,完全和部分备份

LVM的快照:先加读锁,做快照后解锁,几乎热备;借助文件系统工具进行备份

mysqldump:逻辑备份工具,使用所有存储引擎,对MyISAM存储引擎进行温备;支持完全或部分备份;对innodb存储引擎支持热备,结合binlog的增量备份。

二进制日志文件不应该与数据文件放在同一磁盘冷、温、热备份。

冷备:读、写操作均不可进行,数据库停止服务

温备:读操作可执行,但写操作不可执行

热备:读、写操作均可执行,不影响事务

MyISAM:温备,不支持热备,不支持事务。Innodb:都支持

物理冷备份:备份方式:冷备份,一定要先关闭数据库。

先关闭数据库stop,再把/var/lib/mysql使用scp拷贝到其他主机上,再删库,rm -rf /var/lib/mysql。如果重启start相当于格式化,需要重新过滤密码grep password /var/log/mysqld.log复制密码,登录,但是数据库中都没有自建的数据库了,只有默认的数据库。关闭stop数据库,把新生成的数据删除rm -rf /var/lib/mysql,把拷贝过去的mysql再拷回来,指定属主和属组chown。再登录就可以了。

yum安装mysql这里不再实验演示

本地源:

vim /etc/yum.repo.d/mysql.repo

[mysql57-community]

name=MySQL 5.7 Community Server

baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/

enabled=1

gpgcheck=0

下载社区办

yum install -y mysql-community-server

#Node1主机上启动,主机Node2上安装好先不启动。

systemctl start mysqld

启动后就会有日志文件,通过password过滤密码。登录数据库

grep password /var/log/mysql.log   #最后面的就是密码,各种特殊符号都是密码的一部分。

登录mysql

mysql -uroot -p'密码'

写入密码策略,改密码,添加两条。目的是不需要遵守密码复杂度要求

set global validate_password_policy=0;

set global validate_password_length=1;

将密码改成abc123

alter user root@'localhost' identified by 'abc123';

ctrl + D退出。

数据库安装成功!

登录:mysql -uroot -pabc123

退出:ctrl + D

有一个数据库hellodb。有以下表;

主机Node1和主机Node2上测试物理冷备份。把主机1的数据库文件复制到主机2上

删除主机1的数据库文件。

物理冷备份

现有的数据库:hellodb和test。

拷贝到主机2上;

[root@Node1 ~]#:scp -r /var/lib/mysql 192.168.114.20:/data/

加-r是将数据库文件整个打包

破坏数据:

[root@Node1 ~]#:rm -rf /var/lib/mysql

如果再重启数据库。那么就不再是原来的数据库文件了。并且密码也需要重新修改。

systemctl start mysqld

重新设置密码:

set global validate_password_policy=0;set global validate_password_length=1;set password = 'abc123';

查看数据库是否存在hellodb和test数据库。

那么我们的数据就不存在了。需要从备份的主机那里重新拷过来

关闭数据库:

[root@Node1 ~]#:systemctl stop mysqld
[root@Node1 ~]#:rm -rf /var/lib/mysql

在主机2上再拷贝到主机1上:

[root@Node2 ~]#:scp -r /data/mysql 192.168.114.10:/var/lib/
The authenticity of host '192.168.114.10 (192.168.114.10)' can't be established.
ECDSA key fingerprint is SHA256:lsBlbsjrUi2EgYzxOda1NX0GiAJiwLXtn76BetsdzNc.
......

修改属主和属组:

[root@Node1 ~]#:ll /var/lib/mysql -d
drwxr-x--x. 7 root root 4096 7月   3 19:11 /var/lib/mysql
[root@Node1 ~]#:
[root@Node1 ~]#:chown -R mysql:mysql /var/lib/mysql

迁移数据库完了先不要启动数据库, 复制好文件后再启动

启动systemctl start mysqld

[root@Node1 ~]#:systemctl start mysqld
[root@Node1 ~]#:
[root@Node1 ~]#:mysql -uroot -pabc123
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
......

登录进来了。查看数据库,发现是原来的文件的数据库。

mysqldump热备份

不需要关闭数据库:

[root@Node1 ~]#:mysqldump -uroot -pabc123 hellodb > /data/hellodb.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.

提示警告是因为密码暴露在了外面,可以:mysql -uroot -p hellodb > /data/hellodb.sql

然后输入密码:(不显示密码)

这样把数据库hellodb备份在了/data/下取名为hellodb.sql文件。

进去把hellodb数据库删除掉。

退出来,在外面操作,由于存在的弊端,这样导出来的只有创建表的记录。没有创建数据库的记录。需要进去创建一个hellodb的数据库。

此时数据库hellodb被我们删除了。备份在/data/下名为hellodb.sql

在外面复制过来,先不创建数据库。测试:

[root@Node1 ~]#:mysql -uroot -pabc123 hellodb < /data/hellodb.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1049 (42000): Unknown database 'hellodb'

由于没有数据库hellodb。导入失败。需要进入数据库。先创建个数据库。

可以查看一下这个文件:过滤create:

grep -i "create" /data/hellodb.sql

发现只有创建表的。那我们进入数据创建一个数据库:

create database hellodb;

[root@Node1 ~]#:mysql -uroot -pabc123
......
mysql> create database hellodb;
Query OK, 1 row affected (0.00 sec)

再次执行导入:指定hellodb数据库。执行成功!

有一个命令不进入数据库就可以进行查询语句:加-e选项

这样数据库就还原回来了。

复刻Node1主机的数据库

那么我们Node2主机上有Node1的mysql文件。我们可以把这个文件复刻为自己的数据库。

[root@Node2 ~]#:ls /data
mysql

Node2上安装好之后,没有启动就没有/var/lib/mysql文件https://tool.lu/crontab/                    crontab时间计算器,我们把Node1备份过来的拷贝过来。

[root@Node2 ~]#:chown -R mysql:mysql /var/lib/mysql #给个权限,属主和属组

然后重新启动:systemctl start mysqld

登录:密码与Node1的密码相同:mysql -uroot -pabc123

如果有错,就删了重新复制一遍。

[root@Node2 ~]#:mysql -uroot -pabc123
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

停止:删了重新复制

#关闭数据库
[root@Node2 ~]#:systemctl stop mysqld
#删除文件
[root@Node2 ~]#:rm -rf /var/lib/mysql/*                    #忽略这里*/
[root@Node2 ~]#:ls /var/lib/mysql
#重新复制一遍
[root@Node2 ~]#:cp /data/mysql/* /var/lib/mysql/ -r        #忽略这里*/
[root@Node2 ~]#:chown -R mysql:mysql /var/lib/mysql
#启动
[root@Node2 ~]#:systemctl start mysqld
登录成功
[root@Node2 ~]#:mysql -uroot -pabc123
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
......mysql>
mysql> show databases;            #与Node1的数据库一样
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hellodb            |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
6 rows in set (0.00 sec)

这样就实现了主机Node2复刻主机Node1的数据。

完备+二进制日志

实验:在一个时间轴上,如果在6点时完全备份了。在6点到8点的时候对数据进行了操作修改,没有备份,怎么达到6点到8点和6点之前的完备合在一起?

现在Node1的数据库中:

开启二进制日志:

[root@Node1 ~]#:vim /etc/my.cnf
......
server-id=10
log-bin=/data/mysql/mysql-bin

创建路径和修改权限并重启:

[root@Node1 ~]#:mkdir /data/mysql -p
[root@Node1 ~]#:chown -R mysql.mysql /data
[root@Node1 ~]#:systemctl restart mysqld

执行完备,相当于6点这个时间点进行完全备份:

mysqldump -A --master-date=2 > /data/all.sql

可以查看一下这个备份文件:有一句话,是二进制从mysql-bin.000001二进制文件,154这个节点开始的。这个就是6点这个时间节点。

#从完全备份中,找到二进制位置

[root@Node1 ~]#:vim /data/all.sql

......

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;

......

这个时候向数据库中插入几条数据:

这时候的数据是在备份后的数据,也就是备份的文件里面是没有这三条数据的。

进入数据库删除hellodb数据库,别忘了前面6点的时候有个完备/data/all.sql。

这个时候备份,完全备份后的二进制日志,这时候就是从6点的时间点到现在备份成一个新的文件叫/data/inc.sql。这里面有刚刚删除数据库的语句记录。也就是drop记录,能过滤出来。

这里!梳理一下:

我们把hellodb数据库删除了,在删除前6点的时候做了个完备:/data/all.sql

然后插入了三条数据,没有做备份,但是通过6点做的完备的节点开始做了二进制日志:/data/inc.sql

但是在/data/inc.sql中有drop的语句,不能直接把/data/inc.sql导入数据,否则执行了drop语句就又把hellodb数据库删了。我们通过过滤出drop的语句行,将其注释或者删除掉,再导入数据!

过滤并删除,如果数据量很大是不建议打开文件删除,直接sed。

导入备份的文件:

把完备原封不动的导入数据库:

进入数据库并查看是否有hellodb数据库:

可见数据库已回复,但这也只是6点之前的,6点之后插入的三条数据是没有的:查看

select * from hellodb.teachers;

再把6点之后的二进制导入进来:

source /data/inc.sql;

有个报错不影响:

再次查看是否有插入的三条数据了?

select * from hellodb.teachers;

这时三条数据就还原过来了!实现了完全备份+二进制日志恢复数据!

---end---

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/41479.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Renesas R7FA8D1BH (Cortex®-M85) ADC模块应用

目录 概述 1 软硬件 1.1 软硬件环境信息 1.2 开发板信息 1.3 调试器信息 2 FSP和KEIL配置ADC 2.1 ADC硬件接口 2.2 FSP配置ADC 3 软件功能实现 3.1 FSP生成项目 3.2 FSP ADC模块库函数介绍 3.2.1 库函数列表 3.2.2 函数介绍 4 ADC功能代码 4.1 编写代码 4.2 代码…

计算机应用数学--第三次作业

第三次作业计算题编程题1 基于降维的机器学习2 深度学习训练方法总结 第三次作业 计算题 (15 分&#xff09;对于给定矩阵 A A A&#xff08;规模为 42&#xff09;&#xff0c;求 A A A 的 SVD&#xff08;奇异值分解&#xff09;&#xff0c;即求 U U U&#xff0c; Σ …

Ardupilot无人船(车)mavros自主控制

文章目录 前言一、启动仿真二、编写代码三、运行前言 ubuntu20.04 rover 4.4 学习资料: https://cwkj-tech.yuque.com/bsge84/suv1 https://ardupilot.org/dev/docs/mavlink-rover-commands.html http://wiki.ros.org/mavros 一、启动仿真 在ardupilot/Rover目录下执行: …

强化学习-6 DDPG、PPO、SAC算法

文章目录 1 DPG方法2 DDPG算法3 DDPG算法的优缺点4 TD3算法4.1 双Q网络4.2 延迟更新4.3 噪声正则 5 附15.1 Ornstein-Uhlenbeck (OU) 噪声5.1.1 定义5.1.2 特性5.1.3 直观理解5.1.4 数学性质5.1.5 代码示例5.1.6 总结 6 重要性采样7 PPO算法8 附28.1 重要性采样方差计算8.1.1 公…

重塑通信边界,基于ZYNQ7000 FPGA驱动的多频段多协议软件无线电平台

01、产品概述 本平台是基于高性能ZYNQ-7000系列中的XC7Z045处理器构建的多频段多协议软件无线电解决方案&#xff0c;集成了AD9364芯片——一款业界领先的1x1通道RF敏捷收发器&#xff0c;为无线通信应用提供了强大支持。其存储架构包括2路高速4GB DDR3内存、1路32GB EMMC存储以…

一道有意思的简单题 [NOIP2010 普及组] 接水问题

题目&#xff1a; 题解&#xff1a; 每一次新来的同学的接水时间都加在现在已有的水龙头中接水时间最短的&#xff0c;总时间就为n次操作后水龙头中接水时间的最长值。 #include<bits/stdc.h> using namespace std; multiset<int>s;int main(){int n,m;scanf(&qu…

uni-app组件 子组件onLoad、onReady事件无效

文章目录 导文解决方法 导文 突然发现在项目中&#xff0c;组件 子组件的onLoad、onReady事件无效 打印也出不来值 怎么处理呢&#xff1f; 解决方法 mounted() {console.log(onLoad, this.dateList);//有效// this.checkinDetails()},onReady() {console.log(onReady, this.da…

空间数据采集与管理:为什么选择ArcGISPro和Python?

你还在为找不到合适的数据而苦恼吗&#xff1f;你还在面对大量数据束手无策&#xff0c;不知如何处理吗&#xff1f;对于从事生产和科研的人员来说&#xff0c;空间数据的采集与管理是地理信息系统&#xff08;GIS&#xff09;和空间分析领域的关键环节。通过准确高效地采集和管…

贪心算法-以高校教师信息管理系统为例

1.贪心算法介绍 1.算法思路 贪心算法的基本思路是从问题的某一个初始解出发一步一步地进行&#xff0c;根据某个优化测度&#xff0c;每一 步都要确保能获得局部最优解。每一步只考虑一 个数据&#xff0c;其选取应该满足局部优化的条件。若下 一个数据和部分最优解连在一起不…

PHP源码:美容护理按摩预约系统(附管理端+前台)

一. 前言 今天小编给大家带来了一款可学习&#xff0c;可商用的&#xff0c;预约系统 源码&#xff0c;支持二开&#xff0c;无加密。项目的内容可以是美容护理&#xff0c;按摩护理等&#xff0c;你也可以扩展。 预约下单大致流程&#xff1a; 客户登录下预约单&#xff0c…

电机驱动----L298N

一、介绍 L298N 是一种双H桥电机驱动芯片&#xff0c;其中每个H桥可以提供2A的电流&#xff0c;内含4路逻辑驱动电路&#xff0c;功率部分的供电电压范围是2.5-48v&#xff0c;逻辑部分5v供电&#xff0c;接受5vTTL电平。一般情况下&#xff0c;功率部分的电压应大于6V否则芯片…

实现Java应用的快速开发与迭代

实现Java应用的快速开发与迭代 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 1. 引言 随着软件开发周期的不断缩短和市场竞争的加剧&#xff0c;快速开发和…

Spring源码十一:事件驱动

上一篇Spring源码十&#xff1a;BeanPostProcess中&#xff0c;我们介绍了BeanPostProcessor是Spring框架提供的一个强大工具&#xff0c;它允许我们开发者在Bean的生命周期中的特定点进行自定义操作。通过实现BeanPostProcessor接口&#xff0c;开发者可以插入自己的逻辑&…

JAVA基础(8) 面向对象编程3

目录 一、关键字static 1.概念 2.static关键字 &#xff08;1&#xff09;使用范围&#xff1a; &#xff08;2&#xff09;被修饰后的成员具备以下特点&#xff1a; 3.静态变量 &#xff08;1&#xff09;语法格式 &#xff08;2&#xff09;静态变量的特点 &#xf…

k8s-第五节-StatefulSet

StatefulSet StatefulSet 是用来管理有状态的应用&#xff0c;例如数据库。 前面我们部署的应用&#xff0c;都是不需要存储数据&#xff0c;不需要记住状态的&#xff0c;可以随意扩充副本&#xff0c;每个副本都是一样的&#xff0c;可替代的。 而像**数据库、Redis **这类…

CPU是什么?

CPU&#xff0c;全称Central Processing Unit&#xff0c;中文名为中央处理器&#xff0c;是计算机系统的核心部件&#xff0c;负责执行程序指令、处理数据以及控制计算机内部的其他组件。简单来说&#xff0c;CPU就像是计算机的大脑&#xff0c;负责进行所有的思考和计算工作。…

在Linux/Debian/Ubuntu中出现“Could not get lock /var/lib/dpkg/lock-frontend”问题的解决办法

在Linux/Debian/Ubuntu中出现“Could not get lock /var/lib/dpkg/lock-frontend”问题的解决办法 在使用 apt 或 apt-get 进行软件包管理时&#xff0c;有时会遇到以下错误提示&#xff1a; Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporari…

CCM的作用及原理

CCM调试的理论依据_ccm矩阵sat调试-CSDN博客 CCM是在WB之后&#xff0c;就是当AWB将白色校正之后其他颜色也会跟着有明显变化&#xff0c;CCM的作用就是要保持白色不变&#xff0c;把其他色彩校正到非常精准的地步。 校正后的颜色(target值是一个固定的值)CCM矩阵*原始的颜色…

代码随想录Day73(Part09)

badijkstar(堆优化版) 题目&#xff1a;47. 参加科学大会&#xff08;第六期模拟笔试&#xff09; (kamacoder.com) 思路&#xff1a;直接看答案 答案 import java.util.*;class Edge {int to; // 邻接顶点int val; // 边的权重Edge(int to, int val) {this.to to;this.val …

昇腾910B部署Qwen2-7B-Instruct进行流式输出【pytorch框架】NPU推理

目录 前情提要torch_npu框架mindsport框架mindnlp框架 下载模型国外国内 环境设置代码适配&#xff08;非流式&#xff09;MainBranch结果展示 代码适配&#xff08;流式&#xff09; 前情提要 torch_npu框架 官方未适配 mindsport框架 官方未适配 mindnlp框架 官方适配…