如何备份远程mysql数据库_mysql远程备份方式

11次阅读

最常用可靠的远程MySQL备份方式是mysqldump,需确保网络连通、远程MySQL允许外部连接(修改bind-address为0.0.0.0并重启)、授权用户(SELECT和LOCK TABLES权限),再用mysqldump -h IP -P端口 -u用户 -p数据库名>备份.sql命令导出,可加–single-transaction等参数优化,并通过crontab定时执行脚本实现自动化备份与清理。

如何备份远程mysql数据库_mysql远程备份方式

直接用 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';
    GRANT select, LOCK TABLES ON *.* TO 'backup_user'@'%';
    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 管道)或分库分表导出,避免超时或内存溢出

text=ZqhQzanResources