Linux中修改mysql数据表

需求描述:项目中需要用新的板子替换掉旧的板子。旧板已在生产环境中使用,新板需要同步旧板的数据库数据

为了方便客户操作,计划通过shell脚本+u盘实现上述需求:

(1)在旧板插入u盘后,自动调用u盘中的脚本,获取旧板上的mysql数据库中的某个数据表

(2)然后在新板插入u盘,用新的数据表替换

(3)需要另写一个程序:识别u盘的拔插,以及根据ini配置文件自动执行u盘中的对应的脚本

这样在运行程序后,客户只需要拔插u盘就能实现数据库替换

本文主要介绍(1)(2)两步的实现过程

板子系统环境:ubuntu20.04

实现思路:通过mysqldump工具将旧板上的数据表导出到u盘,同样也是通过mysqldump将u盘中的数据表导入到新板上

一、mysqldump介绍

mysqldump 是 MySQL 提供的一个命令行工具,用于备份 MySQL 数据库或表的内容。它可以将数据库或表的数据导出为 SQL 文件,该文件包含创建表和插入数据的 SQL 语句。mysqldump 既可以用于数据库的备份,也可以用于数据库迁移和数据恢复。

基本用法

1、备份整个数据库

bash 复制代码
mysqldump -u 用户名 -p 数据库名 > 备份文件.sql
bash 复制代码
##示例
mysqldump -u root -p mydb > mydb_backup.sql

2、备份多个数据库

bash 复制代码
mysqldump -u 用户名 -p --databases 数据库1 数据库2 > 备份文件.sql
bash 复制代码
##示例
mysqldump -u root -p --databases db1 db2 > multi_db_backup.sql

3、备份所有数据库

bash 复制代码
mysqldump -u 用户名 -p --all-databases > 备份文件.sql
bash 复制代码
##示例
mysqldump -u root -p --all-databases > all_db_backup.sql

4、备份单个表

bash 复制代码
mysqldump -u 用户名 -p 数据库名 表名 > 备份文件.sql
bash 复制代码
##示例
mysqldump -u root -p mydb mytable > mytable_backup.sql

项目中的需要比较简单,只需要替换掉一个数据表

二、获取旧板上的数据表

实现脚本

bash 复制代码
#!/bin/bash

#此脚本用于将设备上的数据表拷贝出来

DB_NAME="Gateway"            # 数据库名
TABLE_NAME="PortInfo"        # 要拷贝的数据表名
USB_PATH="/userdata/workspace/runningspace/Upgrade" # U 盘挂载路径
DB_USER="root"                 # 数据库用户名
DB_PASS="???"             # 数据库密码
SQL_FILE="${TABLE_NAME}_export.sql"

# --- 1. 环境检查与自动安装 ---
# 检查 mysqldump 命令是否存在
if ! command -v mysqldump &> /dev/null; then
    echo "未检测到 mysqldump 工具,正在尝试安装..."
    
    # 更新软件源并安装 mysql-client (包含 mysqldump)
    sudo apt-get update && sudo apt-get install -y mysql-client
    
    # 再次检查安装是否成功
    if [ $? -ne 0 ]; then
        echo "错误: 无法安装 mysql-client,请检查网络连接或权限。"
        exit 1
    fi
    echo "mysqldump 安装成功。"
else
    echo "检测到 mysqldump 已存在,跳过安装。"
fi

# --- 2. 挂载检查 ---
if [ ! -d "$USB_PATH" ]; then
    echo "错误: 未找到 U 盘挂载路径 $USB_PATH"
    exit 1
fi

# --- 3. 执行导出 ---
echo "正在导出表 ${TABLE_NAME}..."

# 使用 mysqldump 导出
mysqldump -u${DB_USER} -p${DB_PASS} ${DB_NAME} ${TABLE_NAME} > "${USB_PATH}/${SQL_FILE}"

if [ $? -eq 0 ]; then
    echo "成功:表已保存至 ${USB_PATH}/${SQL_FILE}"
    # 强制刷盘,确保数据真正写入 U 盘
    sync
else
    echo "失败:导出过程中出现错误。"
    exit 1
fi

三、替换新板上的数据表

实现脚本

bash 复制代码
#!/bin/bash

#此脚本用于将u盘上的数据表导入到设备

DB_NAME="Gateway"                      # 数据库名
TABLE_NAME="PortInfo"                  #数据表名
USB_PATH="/userdata/workspace/runningspace/Upgrade"
DB_USER="root"
DB_PASS="EmbedSky"
SQL_FILE="${TABLE_NAME}_export.sql"
BACKUP_FILE="${TABLE_NAME}_local_bak.sql"


if [ ! -f "${USB_PATH}/${SQL_FILE}" ]; then
    echo "错误: U 盘中不存在文件 ${SQL_FILE}"
    exit 1
fi

# 1. 备份设备 2 现有的表(以防万一)
echo "正在备份设备 2 原有的表数据..."
mysqldump -u${DB_USER} -p${DB_PASS} ${DB_NAME} ${TABLE_NAME} > "/tmp/${BACKUP_FILE}" 2>/dev/null

if [ $? -eq 0 ]; then
    echo "原有表已备份至 /tmp/${BACKUP_FILE}"
else
    echo "提示:原表不存在或备份跳过,准备直接导入。"
fi

# 2. 导入 U 盘中的数据
# mysqldump 默认生成的 SQL 包含 DROP TABLE IF EXISTS,所以会自动替换
echo "正在从 U 盘恢复表数据..."
mysql -u${DB_USER} -p${DB_PASS} ${DB_NAME} < "${USB_PATH}/${SQL_FILE}"

if [ $? -eq 0 ]; then
    echo "成功:表 ${TABLE_NAME} 已成功替换!"
else
    echo "错误:导入失败,请检查数据库权限或 SQL 文件。"
    exit 1
fi
相关推荐
Alvin千里无风4 小时前
在 Ubuntu 上从源码安装 Nanobot:轻量级 AI 助手完整指南
linux·人工智能·ubuntu
J2虾虾5 小时前
MySQL的基本操作
数据库·mysql
杨云龙UP5 小时前
Oracle 中 NOMOUNT、MOUNT、OPEN 怎么理解? 在不同场景下如何操作?_20260402
linux·运维·数据库·oracle
Amctwd5 小时前
【Linux】OpenCode 安装教程
linux·运维·服务器
2601_949815336 小时前
MySQL输入密码后闪退?
数据库·mysql·adb
和小潘一起学AI6 小时前
SHH隧道内网穿透
运维·服务器
wwj888wwj6 小时前
Docker基础(复习)
java·linux·运维·docker
paldier6 小时前
rootfs挂载失败(error -5)的一个可能
linux
_下雨天.6 小时前
MySQL高可用
数据库·mysql