在mysql中附加数据库,本质是将已有的数据库数据恢复到当前mysql实例中,mysql没有原生的附加功能按钮,主要通过导入sql备份文件或者复制物理数据目录两种方式实现,不同方式适用于不同的备份场景。

方法一:通过导入sql文件附加数据库
这种方式适用于之前通过mysqldump导出的sql格式备份文件,是最常用也最安全的附加方式,操作步骤如下。
1. 创建空数据库
首先需要登录mysql,创建一个和要附加的数据库同名的空数据库,避免导入时找不到目标库报错。
-- 登录mysql,输入密码后进入交互界面 mysql -u root -p -- 创建空数据库,假设要附加的数据库名为test_db CREATE DATABASE IF NOT EXISTS test_db DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci; -- 退出mysql交互界面 EXIT;
2. 导入sql文件
使用mysql命令直接将sql文件导入到刚创建的空数据库中,命令格式如下。
# 语法:mysql -u 用户名 -p 数据库名 < 备份文件路径 mysql -u root -p test_db < /home/backup/test_db.sql
执行命令后输入mysql登录密码,等待命令执行完成,没有报错即表示附加成功。可以通过登录mysql后查询数据库表验证:
-- 登录后切换到目标数据库 USE test_db; -- 查看所有表,确认数据已导入 SHOW TABLES;
方法二:通过复制物理数据目录附加数据库
如果之前的数据库是通过直接复制mysql数据目录备份的,且mysql版本、操作系统一致,可以通过复制物理文件的方式附加,操作前需要先停止mysql服务。
1. 停止mysql服务
根据系统不同执行对应的停止命令:
# centos系统 systemctl stop mysqld # ubuntu系统 systemctl stop mysql
2. 复制数据目录
找到原mysql的数据目录,默认路径通常为/var/lib/mysql/,将备份的数据库目录复制到当前mysql的数据目录下,假设要附加的数据库目录名为test_db:
# 复制备份的数据库目录到当前mysql数据目录 cp -r /home/backup/test_db /var/lib/mysql/
3. 修改目录权限并启动服务
复制完成后需要修改数据库目录的所有者为mysql用户,否则mysql无法读取文件,之后启动mysql服务即可。
# 修改目录所有者为mysql chown -R mysql:mysql /var/lib/mysql/test_db # 启动mysql服务 systemctl start mysqld
两种方式的注意事项
- 导入sql文件的方式兼容性更好,不同mysql版本、不同操作系统之间都可以使用,优先选择这种方式。
- 物理复制方式要求原mysql和目标mysql的版本一致,且操作系统位数相同,否则可能出现无法启动或者数据损坏的问题。
- 操作前建议先备份当前mysql的现有数据,避免操作失误导致数据丢失。
- 如果导入的sql文件较大,可以适当调整mysql的
max_allowed_packet参数,避免导入过程中报包大小错误。
注意:如果附加的数据库包含存储过程、触发器、视图等对象,导入sql文件时会自动一并导入,物理复制方式也会保留这些对象,不需要额外操作。