mysql数据库自动备份且恢复破坏数据方法

介绍数据库自动备份以及数据库被破坏后的恢复的方法。在这里,我们使用mysqlhotcopy,并且定义一段Shell脚本来实现数据库的自动备份,并且,让整个数据自动备份与数据恢复过程都基于Shell。

建立备份所需条件

[1] 建立自动备份脚本

在这里,为了使数据库备份和恢复的符合我们的实际要求,用一段符合要求的Shell脚本来实现整个备份过程的自动化。

 代码如下复制代码 [root@CentOS ~]# vi -backup.sh ← 建立数据库自动备份脚本,如下:
#!/bin/bash
PATH=/usr/local/sbin:/usr/bin:/bin
# The Directory of Backup
BACKDIR=/backup/mysql
# The Password of MySQL
ROOTPASS=******** 此处请将星号替换成MySQL的root密码
# Remake the Directory of Backup
rm -rf $BACKDIR
mkdir -p $BACKDIR
# Get the Name of Database
DBLIST=`ls -p /var/lib/mysql | grep / | tr -d /`
# Backup with Database
for dbname in $DBLIST
do
mysqlhotcopy $dbname -u root -p $ROOTPASS $BACKDIR | logger -t mysqlhotcopy
done

[2] 运行数据库自动备份脚本

 代码如下复制代码

[root@CentOS ~]# chmod 700 mysql-backup.sh 改变脚本属性,让其只能让root用户执行
[root@CentOS ~]# ./mysql-backup.sh 运行脚本
[root@CentOS ~]# ls -l /backup/mysql/ 确认一下是否备份成功
total 8
drwxr-x— 2 mysql mysql 4096 Sep 1 16:54 mysql 已成功备份到/backup/mysql目录中

[3] 让数据库备份脚本每天自动运行

[root@sample ~]# crontab -e ← 编辑自动运行规则(然后会出现编辑窗口,操作同vi)
00 03 * * * /root/mysql-backup.sh 添加这一行到文件中,让数据库备份每天凌晨3点进行

 

怪兽AI数字人 怪兽AI数字人

数字人短视频创作,数字人直播,实时驱动数字人

怪兽AI数字人 44 查看详情 怪兽AI数字人

测试自动备份正常运转与否(备份恢复的方法)

这里,以通过实际操作的过程来介绍问题出现后的恢复方法。

[1] 当数据库被删除后的恢复方法

首先建立一个测试用的数据库。

 代码如下复制代码 [root@CentOS ~]# mysql -u root -p ← 用root登录到MySQL服务器
Enter password: ← 输入MySQL的root用户密码
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 8 to server version: 4.1.20
Type ‘help;’ or ‘h’ for help. Type ‘c’ to clear the buffer.
mysql> create database test; ← 建立一个测试用的数据库test
Query OK, 1 row affected (0.00 sec)
mysql> use test ← 连接到这个数据库
Database changed
mysql> create table test(num int, name varchar(50)); ← 在数据库中建立一个表
Query OK, 0 rows affected (0.07 sec)
mysql> insert into test values(1,’Hello,CentOS’); ← 插入一个值到这个表(这里以“Hello,CentOS”为例)
Query OK, 1 row affected (0.02 sec)
mysql> * from test; ← 查看数据库中的内容
+——+—————–+
| num | name |
+——+—————–+
|1 | Hello,Centos | ← 确认刚刚插入到表中的值的存在
+——+——————+
1 row in set (0.01 sec)
mysql> exit ← 退出MySQL服务器
Bye

然后,运行刚才建立的数据库备份脚本,备份刚刚建立的测试用的数据库。

[root@sample ~]# cd ← 回到脚本所在的root用户的根目录
[root@sample ~]# ./mysql-backup.sh ← 运行脚本进行数据库备份

接下来,我们再次登录到MySQL服务器中,删除刚刚建立的测试用的数据库test,以便于测试数据恢复能否成功。

 代码如下复制代码 [root@Centos ~]# mysql -u root -p ← 用root登录到MySQL服务器
Enter password: ← 输入MySQL的root用户密码
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 13 to server version: 4.1.20
Type ‘help;’ or ‘h’ for help. Type ‘c’ to clear the buffer.
mysql> use test ← 连接到测试用的test数据库
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> drop table test; ← 删除数据中的表
Query OK, 0 rows affected (0.04 sec)
mysql> drop database test; ← 删除测试用数据库test
Query OK, 0 rows affected (0.01 sec)
mysql> show databases;
+—————+
| Database |
+—————+
| mysql | ← 确认测试用的test数据库已不存在、已被删除
+—————+
1 row in set (0.01 sec)
mysql> exit ← 退出MySQL服务器
Bye

以上,我们就等于模拟了数据库被破坏的过程。接下来,是数据库被“破坏”后,用备份进行恢复的方法。

[root@Centos ~]# /bin/cp -Rf /backup/mysql/test/ /var/lib/mysql/ ← 复制备份的数据库test到相应目录
[root@Centos ~]# chown -R mysql:mysql /var/lib/mysql/test/ ← 改变数据库test的归属为mysql
[root@Centos ~]# chmod 700 /var/lib/mysql/test/ ← 改变数据库目录属性为700
[root@Centos ~]# chmod 660 /var/lib/mysql/test/* ← 改变数据库中数据的属性为660

然后,再次登录到MySQL服务器上,看是否已经成功恢复了数据库。

 代码如下复制代码

[root@CentOS ~]# mysql -u root -p ← 用root登录到MySQL服务器
Enter password: ← 输入MySQL的root用户密码
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 14 to server version: 4.1.20
Type ‘help;’ or ‘h’ for help. Type ‘c’ to clear the buffer.
mysql> show databases; ← 查看当前存在的数据库
+————-+
| Database |
+————-+
| mysql |
| test | ← 确认刚刚被删除的test数据库已经成功被恢复回来!
+————+
2 rows in set (0.00 sec)
mysql> use test ← 连接到test数据库
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables; ← 查看test数据库中存在的表
+——————-+
| Tables_in_test |
+——————-+
| test |
+——————-+
1 row in set (0.00 sec)
mysql> select * from test; ← 查看数据库中的内容
+——+———————+
| num | name |
+——+———————+
| 1 | Hello,CentOS | ← 确认数据表中的内容与删除前定义的“Hello,CentOS”一样!
+——+———————+
1 row in set (0.01 sec)
mysql> exit ← 退出MySQL服务器
Bye

以上结果表示,数据库被删除后,用备份后的数据库成功的将数据恢复到了删除前的状态

 

2] 当数据库被修改后的恢复方法

数据库被修改,可能存在着多方面的原因,被入侵、以及相应程序存在Bug等等,这里不作详细介绍。这里将只介绍在数据库被修改后,如果恢复到被修改前状态的方法。

具体和上面所述的“数据库被删除后的恢复方法”相类似。这里,测试用数据库接着使用刚刚在前面用过的test。这里为了使刚刚接触数据库的朋友不至于理解混乱,我们再次登录到MySQL服务器上确认一下刚刚建立的测试用的数据库test的相关信息。

 代码如下复制代码 [root@CentOS ~]# mysql -u root -p ← 用root登录到MySQL服务器
Enter password: ← 输入MySQL的root用户密码
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 14 to server version: 4.1.20
Type ‘help;’ or ‘h’ for help. Type ‘c’ to clear the buffer.
mysql> show databases; ← 查看当前存在的数据库
+————-+
| Database |
+————-+
| mysql |
| test |
+————+
2 rows in set (0.00 sec)
mysql> use test ← 连接到test数据库
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables; ← 查看test数据库中存在的表
+——————-+
| Tables_in_test |
+——————-+
| test |
+——————-+
1 row in set (0.00 sec)
mysql> select * from test; ← 查看数据库中的内容
+——+——————–+
| num | name |
+——+——————–+
| 1 | Hello,CentOS|
+——+——————–+
1 row in set (0.01 sec)
mysql> exit ← 退出MySQL服务器
Bye

然后,我们再次运行数据库备份脚本,将当前状态的数据库,再做一次备份。

[root@CentOS ~]# cd ← 回到脚本所在的root用户的根目录
[root@CentOS ~]# ./mysql-backup.sh ← 运行脚本进行数据库备份

接下来,我们再次登录到MySQL服务器中,对测试用的数据库test进行一些修改,以便于测试数据恢复能否成功。

 代码如下复制代码 [root@sample ~]# mysql -u root -p ← 用root登录到MySQL服务器
Enter password: ← 输入MySQL的root用户密码
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 15 to server version: 4.1.20
Type ‘help;’ or ‘h’ for help. Type ‘c’ to clear the buffer.
mysql> use test ← 连接到test数据库
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> update test set name=’Shit,Windows’; ← 然后将test中表的值重新定义为“Shit,Windows”(原来为“Hello,CentOS”)
Query OK, 1 row affected (0.07 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from test; ← 确认test中的表被定义的值
+——+——————–+
| num | name |
+——+——————-+
| 1 | Shit,Windows | ← 确认已经将原test数据库表中的值修改为新的值“Shit,Windows”
+——+——————-+
1 row in set (0.00 sec)
mysql> exit ← 退出MySQL服务器
Bye

以上,我们就等于模拟了数据库被篡改的过程。接下来,是数据库被“篡改”后,用备份进行恢复的方法。

[root@CentOS ~]# /bin/cp -Rf /backup/mysql/test/ /var/lib/mysql/ ← 复制备份的数据库test到相应目录

然后,再次登录到MySQL服务器上,看数据库是否被恢复到了被“篡改”之前的状态。

 代码如下复制代码 [root@CentOS ~]# mysql -u root -p ← 用root登录到MySQL服务器
Enter password: ← 输入MySQL的root用户密码
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 16 to server version: 4.1.20
Type ‘help;’ or ‘h’ for help. Type ‘c’ to clear the buffer.
mysql> use test ← 连接到test数据库
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from test; ← 查看数据库中的内容
+——+—————-+
| num | name |
+——+—————-+
| 1| Hello,CentOS | ← 确认数据表中的内容与被修改前定义的“Hello,CentOS”一样!
+——+—————-+
1 row in set (0.01 sec)
mysql> exit ← 退出MySQL服务器
Bye

以上结果表示,数据库被修改后,用备份后的数据库成功的将数据恢复到了被“篡改”前的状态。

测试后…

测试完成后,将测试用过的遗留信息删除。

 代码如下复制代码 [root@CentOS ~]# mysql -u root -p ← 用root登录到MySQL服务器
Enter password: ← 输入MySQL的root用户密码
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 19 to server version: 4.1.20
Type ‘help;’ or ‘h’ for help. Type ‘c’ to clear the buffer.
mysql> use test ← 连接到test数据库
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> drop table test; ← 删除test数据库中的表
Query OK, 0 rows affected (0.01 sec)
mysql> drop database test; ← 删除测试用数据库test
Query OK, 0 rows affected (0.00 sec)
mysql> show databases; ← 查看当前存在的数据库
+————-+
| Database |
+————-+
| mysql | ← 确认测试用数据库test不存在、已被删除
+————-+
1 row in set (0.00 sec)
mysql> exit ← 退出MySQL服务器
Bye

以上介绍了用我们自己建立的一段Shell脚本,通过mysqlhotcopy来备份数据库的方法。

对于许多个人爱好者来说,组建服务器可能不是很考虑数据被破坏以及数据被破坏后的恢复工作。但不能不说,对于服务器来说,数据破坏后的恢复效率也是区 别业余和专业的因素之一。所以笔者建议,在您配置好了Web服务器以及MySQL服务器等等的时候,千万不要急于应用它,而要想办法在有限的(硬件、软件)条件下使它“坚不可摧”之后,再考虑应用的问题。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/492199.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月8日 16:02:59
下一篇 2025年11月8日 16:14:42

相关推荐

  • 如何在mysql中定期清理过期备份文件

    通过Shell脚本结合cron定时任务实现MySQL过期备份文件自动清理,首先统一备份命名格式(如backup_20250405.sql)并存放在指定目录(/data/backup/mysql),然后编写脚本使用find命令删除7天前的.sql文件,配置每日凌晨2点执行的cron任务,并加入日志记录…

    2025年12月6日 数据库
    000
  • mysql如何备份存储过程和函数

    最直接且推荐的方式是使用mysqldump工具并添加–routines参数,可完整导出存储过程和函数;若需跨版本迁移,应结合–triggers、处理DEFINER用户、验证SQL_MODE,并在测试环境充分验证恢复与兼容性。 MySQL备份存储过程和函数,最直接且推荐的方式是…

    2025年12月6日 数据库
    000
  • MySQL如何设置自动备份 MySQL定时自动备份的配置与恢复测试

    mysql自动备份的配置与恢复测试方案是通过linux的crontab结合mysqldump命令实现定时备份,具体步骤如下:1. 编写备份脚本backup_mysql.sh,设置数据库连接信息、备份路径,并使用mysqldump配合gzip压缩导出数据,同时用find命令删除7天前的旧备份;2. 为…

    2025年12月2日
    000
  • MySQL开源备份工具Xtrabackup备份部署

    Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好   xtrabackup是一个对innodb做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具innodb hotback…

    数据库 2025年12月2日
    000
  • Mydumper:MySQL多线程逻辑备份与恢复

    MySQL多线程逻辑备份 Mydumper简介 mydumper是一个多线程的mysql逻辑备份工具. 逻辑备份速度非常快(跟mysqldump相比) myisam MySQL多线程逻辑备份 Mydumper简介 mydumper是一个多线程的mysql逻辑备份工具. Mydumper安装# yum…

    2025年12月2日 数据库
    000
  • MySQL数据库备份之复制

    MySQL数据库备份之复制目录:1.MySQL复制简介2.MySQL复制的优势与思路3.数据复制环境之主服务器设置4.数据复制环境之从服务器设置5.创建复制帐号6.获取主服务器二 3.数据复制环境之主服务器设置 在实际的生产环境中,可能在我们还没有部署数据复制前,数据库中就已经存在大量数据,所以,这…

    2025年12月2日
    000
  • 企业之Mysql备份恢复

    为什么要备份:备份的几个重要理由:灾难恢复、需求改变、审计、测试等;如测试定期用最新的生产环境中的数据更新到测试环境服务器需要考虑的问题:1、在不导致严 7、对于安全性要考虑周全,如果有人能接触到生产服务器,他是否能访问备份服务器 使用Mysqldump备份工具实现完全备份,并结合二进制日志实现增量…

    2025年12月2日
    000
  • 如何在mysql中备份多库数据

    使用mysqldump可高效备份多个MySQL数据库,通过–databases参数指定多个库或–all-databases备份全部,结合–no-data或–no-create-info控制导出内容,并建议添加时间戳避免文件覆盖,确保数据安全。 在 My…

    2025年12月2日 数据库
    000
  • mysql备份文件损坏怎么恢复_mysql备份文件损坏后如何尝试恢复数据

    恢复难度取决于损坏程度和备份方式。首先确认文件类型与损坏位置,通过file、head命令检查,并测试导入以定位问题;若为部分损坏的SQL备份,可拆分文件、提取有效INSERT语句或逐行导入抢救数据;对于物理备份损坏,尝试innodb_force_recovery启动、Percona工具恢复或在新实例…

    2025年12月2日 数据库
    000
  • mysql备份文件如何加密_mysql备份加密操作方法

    答案:MySQL备份加密可通过GPG、OpenSSL、自动化脚本及云服务实现。先用mysqldump导出数据,再用gpg或openssl对文件加密,或通过管道即时加密;生产环境可结合Shell脚本自动备份并删除明文;云数据库可启用KMS驱动的TDE实现自动加密,确保备份安全。 MySQL备份文件加密…

    2025年12月2日 数据库
    000
  • mysql数据怎么备份_mysql数据库备份与恢复操作指南

    使用mysqldump可进行逻辑备份,支持单库、全库、仅结构备份及压缩备份;2. 恢复时通过source命令导入SQL文件,压缩文件需先解压或直接解压导入;3. 可结合定时任务实现自动备份与旧文件清理,定期验证备份完整性以确保数据安全。 MySQL数据库的备份与恢复是保障数据安全的核心操作。一旦出现…

    2025年12月2日 数据库
    000
  • mysql备份时如何保证数据一致性_mysql备份数据一致性方法

    使用InnoDB事务一致性读,通过START TRANSACTION WITH CONSISTENT SNAPSHOT确保数据逻辑一致;2. 用mysqldump –single-transaction实现无锁备份,适用于大并发InnoDB环境;3. 对MyISAM等非事务表采用&#82…

    2025年12月2日 数据库
    000
  • mysql备份和恢复对性能的影响_mysql备份恢复性能优化

    合理设计备份恢复策略可降低对MySQL性能的影响。备份时IO、CPU、锁表和内存竞争会增加系统负载;恢复时事务日志重放、磁盘写入、索引重建及并发冲突构成瓶颈。优化措施包括:使用XtraBackup热备、限速备份、错峰执行、增量备份、并行压缩;恢复时预分配空间、临时关闭关键参数、分阶段导入、SSD存储…

    2025年12月2日 数据库
    000
  • mysql备份时如何避免数据丢失_mysql备份数据安全方法

    使用一致性备份、定期验证、启用binlog和多副本异地存储可有效防止MySQL数据丢失。通过XtraBackup或mysqldump加事务参数确保备份一致性,定期在测试环境恢复验证数据完整性,开启二进制日志实现全量+增量的点对点恢复,并将至少三份数据存于两种介质且一份异地,结合自动化监控与加密传输,…

    2025年12月2日 数据库
    000
  • mysql备份恢复性能优化_mysql备份恢复性能优化方法

    选择合适备份工具并优化策略可显著提升MySQL备份恢复性能:优先使用Percona XtraBackup进行在线热备,结合全量与增量备份降低负载,通过多线程工具压缩、调整InnoDB参数加快恢复速度,利用SSD和独立存储避免I/O争抢,恢复后及时验证数据一致性。 MySQL备份与恢复的性能直接影响数…

    2025年12月2日 数据库
    000
  • MySQL逻辑备份恢复方法简单总结

    一、Mysql逻辑备份 1. 使用mysqldump命令生成INSERT语句备份 此方法类似于Oracle的expdp\exp工具 语法如下: mysqldump [argum 一、mysql逻辑备份   1. 使用mysqldump命令生成insert语句备份 此方法类似于oracle的expdp…

    数据库 2025年12月2日
    000
  • MySQL 备份与还原详解

    mysqldump 逻辑备份工具,支持所有引擎,MyISAM引擎是温备,InnoDB引擎是热备,备份速度中速,还原速度非常非常慢,但是在实现还 大纲 一、MySQL备份类型 二、MySQL备份都备份什么? 三、MySQL备份工具 四、MySQL备份策略 五、备份准备工作 六、备份策略具体演示 注:系…

    2025年12月2日 数据库
    000
  • MySQL备份还原参数详解

    #Windows下mysql备份还原,可不用修改my.ini来还原视图(已验证)mysqldump -uroot -p123 –default-character-set=gbk –opt –ex #windows下mysql备份还原,可不用修改my.ini来还原…

    数据库 2025年12月2日
    000
  • MySQL umask 导致备份报错

    但MySQL对于新创建的数据库目录的权限为 700;数据表文件为660;这可让我们摸不著头脑啦。难道MySQL不依赖系统自己设定的值?参考 备份工具仅限于xtrabackup(2.0+) umask 大家并不陌生,它设定的文件(目录)的默认权限;一般新创建的目录权限为755,,文件为644; 但My…

    2025年12月2日 数据库
    000
  • MySQL怎样备份和恢复数据库 基础数据保护方法详解

    mysql数据库备份与恢复的核⼼答案是:通过选择合适的备份策略和工具,定期执行备份并验证其有效性,确保数据在丢失或损坏时可快速恢复。1. 备份策略包括全量备份、增量备份和差异备份,应根据数据更新频率、备份窗口和恢复要求选择合适方案,如高频更新的电商系统可采用每周全量加每日增量的方式;2. 使用mys…

    2025年12月2日 数据库
    000

发表回复

登录后才能评论
关注微信