拓冰建站拓冰建站
首页 / 资讯中心 / 正文

笔记:在一次性测试虚拟机中模拟 MySQL 实例损坏后的逻辑恢复

操作(以虚拟机Centos7,MySQL 版本MySQL 8.0.26为例)且以下删除数据目录的操作会永久删除当前 MySQL 实例中的数据只能在已确认无重要数据的测试虚拟机中执行。全库备份大概流程(登录MySQL并查看文件位置 - 创建专门备份的目录并执行备份 - 模拟数据库丢失情况 - 开始恢复)一、登录MySQL并查看文件位置1. 登录 mysqlmysql -u root -p2. 查看数据文件的位置show global variables like %datadir%;3.查看该目录下的数据库文件(可选)sudo -i# 切换到 root 用户因为普通用户没有权限cd /var/lib/mysql/# 进入目录ls -l# 查看里面的文件二、创建专门备份的目录并执行备份(有些情况下可以直接复制粘贴这里是代码完成)1. 创建一个专门存放备份的目录以 /home/hadoop/backup 为例备份文件不要写入/var/lib/mysql(自己的MySQL 数据目录)避免与 MySQL 数据文件混淆。mkdir -p /home/hadoop/backup2. 先离开 MySQL 的数据目录避免混淆cd /root3. 执行全库逻辑备份命令导出所有数据库备份之前要确保MySQL已经启动mysqldump -u root -p --all-databases /home/hadoop/backup/all_databases_$(date %Y%m%d).sql回车后系统会提示 Enter password:输入你的 MySQL root 密码输入时不显示字符输完直接回车。这条命令会把 mysql、sys 以及你创建的数据库全部导出为一个 .sql 文件并在文件名后自动加上今天的日期。(注简单测试可以直接用--all-databases补充mysqldump -u root -p \--all-databases \--single-transaction \--routines \--events \--triggers \--hex-blob \--result-file/home/hadoop/backup/all_databases_$(date %Y%m%d).sql说明--single-transaction对 InnoDB 表进行一致性快照减少备份过程中数据不一致的可能。--routines备份存储过程和存储函数。--events备份事件。--triggers备份触发器。通常默认启用但显式写出来更清晰。 --hex-blob避免二进制字段导入时出现问题。 --result-file比 shell 的 更适合写入备份文件。)4. 修改备份目录的权限现在是 root 用户备份文件默认属于 root。因为平时用 hadoop 用户登录如果不改权限以后可能无法查看或移动这些备份文件。chown -R hadoop:hadoop /home/hadoop/backup5. 执行完备份命令后可以输入以下命令查看ls -lh /home/hadoop/backup/三、模拟数据库丢失情况(尝试删除一个数据库-退出-停掉数据库服务(sudo systemctl stopmysqld))停掉之后可以用该语句查看MySQL的状态sudo systemctl status mysqld四、开始恢复1. 确认备份文件已经存在且完整再次检查之前备份的文件ls -lh /home/hadoop/backup/确认 .sql 文件大小正常不为 0。2. 执行删除命令确认无误后删除目录下的所有文件rm -rf /var/lib/mysql/*注意⭐️该操作只能在一次性的测试虚拟机中执行不要在生产服务器上直接执行。正式环境应优先使用虚拟机快照、备份副本或迁移后的数据目录进行恢复演练。3. 删除后怎么办数据库无法启动了删除这些文件后MySQL 服务是无法直接启动的因为它缺少了系统表。你需要重新初始化数据库# 重新初始化 MySQL 数据目录mysqld --initialize --usermysql# 重新启动服务sudo systemctl start mysqld# 查看临时生成的 root 密码初始化时会生成一个临时密码在日志里(sudo) grep temporary password /var/log/mysqld.log(注最底下的是最新生成的临时密码其时间看着会与本地时间存在差异原因在于系统时区UTC与你的本地时区UTC8存在 8 小时时差)修改文件权限chown -R mysql:mysql /var/lib/mysql# 使用临时密码登录并修改密码mysql -u root -p修改 root 密码登录成功后看到 mysql 提示符输入ALTER USER rootlocalhost IDENTIFIED BY Root123456(随机强密码即可); #修改密码恢复备份数据回到 Linux 终端[rootslave01 ~]#执行刚才准备好的恢复命令mysql -u root -p /home/hadoop/backup/all_databases_20260910.sql(/home/hadoop/backup/自己备份文件所在目录all_databases_20260910.sql备份成功的文件名)可以通过ls -l查看恢复前后的结果修改文件权限因为刚才都是用 root 在操作为了防止 hadoop 用户以后用不了执行一下chown -R hadoop:hadoop /home/hadoop/backup单库备份一、制造测试数据为了验证备份确实包含表结构和数据先在数据库中创建测试表并插入测试数据。(操作环境Linux 终端 - MySQL)1. 登录 MySQL在 Linux 终端输入mysql -u root -p(输入密码进入 mysql)2. 创建测试表和测试数据在 mysql 里输入USE itheima;-- 为了防报错如果表存在先删掉DROP TABLE IF EXISTS test_student;-- 建一张简单的测试表CREATE TABLE test_student (id INT PRIMARY KEY,name VARCHAR(20));-- 插入测试数据INSERT INTO test_student VALUES (1, 张三), (2, 李四);-- 确认数据存在应该能看到两行数据SELECT * FROM test_student;-- 退出 MySQLexit;二、执行单库备份(操作环境Linux 终端)1. 回到安全的目录cd /root2. 执行单库备份命令mysqldump -u root -p itheima /home/hadoop/backup/itheima_full_$(date %Y%m%d).sql(回车后输入密码。这里假设你是用普通用户 hadoop如果是 root 用户不需要加 sudo)3. 验证备份文件是否包含数据极其重要# 看看文件大小应该大于 1KBls -lh /home/hadoop/backup/# 查看文件内容寻找 CREATE TABLE 和 INSERT 语句grep -E CREATE TABLE|INSERT INTO /home/hadoop/backup/itheima_full_*.sql如果能看到类似 CREATE TABLE test_student 和 INSERT INTO test_student VALUES... 的字样说明备份成功。4. 修改备份目录权限防止 hadoop 用户以后无法读取sudo chown -R hadoop:hadoop /home/hadoop/backup三、模拟误删(操作环境Linux 终端 - MySQL)1. 登录 MySQLmysql -u root -p2. 删除数据库DROP DATABASE itheima;SHOW DATABASES;-- 确认 itheima 已经没了exit;四、开始恢复(操作环境Linux 终端 - MySQL - Linux 终端)关键差异因为我是用 mysqldump -u root -p itheima 这种格式备份的备份文件里只有建表和数据没有建库语句所以在导入前必须手动先建一个空库。1. 先创建一个空库在 Linux 终端执行mysql -u root -p -e CREATE DATABASE itheima;(输入密码这里的 -e 参数表示直接执行引号里的 SQL 并退出)2. 把备份文件导入这个空库在 Linux 终端执行mysql -u root -p itheima /home/hadoop/backup/itheima_full_20260914.sql(输入密码如果没有报错说明导入成功。注意 的方向不要写反了)3. 验证恢复结果在 MySQL 里执行mysql -u root -pUSE itheima;SHOW TABLES;-- 应该能看到 test_student 表SELECT * FROM test_student;-- 应该能看到 张三 和 李四exit;五、收尾工作(操作环境Linux 终端)如果全程都是 root 权限操作最后需要再次把备份目录权限还给普通用户(如果全程都是在普通用户下执行的话就不需要执行这一步)sudo chown -R hadoop:hadoop /home/hadoop/backup
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门