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

备份类型

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

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

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

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

备份数据

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;

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

mysqldump备份指定数据库-B选项

现有hellodb数据库:

通过mysqldump指定hellodb数据,备份到/data/hellodb.sql

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

进入数据库把hellodb删除。

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hellodb            |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> drop database hellodb;
Query OK, 7 rows affected (0.03 sec)

查看hellodb.sql文件中是否有创建库的语句。并导入数据库。与前面相比不用手动创建数据库了,直接导入即可。

这个文件中是有创建库的语句的。可以不用再创建库了,直接导入数据库中就有了hellodb数据库。

mysqldump备份指定所有数据库-A选项

现在有两个自创的数据库文件

先做个备份:备份所有的数据库:-A

[root@Node1 ~]#:mysqldump -uroot -pabc123 -A > /data/alldb.sql
[root@Node1 ~]#:grep -i "create" /data/alldb.sql
......
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `alldb` /*!40100 DEFAULT CHARACTER SET latin1 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `hellodb` /*!40100 DEFAULT CHARACTER SET utf8 */;
CREATE TABLE `classes` (
CREATE TABLE `coc` (
CREATE TABLE `courses` (
CREATE TABLE `scores` (
CREATE TABLE `students` (
CREATE TABLE `teachers` (
CREATE TABLE `toc` (

-A选项是所有的数据库,记录了创建所有的数据库的语句。

然后将数据库目录删除掉:关闭,重启:

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

这时登录数据库要重新查找一下密码

[root@Node1 ~]#:grep password /var/log/mysqld.log 
......
2024-07-06T06:30:26.108061Z 1 [Note] A temporary password is generated for root@localhost: 2O-9G3_yhf<>
[root@Node1 ~]#:mysql -uroot -p'2O-9G3_yhf<>'
......
mysql> 

登录进来重新设置一下密码:先取消密码策略的复杂度

在set设置密码:

这个时候是没有我们的数据hellodb和alldb的。

需要把这个alldb.sql导入进来查看数据库:

[root@Node1 ~]#:mysql -uroot -pabc123 < /data/alldb.sql 
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@Node1 ~]#:mysql -uroot -pabc123 -e "show databases"
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database           |
+--------------------+
| information_schema |
| alldb              |
| hellodb            |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

---end---

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

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

相关文章

【单片机毕业设计选题24045】-基于单片机的种子烘干机的设计与实现

系统功能: 检测温湿度&#xff0c;温度过低开启PTC加热&#xff0c;湿度过高开启风扇通风&#xff0c;红外检测模块监测小动物&#xff0c;发现小动物后蜂鸣器 报警&#xff0c;OLED显示系统信息&#xff0c;蓝牙模块连接手机APP。 系统上电后显示“欢迎使用种子烘干系统请稍…

BAT-致敬精简

什么是bat bat是windows的批处理程序&#xff0c;可以批量完成一些操作&#xff0c;方便快速。 往往我们可以出通过 winR键来打开指令窗口&#xff0c;这里输入的就是bat指令 这里就是bat界面 节约时间就是珍爱生命--你能想象以下2分钟的操作&#xff0c;bat只需要1秒钟 我…

第一周周日总结

题目总结 1.给你一个整数数组 hours&#xff0c;表示以 小时 为单位的时间&#xff0c;返回一个整数&#xff0c;表示满足 i < j 且 hours[i] hours[j] 构成 整天 的下标对 i, j 的数目。 整天 定义为时间持续时间是 24 小时的 整数倍 。 例如&#xff0c;1 天是 24 小时…

人大金仓携手中国一汽引领国产数据库行业新浪潮

在国产化政策的推动下,人大金仓携手中国一汽联合开发更贴近汽车产业特定需求的数据库功能和组件。从2023年2月至今,人大金仓已累计部署690套数据库,适配应用系统170个,支撑中国一汽20多个核心系统和重要系统。目前,中国一汽在国内企业数据库国产化替换率遥遥领先。此次合作为国…

Java的垃圾回收机制解说

Java 内存运行时区域中的程序计数器、虚拟机栈、本地方法栈随线程而生灭&#xff1b;栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的&#xff08;尽管在运行期会由 JIT 编译器进行一些优化&…

微服务的分布式事务解决方案

微服务的分布式事务解决方案 1、分布式事务的理论模型1.1、X/Open 分布式事务模型1.2、两阶段提交协议1.3、三阶段提交协议 2、分布式事务常见解决方案2.1、TCC补偿型方案2.2、基于可靠性消息的最终一致性方案2.3、最大努力通知型方案 3、分布式事务中间件 Seata3.1、AT 模式3.…

LabVIEW的JKI State Machine

JKI State Machine是一种广泛使用的LabVIEW架构&#xff0c;由JKI公司开发。这种状态机架构在LabVIEW中提供了灵活、可扩展和高效的编程模式&#xff0c;适用于各种复杂的应用场景。JKI State Machine通过状态的定义和切换&#xff0c;实现了程序逻辑的清晰组织和管理&#xff…

C语言 -- 深入理解指针(二)

C语言 -- 深入理解指针&#xff08;二&#xff09; 1. 数组名的理解2. 使用指针访问数组3. 一维数组传参的本质4. 冒泡排序5. 二级指针6. 指针数组7. 指针数组模拟二维数组8. 字符指针变量9. 数组指针变量2.1数组指针变量是什么&#xff1f;2.2 数组指针变量怎么初始化 10. 二维…

选择适合的220V转5V电源芯片,220V转5V非隔离降压电源ic

#### 问题&#xff1a; 在设计一个需要将220V交流电转换为5V直流电的电路时&#xff0c;我应该选择哪种型号的电源芯片&#xff1f;我需要输出电流在200mA以内&#xff0c;有没有推荐的型号&#xff1f; #### 答案&#xff1a; 在220V交流电转换为5V直流电的应用中&#xff0c…

经典的layui框架,还有人用吗?令人惋惜。

自从layui官网宣布关闭之后&#xff0c;layui框架的用户飞速下滑&#xff0c;以至于到现在贝格前端工场承接的项目中&#xff0c;鲜有要求使用layui框架的&#xff0c;那么个框架还有人用吗&#xff1f; 一、layui没落是不是jquery惹的祸 layui的没落与jQuery无关。layui框架…

基于springboot+vue+uniapp的贵工程寝室快修小程序

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…

(二)、python程序--基金看板

一、绪论 获取基金数据并展示。 已实现功能&#xff1a; 1、获取基金名称以列表的方式展示&#xff0c;可按照类型筛选&#xff0c;也可以直接搜索&#xff1b; 2、点击左侧基金名称展示日线&#xff0c;移动鼠标竖线跟着移动&#xff0c;并且显示对应日期的基金数据&#…

[数仓]三、离线数仓(Hive数仓系统)

第1章 数仓分层 1.1 为什么要分层 DIM&#xff1a;dimensionality 维度 1.2 数据集市与数据仓库概念 1.3 数仓命名规范 1.3.1 表命名 ODS层命名为ods_表名DIM层命名为dim_表名DWD层命名为dwd_表名DWS层命名为dws_表名 DWT层命名为dwt_表名ADS层命名为ads_表名临时表命名为…

植物大战僵尸融合嫁接版 MAC 版本下载安装详细教程

继植物大战僵尸杂交版火了之后&#xff0c;PVZ改版可谓是百花齐放&#xff0c;最近又有一个非常好玩的模式被开发出来了&#xff0c;他们称为《植物大战僵尸融合嫁接版》 该版本并没有对植物卡牌做改动&#xff0c;而是可以将任意两种植物叠放到一起进行融合&#xff0c;产生新…

(附源码)springboot共享单车管理系统-计算机毕设 65154

springboot共享单车管理系统 摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于共享单车管理系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了共享单车管理系…

ES7210高性能四通道音频ADC转换模拟麦克风为IIS数字咪头

特征 高性能多位 Delta-Σ 音频 ADC 102 dB 信噪比 -85 分贝 THDN 24 位&#xff0c;8 至 100 kHz 采样频率 I2S/PCM 主串行数据端口或从串行数据端口 支持TDM 256/384Fs、USB 12/24 MHz 和其他非标准音频系统时钟 低功耗待机模式 应用 麦克风阵列 智能音箱 远场语音捕获 订购…

桑基气泡图 – 5个维度展示KEGG通路富集结果

2022年发表在《Nature communication》上的文章Kir2.1-mediated membrane potential promotes nutrient acquisition and inflammation through regulation of nutrient transporters fig1i使用微生信平台绘制了一张图&#xff0c;我们将其命名为“桑基气泡图”。从此&#xff…

低代码和制造企业数字化转型成功的关系是什么

针对制造企业特别繁多的应用场景、特别大量的数据以及特别复杂的业务流程等特性&#xff0c;低代码能够更贴合制造企业的应用需求&#xff0c;更符合低代码平台为企业带来的价值&#xff0c;即(低代码平台)即服务。 用低代码与平台的融合力量搭建起企业敏捷的数字底座&#xff…

14-22 剑和远方2 - 深度神经网络中的学习机制

概论 在第一部分中&#xff0c;我们深入探讨了人工智能的兴衰简史以及推动人工智能发展的努力。我们研究了一个简单的感知器&#xff0c;以了解其组件以及简单的 ANN 如何处理数据和权重层。在简单的 ANN 中&#xff0c;不会对数据执行特定操作。ANN 中的激活函数是一个线性函…

Node.js_fs模块

文件删除 文件重命名和移动&#xff08;本质都是修改路径&#xff09; 文件夹操作 创建文件夹(mkdir) 读取文件夹(readdir) &#xff08;打印出来是该文件夹下名称的数组形式&#xff09; 读取当前的文件夹(readdir) 删除文件夹 &#xff08;rmdir&#xff09; 查看资源状态…