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.mfbz.cn/a/776224.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024 年第十四届亚太数学建模竞赛(中文赛项)浅析

需要完整B题资料&#xff0c;请关注&#xff1a;“小何数模”&#xff01; 本次亚太(中文赛)数学建模的赛题已正式出炉&#xff0c;无论是赛题难度还是认可度&#xff0c;该比赛都是仅次于数模国赛的独一档&#xff0c;可以用于国赛前的练手训练。考虑到大家解题实属不易&…

离线安装arm架构Firefox

离线安装Firefox浏览器及其插件在ARM架构的设备上&#xff08;如树莓派、部分Android设备或其他采用ARM处理器的Linux系统&#xff09;可能需要一些特殊步骤&#xff0c;因为默认情况下&#xff0c;大多数浏览器和插件都是为x86架构设计的。对于ARM架构&#xff0c;你需要找到特…

深圳航空顶象验证码逆向,和百度验证码训练思路

声明(lianxi a15018601872) 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 前言(lianxi a…

Java项目:基于SSM框架实现的校园快递代取管理系统【ssm+B/S架构+源码+数据库+毕业论文】

一、项目简介 本项目是一套基于SSM框架实现的校园快递代取管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、…

Windows系统下载安装ngnix

一 nginx下载安装 nginx是HTTP服务器和反向代理服务器&#xff0c;功能非常丰富&#xff0c;在nginx官网首页&#xff0c;点击download 在download页面下&#xff0c;可以选择Stable version稳定版本&#xff0c;点击下载 将下载完成的zip解压即可&#xff0c;然乎在nginx所在…

Spring Boot 中的监视器是什么?有什么作用?

前言&#xff1a; 监听器相信熟悉 Spring、Spring Boot 的都知道&#xff0c;但是监视器又是什么&#xff1f;估计很多人一脸懵的状态&#xff0c;本篇分享一下 Spring Boot 的监视器。 Spring Boot 系列文章传送门 Spring Boot 启动流程源码分析&#xff08;2&#xff09; …

《数字图像处理-OpenCV/Python》第17章:图像的特征描述

《数字图像处理-OpenCV/Python》第17章&#xff1a;图像的特征描述 本书京东 优惠购书链接 https://item.jd.com/14098452.html 本书CSDN 独家连载专栏 https://blog.csdn.net/youcans/category_12418787.html 第17章&#xff1a;图像的特征描述 特征检测与匹配是计算机视觉的…

opencv概念以及安装方法

#opencv相关概念介绍 Open Source Computer Vision Library 缩写 opencv 翻译&#xff1a;开源的计算机视觉库 &#xff0c;英特尔公司发起并开发&#xff0c;支持多种编程语言&#xff08;如C、Python、Java等&#xff09;&#xff0c;支持计算机视觉和机器学习等众多算法&a…

【C++】开源:nlohmann/json数据解析库配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍nlohmann/json数据解析库配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&am…

conda环境变量+常用操作+配置镜像源

、1、conda环境变量配置 根据我的上篇文章&#xff0c;应该都已经安装了conda和pycharm&#xff0c;然后可能会出现conda的没有配置到系统的环境变量上&#xff0c;这里首先教大家如何配置系统的环境变量&#xff0c;在进行后续操作&#xff0c;如果环境变量已经配置完毕可以自…

【C语言】指针(1)--入门理解

目录 一、内存和地址 二、指针变量和地址 三、指针变量类型的意义 一、内存和地址 只要讲指针就离不开内存 因为指针就是访问内存的 计算上CPU&#xff08;中央处理器&#xff09;在处理数据的时候&#xff0c;需要的数据是在内存中读取的&#xff0c;处理后的数 据也会放…

一款强大且免费开源的多连接数据库管理工具

大家好&#xff0c;今天给大家分享一款免费开源的跨平台数据库管理工具DbGate。 DbGate是一款免费开源的跨平台数据库管理工具&#xff0c;支持多种数据库&#xff0c;包括MySQL、PostgreSQL、SQL Server、MongoDB、SQLite等。它可以在Windows、Linux、Mac操作系统上运行&#…

亚信安全:《2024云安全技术发展白皮书》

标签 云计算 安全威胁 云安全技术 网络攻击 数据保护 一句话总结 《云安全技术发展白皮书》全面分析了云计算安全威胁的演进&#xff0c;探讨了云安全技术的发展历程、当前应用和未来趋势&#xff0c;强调了构建全面云安全防护体系的重要性。 摘要 云安全威胁演进&#xff…

刷题之合并两个有序数组(leetcode)

因为换了手机号码&#xff0c;之前leetcode的账号登不上去了&#xff0c;正好太久不刷题&#xff0c;很多思路都没了&#xff0c;所以重新开始刷leetcode&#xff01; 这道题很简单&#xff0c;指针模拟一下&#xff0c;从后往前考虑&#xff0c;先看最大值。 class Solution…

昇思25天学习打卡营第13天|linchenfengxue

Diffusion扩散模型 关于扩散模型&#xff08;Diffusion Models&#xff09;有很多种理解&#xff0c;本文的介绍是基于denoising diffusion probabilistic model &#xff08;DDPM&#xff09;&#xff0c;DDPM已经在&#xff08;无&#xff09;条件图像/音频/视频生成领域取得…

Qt json和xml操作

学习目标&#xff1a; 认识json和xml读写操作 前置环境 运行环境:qt creator 4.12 学习内容 XML XML&#xff08;Extensible Markup Language&#xff09;是一种标记语言,是一种用于描述数据结构的语言。它非常适合用于存储和传输数据。 XML 的主要特点如下: 可扩展性:XM…

【MySQL系列】VARCHAR 类型详解及其使用策略

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

中英双语介绍伦敦大学学院(University College London,UCL)

中文版 伦敦大学学院&#xff08;UCL&#xff09;简介 位置和周边环境 伦敦大学学院&#xff08;University College London&#xff0c;简称UCL&#xff09;位于英国伦敦市中心的布卢姆斯伯里&#xff08;Bloomsbury&#xff09;区。具体地址为&#xff1a; Gower Street, …

Python 游戏服务器架构优化

优化 Python 游戏服务器的架构涉及多个方面&#xff0c;包括性能、可伸缩性、并发处理和网络通信。下面是一些优化建议&#xff1a; 1、问题背景 在设计 Python 游戏服务器时&#xff0c;如何实现服务器的横向扩展&#xff0c;以利用多核处理器的资源&#xff0c;并确保服务器…

更新GCC版本问题处理(Could not resolve host: mirrorlist.centos.org;)更换SCL配置源/SCL后yum使用不了

SCL&#xff1a; 在 Linux 系统中&#xff0c;更新 GCC&#xff08;GNU Compiler Collection&#xff09;编译器需要使用 Software Collections (SCL) 库的原因主要有以下几点&#xff1a; https://wiki.centos.org/AdditionalResources/Repositories/SCLhttps://wiki.centos…