MySQL备份还原方法1----xtrabackup

张开发
2026/4/4 1:32:56 15 分钟阅读
MySQL备份还原方法1----xtrabackup
1.xtrabackup去官网找对应的版本下载一定要和虚拟机系统版本契合我的redhat9[rootbogon ~]# lsanaconda-ks.cfg percona-xtrabackup-84-8.4.0-5.1.el9.x86_64.rpm[rootbogon ~]# dnf install percona-xtrabackup-84-8.4.0-5.1.el9.x86_64.rpm -y[rootbogon ~]# mkdir /backup1.1创建新用户模拟真实环境不用rootmysqlcreate userbkuserlocalhostidentified with caching_sha2_password byBack123;#创建用户语句Query OK,0rows affected(0.02sec)mysqlGRANT BACKUP_ADMIN, PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON -*.* TObkuserlocalhost;#授予核心备份权限Query OK,0rows affected(0.01sec)mysqlGRANT SELECT ON performance_schema.log_status TObkuserlocalhost;#授予 performance_schema.log_status 表的 SELECT 权限Query OK,0rows affected(0.00sec)mysqlGRANT SELECT ON performance_schema.keyring_component_status TO -bkuserlocalhost;#授予 performance_schema.keyring_component_status 表的 SELECT 权限Query OK,0rows affected(0.00sec)mysqlGRANT SELECT ON performance_schema.replication_group_members TO -bkuserlocalhost;# 授予 performance_schema.replication_group_members 表的 SELECT 权限Query OK,0rows affected(0.00sec)mysqlFLUSH PRIVILEGES;#刷新权限Query OK,0rows affected(0.01sec)为 MySQL 创建一个专门用于备份的专用账户bkuser。一个标准的最小化权限账户。1.2完全备份[rootbogon ~]# mkdir /backup/xtra -p[rootbogon ~]# xtrabackup --defaults-file/etc/my.cnf --backup --target-dir/backup/xtra/base --userbkuser --passwordBack123[rootbogon ~]# ls /backup/xtra/base/backup-my.cnf ibdata1 performance_schema undo_002 xtrabackup_logfile binlog.000003 mydb school xtrabackup_binlog_info xtrabackup_tablespaces binlog.index mysql sys xtrabackup_checkpoints ib_buffer_pool mysql.ibd undo_001 xtrabackup_info1.3增量备份1.#第一次增量mysqlinsert into school.Student values(7,john,男,22,电子商务);Query OK,1row affected(0.01sec)[rootbogon ~]# xtrabackup --defaults-file/etc/my.cnf --backup --target-dir/backup/incr1/ --incremental-basedir/backup/xtra/base --userbkuser --passwordBack1232.#第二次增量mysqlinsert into school.Student values(8,bob,女,21,英语), -(9,smith,男,20,计算机网络);Query OK,2rows affected(0.01sec)Records:2Duplicates:0Warnings:0[rootbogon ~]# xtrabackup --defaults-file/etc/my.cnf --backup --target-dir/backup/incr2/ --incremental-basedir/backup/incr1 --userbkuser --passwordBack1231.4模拟数据破坏mysqldrop database school;Query OK,2rows affected(0.02sec)1.5还原过程 验证1.准备完全备份[rootbogon ~]# xtrabackup --prepare --apply-log-only --target-dir/backup/xtra/base/2.应用第一次增量备份到完全备份[rootbogon ~]# xtrabackup --prepare --apply-log-only --target-dir/backup/xtra/base/ --incremental-dir/backup/incr1/3.应用第二次增量备份到完全备份[rootbogon ~]# xtrabackup --prepare --apply-log-only --target-dir/backup/xtra/base/ --incremental-dir/backup/incr2/4.4.1#准备备份[rootbogon ~]# xtrabackup --prepare --target-dir/backup/xtra/base/4.2#停止数据库因为要覆盖数据文件MySQL 不能处于运行状态。[rootbogon ~]# systemctl stop mysqld4.3#清空旧数据删除原来的所有数据文件为恢复做准备。[rootbogon ~]# rm -rf /var/lib/mysql/*[rootbogon ~]# ls /var/lib/mysql/4.4#把整理好的备份文件复制回 /var/lib/mysql/。[rootbogon ~]# xtrabackup --copy-back --target-dir/backup/xtra/base/4.5#确保mysql权限问题[rootbogon ~]# ll /var/lib/mysql/total86044-rw-r-----.1root root158Mar3115:03 binlog.000005 -rw-r-----.1root root14Mar3115:03 binlog.index -rw-r-----.1root root3623Mar3115:03 ib_buffer_pool -rw-r-----.1root root12582912Mar3115:03 ibdata1 -rw-r-----.1root root12582912Mar3115:03 ibtmp1 drwxr-x---.2root root6Mar3115:03#innodb_redodrwxr-x---.2root root24Mar3115:03 mydb drwxr-x---.2root root143Mar3115:03 mysql -rw-r-----.1root root29360128Mar3115:03 mysql.ibd drwxr-x---.2root root8192Mar3115:03 performance_schema drwxr-x---.2root root44Mar3115:03 school drwxr-x---.2root root28Mar3115:03 sys -rw-r-----.1root root16777216Mar3115:03 undo_001 -rw-r-----.1root root16777216Mar3115:03 undo_002 -rw-r-----.1root root612Mar3115:03 xtrabackup_info[rootbogon ~]# chown -R mysql: /var/lib/mysql/[rootbogon ~]# ll /var/lib/mysql/total86044-rw-r-----.1mysql mysql158Mar3115:03 binlog.000005 -rw-r-----.1mysql mysql14Mar3115:03 binlog.index -rw-r-----.1mysql mysql3623Mar3115:03 ib_buffer_pool -rw-r-----.1mysql mysql12582912Mar3115:03 ibdata1 -rw-r-----.1mysql mysql12582912Mar3115:03 ibtmp1 drwxr-x---.2mysql mysql6Mar3115:03#innodb_redodrwxr-x---.2mysql mysql24Mar3115:03 mydb drwxr-x---.2mysql mysql143Mar3115:03 mysql -rw-r-----.1mysql mysql29360128Mar3115:03 mysql.ibd drwxr-x---.2mysql mysql8192Mar3115:03 performance_schema drwxr-x---.2mysql mysql44Mar3115:03 school drwxr-x---.2mysql mysql28Mar3115:03 sys -rw-r-----.1mysql mysql16777216Mar3115:03 undo_001 -rw-r-----.1mysql mysql16777216Mar3115:03 undo_002 -rw-r-----.1mysql mysql612Mar3115:03 xtrabackup_info4.6#重启验证[rootbogon ~]# systemctl start mysqldmysqlselect* from school.Student -;---------------------------------------|no|name|sex|age|dept|---------------------------------------|1|陆亚|男|24|计算机网络||2|tom|男|26|英语||3|张阳|男|21|物流管理||4|alex|女|22|电子商务||7|john|男|22|电子商务||8|bob|女|21|英语||9|smith|男|20|计算机网络|---------------------------------------7rowsinset(0.01sec)一定要查看这些文件是不是mysql用户和用户组因为MySQL 服务程序是以mysql这个系统用户的身份在后台运行的。如果文件不属于mysql用户MySQL 进程就没有权限去读取、修改或写入这些数据文件数据库就会启动失败或无法正常工作。所以必须确保所有文件都属于mysql这样数据库才能正常读写。核心区别在于是否应用重做日志redo log中的未提交事务--apply-log-only作用只应用已提交事务的重做日志不回滚未提交事务。使用场景准备增量备份的中间步骤每次合并增量前都需加此参数。结果数据文件处于“部分准备”状态仍包含未提交事务的脏页。不带--apply-log-only作用应用所有重做日志包括回滚未提交事务完全准备数据文件。使用场景最终准备全量备份或合并完最后一个增量后。结果数据文件完全一致可立即用于恢复。简单总结处理全量备份时直接用第二个命令最终准备。处理增量备份时中间步骤用第一个命令最后一步去掉--apply-log-only完成回滚。

更多文章