xtrabackup全库备份

xtrabackup --defaults-file=/etc/my.cnf --user=DBUSER --host=SERVER --password=DBUSERPASS --backup --target-dir= /path/to/BACKUP-DIR

这是 Percona Xtrabackup 工具的远程备份命令,用于备份 MySQL/MariaDB 数据库


一、命令整体结构

xtrabackup \
  --defaults-file=/etc/my.cnf \
  --user=DBUSER \
  --host=SERVER \
  --password=DBUSERPASS \
  --backup \
  --target-dir=/path/to/BACKUP-DIR

二、参数详细解读

1. xtrabackup —— 备份工具

  • Percona 公司开发的开源 MySQL 物理热备工具
  • 支持 InnoDB/XtraDB 引擎的在线热备(业务不停)
  • mysqldump 更快,适合大数据库

2. --defaults-file=/etc/my.cnf

  • 指定 MySQL 的配置文件路径
  • Xtrabackup 需要读取 MySQL 的配置信息(如 datadir、socket 等)
  • 作用:告诉备份工具从哪里读取 MySQL 的配置

3. --user=DBUSER

  • 连接 MySQL 的用户名
  • 这个用户需要足够权限(RELOAD, LOCK TABLES, REPLICATION CLIENT 等)

4. --host=SERVER

  • MySQL 服务器地址
  • 可以是 IP 或主机名
  • 如果是远程备份:需要指定远程服务器 IP
  • 如果是本地备份:可以用 --host=localhost 或不指定

5. --password=DBUSERPASS

  • 连接 MySQL 的密码
  • 安全提示:明文密码在命令行暴露,所以可以不写然后交互输入

6. --backup

  • 指定执行备份操作
  • 告诉 Xtrabackup 开始备份(而不是 prepare 或恢复)

7. --target-dir=/path/to/BACKUP-DIR

  • 备份文件的存储目录

三、这个命令的用途

这是一个远程物理热备命令:

  1. 远程备份:从指定服务器(--host=SERVER)备份数据
  2. 物理备份:直接拷贝数据文件,不是 SQL 语句
  3. 热备:备份期间 MySQL 可以继续服务
  4. 完整备份:备份整个数据库实例

四、命令中的问题发现

潜在问题:

问题说明建议
明文密码在命令行暴露密码--password=... 或用 --login-path
远程备份需要网络和权限确保防火墙和 MySQL 远程访问开启
目录权限备份目录要可写确保运行用户有写入权限
磁盘空间物理备份占用大确保目标目录有足够空间

五、安全改进版本

方法1:去掉明文密码(交互式输入)

xtrabackup --defaults-file=/etc/my.cnf --user=DBUSER --host=SERVER --password --backup --target-dir=/path/to/BACKUP-DIR
# 执行后会提示输入密码

方法2:使用 mysql_config_editor(推荐)

# 先配置登录路径
mysql_config_editor set --login-path=backup --host=SERVER --user=DBUSER --password

# 备份命令
xtrabackup --defaults-file=/etc/my.cnf --login-path=backup --backup --target-dir=/path/to/BACKUP-DIR

方法3:使用环境变量(脚本中用)

export MYSQL_PWD='DBUSERPASS'
xtrabackup --defaults-file=/etc/my.cnf --user=DBUSER --host=SERVER --backup --target-dir=/path/to/BACKUP-DIR
unset MYSQL_PWD

六、完整备份流程示例

1. 创建备份目录

mkdir -p /backup/mysql/full_$(date +%Y%m%d_%H%M%S)

2. 执行备份

xtrabackup \
  --defaults-file=/etc/my.cnf \
  --user=backupuser \
  --host=192.168.1.100 \
  --password \
  --backup \
  --target-dir=/backup/mysql/full_$(date +%Y%m%d_%H%M%S)

3. 备份完成后需要 prepare(准备恢复)

xtrabackup --prepare --target-dir=/backup/mysql/full_20240311_143000

4. 验证备份

ls -l /backup/mysql/full_20240311_143000/
# 应该看到 ibdata1、数据库目录、xtrabackup_checkpoints 等文件

七、备份用户所需权限

备份用户需要以下权限:

CREATE USER 'backupuser'@'%' IDENTIFIED BY 'password';
GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'backupuser'@'%';
GRANT SELECT ON performance_schema.log_status TO 'backupuser'@'%';  -- MySQL 8.0 需要
FLUSH PRIVILEGES;

八、常见错误及解决

错误可能原因解决
Can't connect to MySQL server主机、端口、网络检查 --host 和防火墙
Access denied用户名/密码错误确认权限和密码
Permission denied备份目录不可写chmod 755 /backup
No space left磁盘空间不足清理或换目录
xtrabackup: Error版本不匹配确保 Xtrabackup 和 MySQL 版本兼容

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注