数据库的备份与还原
目录
1. 引言
在不同的操作系统间进行数据库迁移时,命令行工具是我们的可靠伙伴。它们高效且直观,特别是在Windows系统下备份MySQL数据库并将其导入Linux系统时。
2. 备份
2.1 备份所有数据库
要将所有数据库打包保存,请在Windows的命令提示符窗口(注意,不是PowerShell)中执行以下命令:
mysql -u root -p --all-databases > D:\mysqlbak\all_databases.sql
贴士: 确保目录存在,例如
D:\mysqlbak
。如果没有,请先创建:
mkdir D:\mysqlbak
2.2 备份单个数据库
想要某个特定数据库?轻松搞定:
mysqldump -u root -p database_name > D:\mysqlbak\database_name.sql
例如,保存my_database
:
mysqldump -u root -p my_database > D:\mysqlbak\my_database.sql
2.3 备份多个指定数据库
多数据库选择?没问题,用--databases
把它们列出来:
mysqldump -u root -p --databases db1 db2 db3 > D:\mysqlbak\multiple_databases.sql
3. 传输备份文件
使用XFTP或类似工具,让备份文件游走于Windows和Linux之间,确保它们完好无损地到达Linux(如/home/user/mysqlbak/
)。
4. 还原
4.1 还原所有数据库
在Linux终端中,前往备份文件目录,敲下命令,静待所有数据库重获新生:
mysql -u root -p < /home/user/mysqlbak/all_databases.sql
没有报错?对,成功了。
4.2 还原单个数据库
如果只是单恋某个数据库:
mysql -u root -p database_name < /home/user/mysqlbak/database_name.sql
比如,还原你的my_database
:
mysql -u root -p my_database < /home/user/mysqlbak/my_database.sql
4.3 还原多个指定数据库
批量还原不是梦,只需编写简单脚本,如restore.sh
:
#!/bin/bash
# 数据库名单
databases=("db1" "db2" "db3")
# 遍历并逐个恢复
for db in "${databases[@]}"; do
echo "Restoring $db..."
mysql -u root -p "$db" < /home/user/mysqlbak/$db.sql
done
保存并使其可执行:
chmod +x restore.sh
./restore.sh
5. 注意事项
- 字符编码:备份时选择统一的字符编码,避免乱码横行。
- 权限管理:确保有权限操作Linux上的备份文件。
- 防火墙配置:若通过网络传输,确保防火墙为所需端口打开绿灯。
- 版本兼容性:确保MySQL版本兼容,在不同系统间保持和谐。
6. 拓展
6.1 使用压缩工具优化备份文件
压缩插件如gzip
,不仅节约空间,还缩短传输时间:
mysqldump -u root -p --all-databases | gzip > D:\mysqlbak\all_databases.sql.gz
在Linux上解压还原:
gunzip < /home/user/mysqlbak/all_databases.sql.gz | mysql -u root -p
6.2 自动化备份和还原
用批处理和Shell脚本,将这些任务交给机器:
Windows批处理文件backup.bat
:
@echo off
set backup_dir=D:\mysqlbak
set date=%date:~0,4%-%date:~5,2%-%date:~8,2%
set filename=all_databases_%date%.sql.gz
mysqldump -u root -p --all-databases | gzip > %backup_dir%\%filename%
echo Backup completed: %filename%
Linux Shell脚本restore.sh
:
#!/bin/bash
backup_dir=/home/user/mysqlbak
filename=all_databases_$(date +%Y-%m-%d).sql.gz
gunzip < $backup_dir/$filename | mysql -u root -p
echo Restore completed: $filename
6.3 使用云存储服务
将备份文件托管到云端如AWS S3,不仅节省本地空间,还增加存储的可靠性和安全性。