在 Ubuntu 上恢复 .mysql
文件(通常指 MySQL 的备份文件,如 .sql
或 .dump
)需要根据备份类型选择不同的方法。以下是详细步骤:
1. 确认备份文件类型
.sql
文件:纯文本格式的 SQL 语句(可通过cat
查看内容)。.dump
/.bak
:可能是二进制备份(如mysqldump
生成或物理备份)。
2. 通过 mysql
命令行工具恢复(适用于 .sql
文件)
步骤:
登录 MySQL:
mysql -u [用户名] -p
输入密码后进入 MySQL Shell。
创建数据库(若需恢复到新数据库):
CREATE DATABASE [数据库名]; USE [数据库名];
退出 MySQL Shell:
exit;
导入备份文件:
mysql -u [用户名] -p[密码] [数据库名] < /路径/到/备份文件.sql
- 示例(将
backup.sql
恢复到mydb
):
输入密码后等待导入完成。mysql -u root -p mydb < /home/user/backup.sql
- 示例(将
3. 使用 source
命令在 MySQL Shell 中恢复
如果已登录 MySQL,可直接执行:
USE [数据库名];
SOURCE /路径/到/备份文件.sql;
- 注意:路径需为绝对路径。
4. (可选)恢复单个表
从完整备份中提取特定表的 SQL 语句,然后单独导入:
sed -n '/^-- Table structure for table `表名`/,/^-- Table structure for table/p' backup.sql > table.sql
mysql -u root -p [数据库名] < table.sql
5. 处理二进制备份(如 InnoDB 物理备份)
若备份是二进制文件(如 .ibd
, .frm
, /var/lib/mysql/
的拷贝),需停止 MySQL 服务后替换数据文件:
sudo systemctl stop mysql
sudo cp -r /path/to/backup/* /var/lib/mysql/
sudo chown -R mysql:mysql /var/lib/mysql/
sudo systemctl start mysql
- 风险提示:此操作可能导致数据不一致,建议先测试或在专业指导下进行。
6. (扩展)使用 mysqldump
+ pv
监控进度
安装 pv
工具后实时观察导入进度:
sudo apt install pv
pv /path/to/backup.sql | mysql -u root -p [数据库名]
常见问题解决
- 报错:
ERROR1044(42000):Access denied
检查用户是否有目标数据库的权限:GRANT ALL PRIVILEGES ON [数据库名].* TO '[用户名]'@'localhost'; FLUSH PRIVILEGES;
2.报错:导入中断或乱码
确保字符集一致(如 UTF-8):
mysql --default-character-set=utf8mb4-u root-p[DB]<backup.sql
```
3.**大文件优化导入速度**
临时关闭日志和外键检查加速导入:
在 SQL文件中开头添加:
```sql
SET FOREIGN_KEY_CHECKS=0;SET UNIQUE_CHECKS=0;SET AUTOCOMMIT=0;
结尾添加:
COMMIT;SET FOREIGN_KEY_CHECKS=1;SET UNIQUE_CHECKS=1;
```
---
####附:验证恢复是否成功
登录MySQL查询数据是否存在:
``` sql
USE[Database];SHOW TABLES;SELECT COUNT(*)FROM[Table];
如需进一步协助,请提供具体错误信息或场景细节!
内容由零声教学AI助手提供,问题来源于学员提问