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
- 备份文件的存储目录
三、这个命令的用途
这是一个远程物理热备命令:
- 远程备份:从指定服务器(
--host=SERVER)备份数据 - 物理备份:直接拷贝数据文件,不是 SQL 语句
- 热备:备份期间 MySQL 可以继续服务
- 完整备份:备份整个数据库实例
四、命令中的问题发现
潜在问题:
| 问题 | 说明 | 建议 |
|---|---|---|
| 明文密码 | 在命令行暴露密码 | 用 --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 版本兼容 |
发表回复