mysql8通过data文件恢复数据

背景

云服务器中毒,导致mysql停止。只有data文件

备份mysql数据库文件

1、执行打包命令把data文件下载至本地。

zip -r dest.zip /opt/data/mysql

2、在本地虚拟机搭建相同版本的mysql数据库。

下载python脚本转换.ibd文件为sql文件

1、python转换地址https://github.com/ddcw/ibd2sql.git

2、下载python3

3、测试

python3 /opt/ibd2sql/main.py /opt/sfms@002defms/sys_user.ibd --sql > /opt/sys_usr_s.sql

"/opt/ibd2sql/main.py"为python脚本目录。

"/opt/sfms@002defms/sys_user.ibd"为备份的.ibd文件。

"sql" 为生成insert语句。

"ddl"为生成createtable语句。

"/opt/sys_usr_s.sql"为生成sql语句的目录
生成完后查看文件内容是否正确

编写shell脚本批量执行python命令

我的表有一百多张,不可能每张表都执行python 脚本的ddl和sql命令。

所以我在centos虚拟机上编写shell脚本批量执行。
前提是在centos虚拟机上安装python3及上传ibd2sql代码河相关.ibd文件
脚本如下

bash 复制代码
#!/bin/bash
#.ibd文件位置
dir="/opt/sfms@002defms"
tstrc="_c.sql"
tstrs="_s.sql"
path="/opt/bak/"
# 遍历当前目录下的所有文件
for file in $dir/*; do
    # 检查是否是文件
    if [ -f "$file" ]; then
       filePath="$file"
       fileName=$(echo $filePath | rev | cut -d "/" -f 1 | rev)
       fileNames=$(echo $fileName | rev |cut -d"." -f 2 | rev)
       echo "$path"$fileNames"$tstrc"
       python3 /opt/ibd2sql/main.py "$file"  --ddl > "$path"$fileNames"$tstrc"
       python3 /opt/ibd2sql/main.py "$file"  --sql > "$path"$fileNames"$tstrs"
    fi
done

注意给文件赋权限chomd +x file.sh

执行file.sh

编写批量执行sql文件python代码并执

生成的*_c.sql为建表语句。

生成的*_s.sql为insert语句。

如果在navicat执行sql文件会执行很多遍,所以我就写了一个python脚本批量执行多个sql文件。

代码如下:

bash 复制代码
import mysql.connector
import os 
 
# 连接到MySQL数据库
config = {
  'user': 'xx',
  'password': 'wxx*',
  'host': 'xxx',
  'database': 'xx'
}
cnx = mysql.connector.connect(**config)
# 创建一个游标对象
cursor = cnx.cursor()

# 获取文件夹路径
folder_path = '/usr/local'
# 存储所有文件内容的列表
file_contents = []

# 遍历文件夹中的每个文件
for root, dirs, files in os.walk(folder_path):
    for file_name in files:
        file_path = os.path.join(root, file_name)
        # 打开文件并读取内容
        with open(file_path, 'r',encoding='utf-8') as file:
            content = file.read()
            file_contents.append(content)
 
# 打印所有文件内容
for content in file_contents:
    print(content)
    cursor.execute(content)
    

# 提交并关闭连接
cnx.commit()
cursor.close()
cnx.close()

在windows电脑就可以

结束

执行完sql后,新建备份,重装mysql,还原备份

相关推荐
晚枫歌F6 小时前
Dpdk介绍
linux·服务器
哈里谢顿6 小时前
记录一次sql优化记录
mysql
数据大魔方6 小时前
【期货量化实战】日内动量策略:顺势而为的短线交易法(Python源码)
开发语言·数据库·python·mysql·算法·github·程序员创富
Chasing Aurora7 小时前
数据库连接+查询优化
数据库·sql·mysql·prompt·约束
萧曵 丶8 小时前
Next-Key Lock、记录锁、间隙锁浅谈
数据库·sql·mysql·mvcc·可重复读·幻读
工程师老罗8 小时前
龙芯2k0300 PMON取消Linux自启动
linux·运维·服务器
千百元9 小时前
centos如何删除恶心定时任务
linux·运维·centos
莳花微语9 小时前
记录一次OGG进程abended,报错OGG-01431、OGG-01003、OGG-01151、OGG-01296问题的处理
数据库·sql·mysql
萧曵 丶10 小时前
MySQL三大日志系统浅谈
数据库·sql·mysql
oMcLin11 小时前
如何在Manjaro Linux上配置并优化Caddy Web服务器,确保高并发流量下的稳定性与安全性?
linux·服务器·前端