直接用
mysqldump连接远程 MySQL 服务器导出数据,是最常用也最可靠的远程备份方式。关键在于网络连通、权限配置和命令写法要准确。
确认远程 MySQL 允许外部连接
默认 MySQL 只监听本地(127.0.0.1),需修改配置并授权用户:
检查bind-address是否为
0.0.0.0或注释掉(位于
/etc/mysql/mysql.conf.d/mysqld.cnf或类似路径) 重启 MySQL:运行
sudo systemctl restart mysql登录 MySQL,执行授权语句:
CREATE USER 'backup_user'@'%' IDENTIFIED BY 'strong_password';<br> GRANT SELECT, LOCK TABLES ON *.* TO 'backup_user'@'%';<br> FLUSH PRIVILEGES;
使用 mysqldump 远程备份数据库
在本地或备份服务器上执行,无需登录远程主机:
基础命令格式:mysqldump -h 远程IP -P 端口 -u 用户名 -p 数据库名 > backup.sql示例(假设远程 IP 是 203.0.113.10,端口 3306,数据库叫 app_db):
mysqldump -h 203.0.113.10 -P 3306 -u backup_user -p app_db > app_db_$(date +%F).sql加
--single-transaction可避免锁表(适用于 InnoDB) 加
--routines --triggers --events可一并导出存储过程、触发器和事件
自动化定时备份(Linux 示例)
配合 crontab 实现每天自动备份并压缩归档:
写一个备份脚本/opt/backup_mysql.sh:
#!/bin/bash
HOST="203.0.113.10"
USER="backup_user"
PASS="strong_password"
DB="app_db"
DATE=$(date +%F)
DUMP="/backup/${DB}_${DATE}.sql"
gzip -c | mysqldump -h $HOST -u $USER -p$PASS $DB > $DUMP.gz
find /backup -name "*.sql.gz" -mtime +7 -delete
给脚本执行权限:chmod +x /opt/backup_mysql.sh添加到 crontab(每天凌晨 2 点执行):
0 2 * * * /opt/backup_mysql.sh
安全与注意事项
远程备份涉及密码和网络传输,不能忽略安全细节:
避免在命令行明文写密码(如-p'xxx'),改用配置文件方式:
创建
~/.my.cnf,内容如下(设权限
chmod 600 ~/.my.cnf):
[client] host=203.0.113.10 user=backup_user password=strong_password确保备份服务器与 MySQL 服务器之间走内网或加密通道(如 SSH 隧道) 定期验证备份文件是否可恢复:
zcat backup.sql.gz | mysql -u local_user -p test_db大库建议启用压缩传输(如通过 SSH 管道)或分库分表导出,避免超时或内存溢出
