类别:SQL数据库 / 日期:2025-11-19 / 浏览:28 / 评论:0

服务器A的数据库名为spd,备份出的数据库文件为spd_20251118010001.sql。需要还原的服务器B数据库中存在spd和spd_pre。现在需要将spd_20251118010001.sql文件导入到B服务器的spd_pre中。

错误方法:

在B服务器中使用

mysql -u root -p spd_pre < /tmp/spd_20251118010001.sql

即使要求导入到spd_pre,但结果却导入到B服务器中的spd数据库中了。

使用命令

head -30 spd_20251118010001.sql

分析spd_20251118010001.sql文件,发现里面已指定了spd数据库USE `spd`,所以以上命令的spd_pre无效

bash-4.4# head -30 spd_20251118010001.sql 
-- MySQL dump 10.13  Distrib 8.0.29, for Linux (x86_64)
--
-- Host: 127.0.0.1    Database: spd
-- ------------------------------------------------------
-- Server version	8.0.29

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!50503 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Current Database: `spd`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `spd` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */;

USE `spd`;

--
-- Table structure for table `12月计费数据_临时补`
--

DROP TABLE IF EXISTS `12月计费数据_临时补`;

处理方法有:

方法一(建议):使用以下命令修改原始的spd_20251118010001.sql 文件

sed -i 's/`spd`/`spd_pre`/g' /tmp/spd_20251118010001.sql

再次执行导入命令,导入到B服务器的spd_pre中

mysql -u root -p spd_pre < /tmp/spd_20251118010001.sql


方法二:正常导入到B服务器的spd中,然后使用以下命令,将spd复制到spd_pre中。

mysqldump -u root -p --single-transaction spd | sed 's/`spd`/`spd_pre`/g' | mysql -u root -p spd_pre

以上命令分步解析

第1部分:mysqldump -u root -p --single-transaction spd

mysqldump:MySQL官方备份工具

-u root:使用root用户连接数据库

-p:提示输入密码

--single-transaction:关键参数 - 在事务中执行备份,确保数据一致性,不会锁表

spd:要备份的源数据库名称

输出:生成spd数据库的SQL格式备份(包含表结构、数据等)

第2部分:sed 's/`spd`/`spd_pre`/g'

sed:流编辑器,用于文本替换

s/.../.../:替换命令语法

s/`spd`/`spd_pre`/g:将所有反引号包裹的spd替换为spd_pre

g:全局替换(每行所有匹配项都替换)

------set 带-i参数说明------

# 安全操作流程
cp backup.sql backup.sql.bak                    # 先备份
sed 's/`spd`/`spd_pre`/g' backup.sql | head -10           # 预览前10行
sed -i 's/`spd`/`spd_pre`/g' backup.sql              # 确认后执行修改

------------

替换示例:

`spd` → `spd_pre`

CREATE DATABASE `spd` → CREATE DATABASE `spd_pre`

USE `spd`; → USE `spd_pre`;

第3部分:mysql -u root -p spd_pre

mysql:MySQL客户端命令

-u root -p:使用root用户登录并输入密码

spd_pre:指定要导入的目标数据库



打赏

感谢您的赞助~

打开支付宝扫一扫,即可进行扫码打赏哦~

版权声明 : 本文未使用任何知识共享协议授权,您可以任何形式自由转载或使用。

 可能感兴趣的文章