本章主要是通过陈辰的MySQL实战宝典踩坑写出来的文章
纸上谈兵终觉浅,绝知此事要躬行
1、下载安装包
https://www.percona.com/downloads

2、安装XtrBackup
[root@node3 soft]# tar xvf /soft/percona-xtrabackup-8.0.35-30-Linux-x86_64.glibc2.17.tar.gz -C /mysql/app
[mysql@node3 app]$ mv /mysql/app/percona-xtrabackup-8.0.35-30-Linux-x86_64.glibc2.17/ /mysql/app/xtrabackup/
[root@node3 soft]# yum install -y perl-Digest-MD5 perl-DBD-MySQL libev -y
[root@node3 soft]# cd /mysql/app/xtrabackup/
[root@mjndfev4 xtrabackup]# ls -lrt
total 24
drwxr-xr-x 2 mysql mysql 4096 Nov 30 15:46 docs
drwxr-xr-x 3 mysql mysql 4096 Nov 30 15:46 percona-xtrabackup-8.0-test
drwxr-xr-x 2 mysql mysql 4096 Nov 30 15:46 include
drwxr-xr-x 4 mysql mysql 4096 Nov 30 15:46 man
drwxr-xr-x 4 mysql mysql 4096 Nov 30 15:46 lib
drwxr-xr-x 2 mysql mysql 4096 Nov 30 15:46 bin
[root@node3 pxb-8.0]# ls bin/
xbcloud xbcloud_osenv xbcrypt xbstream xtrabackup xtrabackup-debug
3、设定环境变量
[mysql@node3 bin]$ vim ~/.bash_profilePATH=$PATH:$HOME/.local/bin:$HOME/bin:$MYSQL_HOME/bin:/mysql/app/xtrabackup/bin/[mysql@node3 bin]$ source ~/.bash_profile
4、验证是否安装成功,环境变量是否设置成功
[mysql@node2 ~]$ which xtrabackup/mysql/app/xtrabackup/bin/xtrabackup
5、指定数据库备份
使用 --databases 参数
指定数据库和数据库的表备份,多个备份对象之间需要以空格隔开,不支持正则匹配。
--databases="db1"--databases="db1.t1 db2"
使用 --databases-exclude 参数
跳过指定库表的备份,优先级高于 --database。
--databases-exclude="sys performance_schema db1.t2"6、开始备份
创建备份路径
mkdir -p /xtrbackup/zh_$(date +%Y%m%d)/zh_$(date +%Y%m%d)基于库/表的备份,只会备份系统表空间(ibdata1)、undo表空间以及需要备份的表,不会备份MySQL(MySQL 8.0中只会备份 mysql.ibd)、performance_schema和sys库。
所以备份数据库还需要将系统库进行备份
开始指定数据库备份
xtrabackup --defaults-file=/mysql/conf/my3306.cnf --user=root --password="AABBCCDDEE" --backup --parallel=4 --target-dir=/xtrbackup/zh_$(date +%Y%m%d)/zh_$(date +%Y%m%d) --databases="zh mysql performance_schema sys" -S /mysql/data/mysql3306/socket/mysql.sock 2> /xtrbackup/zh_$(date +%Y%m%d).log7、备份加异地传输
tar压缩
[mysql@node1 xtrbackup]$ tar -zcvf zh_20240411.tar.gz zh_20240411scp传输到别的服务器
8、关库
[root@node2 app]# systemctl stop mysqld[root@node2 app]# systemctl status mysqld
9、备份以往的数据库文件(其实没啥意义)
move或者rm数据文件和binlog的日志(最好move以防无法找回)
[root@node2 mysql3306]# mv binlog/ binlog.bak/[root@node2 mysql3306]# mv data/ data.bak/
创建路径
mkdir -p /mysql/data/mysql3306/data/mkdir -p /mysql/data/mysql3306/binlog/
赋权
chown mysql:mysql -R /mysql/data/mysql3306/chmod 775 -R /mysql/data/mysql3306/
10、Prepare操作
在恢复端操作
xtrabackup --prepare --target-dir=/data/backup/zh_20240415/zh_20240415/恢复操作(注意恢复库的路径)
xtrabackup --defaults-file=/mysql/conf/my3306.cnf --copy-back --parallel=10 --target-dir=/data/backup/zh_20240415/zh_20240415/ -S /mysql/data/mysql3306/socket/mysql.sock11、启动数据库
systemctl的方式不行了,我用这种方式才启动成功
mysqld_safe --defaults-file=/mysql/conf/my3306.cnf --user=mysql &在MySQL8.0中,没有备份的其他表的元数据信息依旧存在于数据字典中,实例启动后,依然能看到这些表,但是不能访问
mysql> show databases;+-------------------------------+| Database |+-------------------------------+| information_schema || mysql || performance_schema || sys || test || zh |+-------------------------------+
对于这种情况,建议手动删除这些库表。表可以直接删除,但如果删除库,则会提示对应的目录不存在。
mysql> drop database test;ERROR 3679 (HY000): Schema directory './test/' does not exist
这个时候,需要创建一个目录,然后再执行删除操作,具体命令如下
information_schema 这个删不删出待定,因为说是储存元数据的,先留着吧
mkdir -p /mysql/data/mysql3306/data/test赋予权限
chown mysql.mysql /mysql/data/mysql3306/data/test数据库内手动删除
drop database test;12、踩过的坑流过的泪
12.1恢复报错
[Note] [MY-011825] [Xtrabackup] Original data directory /mysql/data/mysql3306/data/ is not empty!
数据文件路径和binlog日志路径应该是空的
12.2启动报错,权限不足
[ERROR] [MY-013276] [Server] Failed to set datadir to '/mysql/data/mysql3306/data/' (OS errno: 13 - Permission denied)
[ERROR] [MY-010119] [Server] Aborting这个是因为数据库的权限不对,应该是mysql:mysql
12.3缺少逻辑路径
[ERROR] [MY-013178] [Server] Execution of server-side SQL statement 'CREATE SCHEMA mysql DEFAULT COLLATE utf8mb4_0900_ai_ci' failed with error code = 1049, error message = 'System schema directory does not exist.'.
[ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
[ERROR] [MY-010119] [Server] Aborting这个是因为没备份系统库,导致没有数据库的文件路径
12.4这个是因为胡乱复制,导致源库和目的库的redo日志出了问题,start_lsn校验不成功
[ERROR] [MY-013882] [InnoDB] Missing redo log file ./#innodb_redo/#ib_redo1 (with start_lsn = 757998796288).
[ERROR] [MY-012930] [InnoDB] Plugin initialization aborted with error Generic error.
[ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine
[ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
[ERROR] [MY-010119] [Server] Aborting最后修改时间:2024-04-16 11:38:14
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




