从IP服务器上下载数据库,核心就是先用命令行工具连接远程数据库导出SQL或文件,再通过安全传输协议拉到本地。
从ip服务器下载数据库到本地需要准备什么
动手之前先搞清楚自己的环境,不然容易走弯路,你需要三样东西:服务器IP地址、数据库账号密码、本地的数据库客户端工具,IP地址就是那台服务器的公网地址,账号密码得找运维或者宝塔面板后台要,本地工具推荐用Navicat、DBeaver或者直接命令行操作,按个人习惯选就行。
另外一个容易被忽略的点是,服务器安全组和防火墙必须放行对应端口,数据库默认端口需要确认是否开放,比如MySQL用的3306,PostgreSQL用的5432,这些端口没通,工具连不上服务器,后面什么都白搭。
怎么从ip服务器上下载数据库到本地:三大实操方案
用mysqldump命令行导出MySQL数据库
这个方法是绝大多数场景下最推荐的方式,直接在本地终端执行以下命令:
mysqldump -h 服务器IP -u 用户名 -p 数据库名 > 本地文件名.sql
比如你想把IP为123.123.123上的shopdb这个库导出来,命令就是这样:
mysqldump -h 123.123.123.123 -u root -p shopdb > shopdb_backup.sql
输入密码后,shopdb_backup.sql这个文件就直接保存在你本地当前目录里了,如果数据量特别大,可以加个压缩参数:
mysqldump -h 123.123.123.123 -u root -p shopdb | gzip > shopdb_backup.sql.gz
这一招能把文件体积压缩到原来的三分之一甚至更小,传输速度会快很多,行业共识认为,在大数据量场景下,先压缩再下载是效率最高的方式。
用Navicat可视化界面导出远程数据库
不习惯打命令行的人,用Navicat会舒服很多。
- 打开Navicat,点击”连接” → “MySQL”,填写服务器IP、端口、用户名、密码
- 连接成功后,右键目标数据库 → 选择”转储SQL文件” → “结构和数据”
- 选择本地保存路径,点击保存,等进度条跑完就行
这个方式适合数据库表不多、数据量不大的情况,界面式操作不容易出错,导入导出逻辑也比较直观,不过要注意,如果数据库超过1GB,使用常见的图形化编辑工具导出中文表名或特殊字符时,有较大概率出现格式兼容问题,这种情况还是命令行工具更稳妥。
用宝塔面板后台下载数据库备份
很多服务器面板已经内置了备份功能,登录宝塔面板后,找到”数据库”菜单,里面有对应的库名,点击”备份”,系统会自动生成一个以日期命名的.sql.gz压缩包,再点击”下载”按钮,走浏览器下载通道就能拉到本地,这个方式不需要任何代码基础,属于保姆级操作。
ip服务器下载数据库连接超时怎么办
连接超时是出现频率最高的一个拦路虎。先检查服务器安全组规则,登录云服务商控制台,找到对应的安全策略,确认入方向放行了数据库端口,这一步排查完,再去看服务器防火墙:
# 云服务器内部执行,查看3306端口是否被防火墙拦截 firewall-cmd --list-ports
如果是酷番云或简米云服务器,还需要注意防火墙管理页面和系统内部防火墙都得放行,很多人就是卡在这个环节上。
还有一个隐蔽的问题是,数据库配置文件里默认监听0.0.1,只允许本地连接,这时候需要修改配置文件,比如MySQL的/etc/my.cnf,把bind-address改成0.0.0,重启MySQL服务才能生效,命令跑完之后,用以下命令确认端口在正常监听:
netstat -tlnp | grep 3306
大型数据库从服务器导出用什么方案不会卡死
数据库文件超过2GB的,直接用上面说了吗?直接命令行工具导出很可能中途断连,一切从头再来,这里给出两个靠谱方案。
服务器端压缩后分段传输
先在服务器上完成整个导出压缩流程,再通过SFTP拉取这个压缩包:
# 在服务器上执行 mysqldump -u root -p 数据库名 | gzip > 备份文件.sql.gz # 然后在本地用sftp拉取 sftp root@服务器IP get 备份文件.sql.gz
这个方案的好处是全程不占用本地资源,服务器导完压缩好,本地只需收一个文件。
同步工具方案
常用于数据仓库同步场景,用DataX或Kettle这类ETL工具,配置好源端和目标端信息,它们会自动按主键或时间字段分批拉取数据,断点续传也支持,对于超大库,多数情况下用这类工具做持续同步比一次性导出要稳定得多。
从ip服务器下载数据库后如何验证备份完整
下载到本地不等于万事大吉,必须验证文件完整性,否则关键时候恢复不了就麻烦了。
第一步,看文件大小。 在本地执行ls -lh 备份文件.sql,和服务器上源库文件大小做一个对比,两者差距太大肯定有问题。
第二步,导入测试库验证。 在自己的本地MySQL实例中创建一个临时库,比如test_restore,然后执行:
mysql -u root -p test_restore < 备份文件.sql
如果导入过程中没有报错,基本的备份可用性就有保障了。再跑几条查询SELECT COUNT() FROM 核心业务表;,跟服务器源库对比一下数量,能对上就说明数据完整。
第三步,检查关键表结构和索引。 观察表结构是否完整,索引有没有丢,特别是自增主键有没有被设为0,这类问题虽然不常见,但遇到一次足够让人头疼。
Q&A:关于怎么从ip服务器上下载数据库的常见疑问
问:从ip服务器上下载数据库需要开通什么权限?
答:需要数据库账号至少有SELECT和LOCK TABLES权限,前者是导出数据的必要条件,后者用来保证导出过程中数据的一致性,没有这些权限,导出时会直接报错,部分数据库还要求服务器开启了远程访问能力,默认配置下一般都会限制在本地访问,需要看具体数据库的配置文件,修改后记得重启数据库服务。
问:ip服务器下载数据库和服务器备份文件下载有什么区别?
答:数据库备份文件下载的是事先准备好的压缩包,比如使用面板自动备份功能生成的.sql.gz文件,下载后还需手动恢复,而直接导出是实时的逻辑备份,导出的是当前数据库的实时快照数据,导入时不需要依赖特定备份工具,只需目标数据库环境支持对应的SQL语法即可,两种方式适用场景不同:实时备份适合小库快速迁移,文件下载策略适合大库或需要多版本回滚的场景。
问:数据库下载到一半服务器断网了怎么恢复?
答:如果是命令行导出中断,可以改用mysqldump --quick参数重启导出,或者先清空临时文件再重试,不建议直接续传,因为导出过程本身不是断点续传机制,中断后的文件通常是不可用的,如果数据量实在太大,可以切换到服务器端导出打包再传输的方案,降低断网影响,本地用SFTP下载支持断点续传,连接中断后执行reget命令就能接着下载。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/784136.html


