用SecureCRT备份数据库的核心结论是:通过SSH会话登录服务器后,使用mysqldump或pg_dump等命令行工具导出数据文件,再借助SFTP或rz命令把备份文件拉回本地,整个过程约5分钟可完成。这一套流程不依赖图形界面,任何能装CRT的电脑都能操作,是运维和开发日常最常用的备份手段,接下来我把这条线拆开,从连接、命令、下载到恢复,逐步走一遍。
服务器怎么用crt备份数据库?先理清三个前提
在敲任何命令之前,你手上得有这三样东西:服务器IP和端口(默认22)、SSH登录账号密码或密钥文件、目标数据库的账号密码,缺一样,CRT连上也没法继续。
CRT本身不是数据库客户端,它扮演的是远程终端入口的角色,你通过它进入服务器的命令行环境,再调用服务器上安装的数据库工具完成备份,这个逻辑清楚了,后面就不会乱。
- 确认服务器已开放22端口,本地防火墙不拦截
- 确认数据库服务正在运行,能用
systemctl status mysql或service mysql status查看 - 确认数据库账号有SELECT、LOCK TABLES、SHOW VIEW等导出权限
crt连接服务器备份数据库的完整步骤分解
先把连接搞定,打开SecureCRT,点“快速连接”,协议选SSH2,主机名填IP,端口默认22,这里有个细节:连接前先保存会话,把登录后的编码设为UTF-8,否则中文表名或注释会出现乱码。
建立可靠的SSH会话
连接成功后,CRT底部会出现命令行提示符,你可以先用pwd看看当前在哪个目录,再用df -h扫一眼磁盘剩余空间,备份文件会占用磁盘,剩余空间小于备份文件的两倍时,先清盘再备份。
判断服务器上装了哪种数据库
输入mysql --version、psql --version或sqlplus /nolog,哪个有反馈,说明装了哪个,多数业务服务器装的是MySQL或MariaDB,命令基本通用。
执行导出命令前先建备份目录
不要在根目录或用户目录随手导出,容易被误删,建议统一建一个/data/backup/目录,并在里面按日期分子目录,文件命名带上时间戳,比如20260612_订单库.sql,这样后续查找省心不少。
securecrt备份mysql数据库命令实战
这是整个流程里最核心的一步,MySQL的导出工具叫mysqldump,语法结构清晰,适合绝大多数场景。
单库备份的标准写法
mysqldump -uroot -p --single-transaction --set-gtid-purged=OFF 数据库名 > /data/backup/数据库名_$(date +%Y%m%d).sql
逐段拆开看:-u指定账号,-p提示输入密码,--single-transaction让备份过程中不锁表(InnoDB表尤其需要),--set-gtid-purged=OFF避免恢复时GTID冲突,最后的重定向符把输出写入指定路径。
压缩备份文件
导出来的.sql文件往往很大,直接传回本地既慢又占空间,用gzip压一下:
gzip /data/backup/数据库名_20260612.sql
压完之后文件变成.sql.gz,体积通常能缩小到原文件的五分之一甚至更小,传输效率和存储成本都更友好。
只备份数据,不备份结构
如果你只是要导出表里的数据,方便迁移到测试环境,加一个--no-create-info参数:
mysqldump -u用户名 -p --no-create-info 数据库名 表名 > /data/backup/纯数据.sql
这个技巧在数据订正、环境同步时非常实用,行业共识认为,开发同学手里至少应该掌握这一条变体命令。
备份文件怎么从服务器拉回本地
命令执行完,备份文件还留在服务器上,这一节教你把它搬回本地电脑,这也是crt连接服务器备份数据库的最后一道关卡。
利用CRT内置的SFTP会话
在CRT的菜单栏里点“文件”,选“连接SFTP标签页”,或者直接按快捷键Alt+P,CRT会自动基于当前SSH会话建立一条加密的SFTP通道,这时你看到的是sftp>提示符。
lcd D:\数据库备份 # 切换本地目录 cd /data/backup # 切换服务器目录 get 数据库名_20260612.sql.gz
执行quit退出SFTP后,回到命令行会话,再用ls -l确认下载成功。
用rz命令偷个懒
服务器上装了lrzsz工具的话,直接在命令行走rz -y,会弹出一个本地文件选择窗口,选中你要下载的文件即可,优点是直观,缺点是不支持大文件断点续传,超过5GB的文件还是走SFTP更稳妥。
| 下载方式 | 适用场景 | 局限 |
|---|---|---|
| SFTP | 大文件、批量下载 | 需要熟悉sftp指令 |
| rz | 小文件快速下载 | 大文件容易超时 |
从备份文件恢复数据库的操作
备份的目的是为了将来能恢复,而且数据库备份恢复有一套标准动作,恢复前先建一个同名的空库,再导入数据,这里用MySQL举例:
mysql -uroot -p 数据库名 < /data/backup/数据库名_20260612.sql
如果是.gz压缩包,得先解压再导入:
gunzip /data/backup/数据库名_20260612.sql.gz mysql -uroot -p 数据库名 < /data/backup/数据库名_20260612.sql
恢复完成后,抽查几张核心表的数据行数,确认没有丢记录,业内专家指出,恢复演练比备份本身更重要,很多团队备份做得勤快,却从没验证过恢复流程,真到出事故时才发现备份文件损坏或命令有误。
让备份自动化,省去每天手动敲命令
手动备份容易忘,除非你的数据量极低,否则建议把备份做成定时任务,用crontab -e编辑计划任务,加入下面这行:
30 2 mysqldump -uroot -p'密码' --single-transaction 数据库名 | gzip > /data/backup/数据库名_$(date +\%Y\%m\%d).sql.gz
含义是每天凌晨2点30分自动执行备份并压缩,关于密码写在命令行里的安全风险,建议改用.my.cnf配置文件的[client]段落存放密码,并把文件权限设为600,避免同服务器上的其他用户读到。
保留最近7天的备份
备份文件长期堆积会撑爆磁盘,加一条清理命令:
find /data/backup -name ".sql.gz" -mtime +7 -delete
这条命令会删除7天之前的压缩包,保留一个合理的时间窗口,磁盘压力大大减轻。
常见报错与排查方向
实际操作中,大多数人卡在连接阶段或命令语法上,整理几个高频问题及其处理思路:
- mysqldump: command not found:客户端没装或不在PATH中,用
find / -name mysqldump找到完整路径后执行 - Access denied for user:账号没授权,登录服务器执行
GRANT ALL ON . TO '用户名'@'localhost';后刷新权限 - DUMP期间锁表导致业务卡顿:检查是否加了
--single-transaction参数,InnoDB表必须加这个 - SSH连接超时:检查本地网络到服务器的路由是否通,尝试改用
telnet IP 22测试端口连通性
Q&A:服务器crt备份数据库的三个高频问题
Q1:crt备份数据库文件存在服务器哪个目录?
备份文件的位置由重定向路径决定,上文列出的命令把文件写到/data/backup/下,如果你执行的命令没有指定路径,文件就会生成在命令行当前的目录,用pwd命令可以查看当前位置。
Q2:用crt备份出来的sql文件能直接迁移到另一台服务器吗?
基本可以,纯SQL文件包含建表语句和INSERT数据,在新服务器上执行source /data/backup/文件名.sql即可导入,要注意字符集一致性,旧库是utf8mb4,新库也要设置相同的字符集,否则中文会变成乱码。
Q3:数据库文件特别大,用crt备份时有哪些注意事项?
大数据量场景下建议用--single-transaction和--quick参数,导出过程中不把全部结果缓存到内存,另外预留足够的磁盘空间,最好在业务低谷期执行备份,避免IO抢占影响线上请求。
说到底,crt备份数据库不是一个魔法动作,它是由连接、命令、拉取、验证四步组成的标准流程,把这四步练熟,无论数据库多大、服务器在哪,你都能在两分钟内把备份文件稳稳握在手里。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/791506.html


