TH小破站

  • 首页
  • 容器
    • 认识Docker
    • DockerFile详解
  • k8s
    • 认识Kubernetes
    • Kubernetes部署--(kubeadm方式)
    • kubeasz部署k8s集群
    • Ansible-binary部署k8s集群-1.31.2
  • Ceph
    • 认识分布式存储
    • CPEH部署
  • CI/CD
    • DevOps认识
    • 部署--Gitlab
  • ELK
    • ELK简介
    • Elasticsearch
    • Kibana部署
    • Logstash
    • ELK--收集 tomcat 日志(实战)
  • HD
    • 认识--大数据
    • Hadoop-单机部署
    • Hadoop-伪分布部署
    • Hadoop-完全分布部署
    • Hadoop-(HA)完全分布部署
    • Ambari自动部署--Hadoop
  • Nginx
    • Nginx功能介绍
    • Nginx安全选项
    • Nginx配置文件简单介绍
    • 网站服务器部署
  • 监控
    • ZABBIX-部署(yum)
    • ZABBIX-编译安装
  • 云计算
    • KVM 概述
    • OpenStack企业级部署(T版)
    • OpenStack之dashboard部署
    • OpenStack-controller的高可用
    • openstack(Caracal版_ubuntu版本)部署
  • 数据库
    • mariadb与mysql
    • mysql主从
    • MySQL--冷备(实战)
    • MySQL--热备(dump表)
    • MySQL--热备(dump库)
    • 数据恢复实战案例
    • Xtrabackup实现MySql8.x全量备份
    • MyCat实现数据库读写分离
    • MHA实现数据库高可用
    • Percona XtraDB(PXC)实现数据库集群高可用
    • 数据库压力测试
    • PostgreSQL 基操
    • PostgreSQL备份恢复
    • PostgreSQL高可用
    • MongDB安装配置基础使用
    • MongoDB实现复制集
    • MongoDB备份还原
  • 自动化
    • ssh远程服务原理及配置
    • Ansible剧本文件应用
    • Ansible管理服务介绍
    • Ansible自动化部署node_exporter(包含升级,回滚)
    • Saltstack-部署安装
  • 脚本
    • 一键查看服务器资源利用率
    • 一键生成SSL证书
    • 保存指定数量的文件/目录
    • 初始化服务器
    • 扫描可用IP
    • 批量分发SSH密钥
    • 监控多主机磁盘脚本
    • 一键安装MySQL8.x脚本
    • Python脚本监控ES集群
    • 资源巡检脚本
    • 查看各用户使用的cpu占比
热衷于分享
架构师成长之路 !!!

Xtrabackup实现MySql8.x全量备份

通过Xtrabackup实现完全备份

1)启动数据库二进制日志重启数据库

`修改配置文件`
[root@expr01 ~]# vim /etc/my.cnf
[mysql]
port = 3306
socket = /apps/mysql/data/mysql.sock
[mysqld]
log-bin = /apps/mysql/logbin/mysql-bin  # 二进制日志开启
port = 3306
mysqlx_port = 33060
mysqlx_socket = /apps/mysql/data/mysqlx.sock
basedir = /apps/mysql
datadir = /apps/mysql/data
socket = /apps/mysql/data/mysql.sock
pid-file = /apps/mysql/data/mysqld.pid
log-error = /apps/mysql/log/error.log
default-authentication-plugin = mysql_native_password
log_timestamps = SYSTEM
[root@expr01 ~]# service mysqld restart 

2)人为造一些数据

[root@expr01 ~]# mysql -uroot -p123456
# 创建数据库db1
mysql> create database IF NOT EXISTS db1 CHARACTER SET 'utf8';
# 进入数据db1
mysql> use db1;
# 创建student表并且设置表的初始id为1,指定InnoDB存储引擎,指定utf8字符集
mysql> CREATE TABLE student (
    id int UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(20) NOT NULL,
    age tinyint UNSIGNED,
    gender ENUM('M','F') default 'M'
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
# 插入三条数据
mysql> insert student (name,age)values('xiaoming',20);
mysql> insert student (name,age)values('wangwu',21);
mysql> insert student (name,age)values('lisi',18);
# 验证数据
mysql> select * from student;
+----+----------+------+--------+
| id | name     | age  | gender |
+----+----------+------+--------+
|  1 | xiaoming |   20 | M      |
|  2 | wangwu   |   21 | M      |
|  3 | lisi     |   18 | M      |
|  4 | tom      |   20 | M      |
+----+----------+------+--------+
4 rows in set (0.00 sec)
​
# 创建teacher表并且设置表的初始id为1,指定InnoDB存储引擎,指定utf8字符集
mysql> CREATE TABLE teacher (
    id int UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(20) NOT NULL,
    age tinyint UNSIGNED,
    gender ENUM('M','F') default 'M'
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
# 插入一条数据
mysql> insert teacher (name,age)values('jack',20);
mysql> insert teacher (name,age)values('tanghao',20);
# 验证数据
mysql> select * from teacher;
+----+---------+------+--------+
| id | name    | age  | gender |
+----+---------+------+--------+
|  1 | jack    |   20 | M      |
|  2 | tanghao |   21 | M      |
+----+---------+------+--------+
1 row in set (0.00 sec)

3)安装Xtrabackup备份工具

`上传Xtrabackup包`
[root@expr01 ~]# ll
total 23536724
-rw-r--r-- 1 root root  23536724 Dec 10 16:14 percona-xtrabackup-80-8.0.32-25.1.el7.x86_64.rpm
`安装`
[root@expr01 ~]# yum -y localinstall percona-xtrabackup-80-8.0.32-25.1.el7.x86_64.rpm 

4)通过Xtrabackup进行备份数据

[root@expr01 ~]# xtrabackup -uroot -p123456 -S /apps/mysql/data/mysql.sock --backup --target-dir=/backup/
# -S 指定mysql的sock文件 如果不指定他默认到/var/lib/mysql/目录找mysql.sock
# /backup目录不需事先创建

5)人为损坏数据库

[root@expr01 ~]# mv /apps/mysql/data/* /opt/
`# 数据已经被损坏`
[root@expr01 ~]# mysql -uroot -p123456 -e "show databases "
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/apps/mysql/data/mysql.sock' (2)

6)恢复数据

6.1)杀掉MySQL进程

[root@expr01 ~]# killall mysqld

6.2)清空数据

`保证数据目录data和二进制目录logbin是空的`
[root@expr01 ~]# rm -rf /apps/mysql/data/*
[root@expr01 ~]# rm -rf /apps/mysql/logbin/*

6.3)预准备:确保数据一致,提交完成的事务,回滚未完成的事务

[root@expr01 ~]# xtrabackup --prepare --target-dir=/backup

6.4)复制到数据库目录

[root@expr01 ~]# xtrabackup --copy-back --target-dir=/backup/
# 也可以用cp命令拷贝

6.5)验证数据是否恢复

[root@expr01 ~]# mysql -uroot -p123456 -e "select * from db1.student "
mysql: [Warning] Using a password on the command line interface can be insecure.
+----+----------+------+--------+
| id | name     | age  | gender |
+----+----------+------+--------+
|  1 | xiaoming |   20 | M      |
|  2 | wangwu   |   21 | M      |
|  3 | lisi     |   18 | M      |
|  4 | tom      |   20 | M      |
+----+----------+------+--------+
[root@expr01 ~]# mysql -uroot -p123456 -e "select * from db1.teacher "
mysql: [Warning] Using a password on the command line interface can be insecure.
+----+---------+------+--------+
| id | name    | age  | gender |
+----+---------+------+--------+
|  1 | jack    |   20 | M      |
|  2 | tanghao |   21 | M      |
+----+---------+------+--------+

以上就是通过Xtrabackup备份工具实现完全备份

注意数据库的配置文件

我上面是把数据保持到同一主机的,生产环境建议把数据单独放到一个主机保存

COPYRIGHT © 2025 TH小破站. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

渝ICP备2023013789号

渝公网安备50011702500926号