mysql集群笔记

in Linux with 0 comment

MySql集群笔记

常见Mysql集群方案

image-20200415111352455

因为Replication方案的弱一致性,不能保证数据同步到其他数据库节点,适合保存日志,新闻,帖子等,所以才有PXC(Percona XtraDB Cluster)

PXC是Percona XtraDB Cluster的缩写,是一种具有高可用性和高扩展性的MySQL开源集群。它集成了Percona Server和Percona XtraBackup,同时采用了Codership Galera库。

优点:
1.准同步复制
2.多个可同时读写节点,可实现写扩展,较分片方案更进一步
3.自动节点管理
4.数据严格一致
5.服务高可用

缺点:
1.只支持innodb引擎
2.所有表都要有主键
3.所有的写操作都将发生在所有节点上,存在写扩大问题
4.加入新节点,开销大。需要复制完整的数据。

PXC原理

PXC(Percona XtraDB Cluster)

image-20200415111933555

建议PXC使用PerconaServer(mysql改进版,性能提升很大)

PXC方案与Replication方案的对比

image-20200415112335721

image-20200415112353826

PXC的数据一致性

1、同步复制,事务在所有集群节点要么同时提交,要么不提交

image-20200415112656867

2、Replication采用异步同步,无法保证数据的一致性

image-20200415112740473

Replication master/slave集群,断开slave同步

STOP SLAVE;

SHOW SLAVE STATUS;

image-20200415113223832 这两个字段任何一个值为No,就说明数据同步出问题了

在pxc容器中关闭防火墙的出入站,模拟pxc集群节点宕机,因为pxc镜像是使用ubuntu创建的,所以使用:

$ iptables -A INPUT -p tcp --dport 4567 -j DROP
$ iptables -A OUTPUT -p tcp --dport 4567 -j DROP

安装PXC

下载或者导入本地镜像

$ docker pull percona/percona-xtradb-cluster
$ docker load < /home/soft/pxc.tar.gz

创建内部网络

加入要创建5节点的pxc集群,就要创建5个pxc容器,创建出来的容器不要直接docker以外的网络,很不安全

处于安全考虑,需要给PXC集群在docker内部划分一个网段,这个网段外部是直接无法访问的,然后向外部开放成端口,然后使用docker端口映射实现外部访问,实现创建Docker内部网络

docker添加内部网段

docker network create net1 //创建net1网段

docker network create --subnet=172.18.0.0/24 net1

docker network inspect net1 //查看net网段的信息

docker network rm net1 //删除net1网段

image-20200415163507569

docker创建容器的属于原则:

一旦容器创建容器,尽量不要在容器内保存业务数据,要把业务数据保存在宿主机上,使用的技术就是docker的目录映射,可以把宿主机的一个目录映射在目录内,在运行容器时,把业务数据保存在映射目录内(存储在宿主机上面),这样如果出现故障,宿主机有这个数据,只需要删除故障的容器重新创建容器,把目录映射给新的容器,当新容器启动就自带了这些业务数据多好。

pxc技术运行在docker容器内,它是无法直接使用映射的目录,如果我们采用映射目录的方式给pxc容器,pxc容器启动的时候会闪退,那就要采用另外一种这种目录映射的技术,这个技术叫做“Docker卷”

创建Docker卷

容器中的pxc节点映射数据目录的解决办法

docker volume create --name v1 创建docker卷

image-20200415165558432

docker volume rm v1 删除docker卷

创建PXC容器

只需要向PXC镜像传入运行参数就能创建pxc容器

docker run -d 
-p 3307:3306
-e MYSQL_ROOT_PASSWORD=WANGchen0923
-e CLUSTER_NAME=PXC
-e XTRABACKUP_PASSWORD=WANGchen0923
-v v1:/var/lib/mysql
--privileged 
--name=node1 
--net=net1
--ip 172.18.0.2
pxc 

--privileged //最高权限

docker run -d 
-p 3308:3306
-e MYSQL_ROOT_PASSWORD=WANGchen0923
-e CLUSTER_NAME=PXC
-e XTRABACKUP_PASSWORD=WANGchen0923
-e CLUSTER_JOIN=node1
-v v2:/var/lib/mysql
--privileged 
--name=node2 
--net=net1
--ip 172.18.0.3
pxc 
docker run -d 
-p 3309:3306
-e MYSQL_ROOT_PASSWORD=WANGchen0923
-e CLUSTER_NAME=PXC
-e XTRABACKUP_PASSWORD=WANGchen0923
-e CLUSTER_JOIN=node1
-v v3:/var/lib/mysql
--privileged 
--name=node3 
--net=net1
--ip 172.18.0.4
pxc 
docker run -d 
-p 3310:3306
-e MYSQL_ROOT_PASSWORD=WANGchen0923
-e CLUSTER_NAME=PXC
-e XTRABACKUP_PASSWORD=WANGchen0923
-e CLUSTER_JOIN=node1
-v v4:/var/lib/mysql
--privileged 
--name=node4 
--net=net1
--ip 172.18.0.5
pxc 
docker run -d 
-p 3311:3306
-e MYSQL_ROOT_PASSWORD=WANGchen0923
-e CLUSTER_NAME=PXC
-e XTRABACKUP_PASSWORD=WANGchen0923
-e CLUSTER_JOIN=node1
-v v5:/var/lib/mysql
--privileged 
--name=node5
--net=net1
--ip 172.18.0.6
pxc 

为什么内部端口不使用172.18.0.1呢?因为172.18.0.1已被使用

v1:

docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=WANGchen0923 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=WANGchen0923 -v v1:/var/lib/mysql --privileged --name=node1 --net=net1 --ip 172.18.0.2 pxc

v2:

docker run -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=WANGchen0923 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=WANGchen0923 -e CLUSTER_JOIN=node1 -v v2:/var/lib/mysql --privileged --name=node2 --net=net1 --ip 172.18.0.3 pxc

v3:

docker run -d -p 3309:3306 -e MYSQL_ROOT_PASSWORD=WANGchen0923 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=WANGchen0923 -e CLUSTER_JOIN=node1 -v v3:/var/lib/mysql --privileged --name=node3 --net=net1 --ip 172.18.0.4 pxc

v4:

docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=WANGchen0923 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=WANGchen0923 -e CLUSTER_JOIN=node1 -v v4:/var/lib/mysql --privileged --name=node4 --net=net1 --ip 172.18.0.5 pxc

v5:

docker run -d -p 3311:3306 -e MYSQL_ROOT_PASSWORD=WANGchen0923 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=WANGchen0923 -e CLUSTER_JOIN=node1 -v v5:/var/lib/mysql --privileged --name=node5 --net=net1 --ip 172.18.0.6 pxc

在创建pxc容器时,pxc创建很快,但内部的mysql初始化很慢,内部的mysql数据库初始化,打开需要3-5分钟。需要耐心等待,如果在第一个pxc容器内mysql未初始化完成时,没有启动成功,创建第二个pxc容器,第二个pxc容器启动会出现闪退现象,因为第二个容器内的mysql会与第一个mysql做同步时候会发现,第一个容器内的mysql没有成功启动的时候,它就会出现一些故障,导致第二个容器闪退,一定要切记,耐心等待

测试使用navcat等连接工具连接成功即可

数据库的负载均衡

数据库负载均衡的重要性

虽然搭建了数据库集群,如果不使用负载均衡,单节点梳理所有请求,负载高,性能差

image-20200415211102487

使用Haproxy做负载均衡,请求被均匀分发给每一个节点,单节点负载低,性能好

image-20200415211236505

Haproxy老牌的数据库中间件产品,不是数据库,只是一个转发器而已

负载均衡可以使用nginx完成,为什么要用haproxy呢?当然使用负载均衡中间件是有考量的,看图

image-20200415211624466

安装Haproxy镜像

$docker pull haproxy

image-20200415212248993

下载好镜像,不要着急的去创建镜像,

创建Haproxy配置文件

首先是需要在宿主机上创建haproxy.cfg

$ touch /home/soft/haproxy/haproxy.cfg   //存放目录可以自己去指定

接下来使用容器的目录映射技术把soft目录映射到haproxy容器内部,然后在haproxy内部就可以找到这个配置文件,启动haproxy的服务,自然而然就有配置文件

具体配置文件的编写可参考:https://zhangge.net/5125.html (这个网址内写了很详细的教程)

global
	#工作目录
	chroot /usr/local/etc/haproxy
	#日志文件,使用rsyslog服务中local5日志设备(/var/log/local5),等级info
	log 127.0.0.1 local5 info
	#守护进程运行
	daemon

defaults
log global
mode http
#日志格式
option httplog
#日志中不记录负载均衡的心跳检测记录
option dontlognull
#连接超时(毫秒)
timeout connect 5000
#客户端超时(毫秒)
timeout client 50000
#服务器超时(毫秒)
timeout server 50000

#监控界面
listen admin_stats
#监控界面的访问的IP和端口
bind 0.0.0.0:8888
#访问协议
mode http
#URI相对地址
stats uri /dbs
#统计报告格式
stats realm Global\ statistics
#登陆帐户信息
stats auth admin:WANGchen0923
#数据库负载均衡
listen proxy-mysql
#访问的IP和端口
bind 0.0.0.0:3306
#网络协议
mode tcp
#负载均衡算法(轮询算法)
#轮询算法:roundrobin
#权重算法:static-rr
#最少连接算法:leastconn
#请求源IP算法:source
balance roundrobin
#日志格式
option tcplog
#在MySQL中创建一个没有权限的haproxy用户,密码为空。Haproxy使用这个账户对MySQL数据库心跳检测
option mysql-check user haproxy
server MySQL_1 172.18.0.2:3306 check weight 1 maxconn 2000
server MySQL_2 172.18.0.3:3306 check weight 1 maxconn 2000
server MySQL_3 172.18.0.4:3306 check weight 1 maxconn 2000
#使用keepalive检测死链
option tcpka

创建Haproxy容器

$docker run -d -it -p 4001:8888 -p 4002:3306 -v /home/soft/haproxy/:/usr/local/etc/haproxy --name ha1 --privileged --net=net1 --ip 172.18.0.7 haproxy

在数据库创建一个haproxy账号

CREATE USER 'haproxy'@'%' IDENTIFIED BY '';

[SQL]CREATE USER 'haproxy'@'%' IDENTIFIED BY '';
受影响的行: 0
时间: 0.109s

[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

当我执行完创建命令,发现后面出现了错误,然后百度半天后来发现是因为navicat版本太低导致

image-20200415231544958

/etc/my.cnf最后添加配置 [mysqld] sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 解决了我的mysql集群每次重启sqlmodde回来的问题

进入haproxy容器内

docker exec -it ha1 bash

加载haproxy.cfg配置文件

haproxy -f /usr/local/etc/haproxy/haproxy.cfg

浏览器打开宿主机ip:4001/dbs

image-20200415233401550

mysql节点都是畅通的稳定运行的背景都是绿色,我挂掉没些节点试试

image-20200415233637414

image-20200415233701686

PXC集群,结束所有节点,重新启动会出现闪退,或者有节点不能启动有的节点可以允许,navicat不能连接的情况,原因:

一:PXC集群只有在超过一半数量的节点宕机,集群才会不可用,这是为了避免异地机房部署PXC集群,因为网络故障,导致一个PXC集群分裂成两个集群。所以说挂掉一两个节点没什么问题,只要不超过一半的节点就行。
二:你也可以删除容器和数据卷,重新创建,因为宿主机上的数据卷不会被删除,重新创建容器做映射,数据也不会丢失。

docker 意外宕机,PXC启动不了解决方法

由于 意外宕机 docker start pxc 节点后闪退,解决方法如下

  1. 从节点中找任意一个数据卷映射目录,修改参数

    [[email protected] ~]# docker volume ×××pect v1
    [
    {
        "CreatedAt": "2019-06-14T13:13:17+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/v1/_data",
        "Name": "v1",
        "Options": {},
        "Scope": "local"
    }
    ]
    
  2. 修改 grastate.dat 配置文件(这是 pxc 集群一种特殊的数据一致性同步的安全机制)

    # GALERA saved state
    version: 2.1
    uuid:    f5cf24ff-8e62-11e9-a3b5-df56c6b933c6
    seqno:   -1
    safe_to_bootstrap: 1 // 此处改为1
    
  3. 启动节点即可

    docker start pxc节点
    

关闭阿里云盾

service aegis stop //停止进程

chkconfig --del aegis //彻底删除服务

PXC集群宕机场景

# 场景:5个宕机的节点宕掉那一瞬间的数据分别为ABCDE 这5个顺序的版本 A是最老的版本 E是最新的版本 第一个节点是根节点

# 实验:启动第一个节点(数据版本为A的节点)

# It may not be safe to bootstrap the cluster from this node. It was not the last one to leave the cluster and may not contain all the updates. To force cluster bootstrap with this node, edit the grastate.dat file manually and set safe_to_bootstrap to 1

# 大概意思是说:从这个节点启动可能不安全,因为它不是最后一个离开集群环境的,可能不包含最新的更新.若要强制使用这个节点启动集群,请修改grastate.bat文件,将safe_to_boostrap设置为1

# 启动第二个节点(我加入的那个节点还没启动呢,我不着急启动) 无法与集群建立连接

# PS:五个节点的集群环境均为PXC,第二三四五个节点的加入的节点都是第一个几点

# 启动第N个节点(非开始节点) 与第二个同样

# 现状:所有的节点都宕机了,根节点不是最新节点无法启动,其他节点因为根节点未启动而不能启动,该怎么处理呢?

# 猜想:尝试上面所述的删除grastate.dat文件再重第一个节点开始启动

# rm -rf /var/lib/docker/volumes/mysql1-v/_data/grastate.dat

# rm -rf /var/lib/docker/volumes/mysql2-v/_data/grastate.dat

# rm -rf /var/lib/docker/volumes/mysql3-v/_data/grastate.dat

# rm -rf /var/lib/docker/volumes/mysql4-v/_data/grastate.dat

# rm -rf /var/lib/docker/volumes/mysql5-v/_data/grastate.dat

# 启动第一个节点 我们发现启动成功了,但是数据只保留了这个节点宕机时的数据

# 启动第二个节点 数据被同步成了第一个节点的数据

# 启动第N个节点 数据被同步成了第一个节点的数据

# 结论:当所有节点都宕机时,如果最后一个宕机的不是根节点,那么直接删除grastate.dat文件并重启容器的话,数据会丢失,如果最后一个宕机的是根节点,那么数据应该没问题

# 目标:无论最后一个离开集群的节点是否是根节点,我们都希望能够保存最新版的数据并且重启集群

# 方案:个人方案原理如下

​ 确定最后一个宕机的节点并让它成为根节点重启,再运行其他普通节点

# 问题:1.我们应该如何得知最后一个宕机的节点?

# 这个方法应该不少 比如使用haproxy负载均衡页面中的失去连接时间来看 失去连接时间最短的即是最后离开节点的

# 2.我们应该如何指定这个节点从普通节点变为根节点?

# docker好像不支持创建容器后再追加或者修改配置 那么我们可以删除所有卷中的grastate.dat文件,重新创建并运行容器即可

MySQL集群方案

PXC的数据强一直性

同步复制,事务在所有集群节点要么同时提交,要么不提交

Replication采用异步复制,无法保证数据的一致性

负载均衡高可用方案

单节点Haproxy不具备高可用,必须要有冗余设计

image-20200416231422937

Haproxy双机热备方案离不开一个关键技术,叫做虚拟ip

linux技术可以在一个网卡中定义多个ip地址 ,可以把这些ip地址分配给对应的程序,这些ip地址就叫做虚拟ip

利用Keepalived实现双机热备

首先要定义一个虚拟ip,然后是双机热备,所以需要准备两个haproxy容器,这个两个容器各自运行haproxy,haproxy所在的容器还需要安装一个程序,这个程序叫做keepalived,keepalived这个程序是用来抢占虚拟ip的,所以我在各自的haproxy虚拟容器中安装好keepalived之后,keepalived运行的时候就会抢站这个虚拟ip,当然是谁手快谁持有 ,抢到这个虚拟ip以后,另外一个没抢到就处于等待状态,然后抢到虚拟ip的keepalived的容器叫做主服务器,没有抢到的keepalived叫做备服务器,两个keepalived之间是有心跳检测的,如果备服务器发送给主服务器的keepalived没有响应,也就意味着主服务器可能出现了故障,这个时候备用服务器上的keepalived就有权把虚拟ip抢到手,这样子我就通过应用程序向这个虚拟ip发送数据库请求,不去关心这个虚拟ip对应哪个haproxy,因为一个haproxy所在的容器挂掉了没关系,有另外一个haproxy容器接替工作,这个就是双击热备的具体细节

image-20200416233041075

image-20200416233148858

172.18.0.15这个虚拟ip只能在docker内部使用,在局域网上如果想访问docker内部的虚拟ip,需要在宿主机上安装keepalived,让这个宿主机的keepalived把某一个ip映射到docker内部虚拟ip上,然后安装好keepalived后用命令好创建一个虚拟ip,假设这个虚拟的ip是192.168.99.65,那么应用程序向这个ip发送的数据库请求就会路由到docker的虚拟ip上,因为这个虚拟ip被某一个keepalived所抢占着,所以这ip发送的所有数据库请求就被转发到这个haproxy上,haproxy在通过负载均衡把这个请求发送给某一个pxc节点。

安装keepalived

keepalived必须要安装在haproxy所在的容器内

$ apt-get update //先更新apt-get程序

apt-get,是一条linux命令,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统

apt-get install keepalived 

为什么会使用apt-get呢,centos不是使用yum命令吗?因为haproxy是使用ubuntu镜像创建出来的,在ubuntu上安装的程序需要apt-get,宿主机是centos。安装程序使用的yum指令

docker容器加速 apt-get加速方案

echo "">sources.list
echo "deb http://mirrors.163.com/ubuntu/ wily main restricted universe multiverse">>sources.list
echo "deb http://mirrors.163.com/ubuntu/ wily-security main restricted universe multiverse">>sources.list
echo "deb http://mirrors.163.com/ubuntu/ wily-updates main restricted universe multiverse">>sources.list
echo "deb http://mirrors.163.com/ubuntu/ wily-proposed main restricted universe multiverse">>sources.list
echo "deb http://mirrors.163.com/ubuntu/ wily-backports main restricted universe multiverse">>sources.list
echo "deb-src http://mirrors.163.com/ubuntu/ wily main restricted universe multiverse">>sources.list
echo "deb-src http://mirrors.163.com/ubuntu/ wily-security main restricted universe multiverse">>sources.list
echo "deb-src http://mirrors.163.com/ubuntu/ wily-updates main restricted universe multiverse">>sources.list
echo "deb-src http://mirrors.163.com/ubuntu/ wily-proposed main restricted universe multiverse">>sources.list
echo "deb-src http://mirrors.163.com/ubuntu/ wily-backports main restricted universe multiverse">>sources.list

阿里云镜像源
echo "">sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse">>sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse">>sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse">>sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse">>sources.list
echo "#测试版源">>sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse">>sources.list
echo "#源码">>sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse">>sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse">>sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse">>sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse">>sources.list
echo "#测试版源">>sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse">>sources.list
echo "#Canonical 合作伙伴和附加">>sources.list
echo "deb http://archive.canonical.com/ubuntu/ xenial partner">>sources.list
echo "deb http://extras.ubuntu.com/ubuntu/ xenial main">>sources.list

Keepalived配置文件

虚拟ip要卸载配置文件:/etc/keepalived/keepalived.conf

image-20200417003942963

image-20200417003950924

etho是docker虚拟网卡

image-20200417004139980

image-20200417004149400

image-20200417004259276

image-20200417004310516

image-20200417004325476

echo "vrrp_instance  VI_1 {" >>keepalived.conf
echo "    state  MASTER" >>keepalived.conf
echo "    interface  eth0" >>keepalived.conf
echo "    virtual_router_id  51" >>keepalived.conf
echo "    priority  100" >>keepalived.conf
echo "    advert_int  1" >>keepalived.conf
echo "    authentication {" >>keepalived.conf
echo "        auth_type  PASS" >>keepalived.conf
echo "        auth_pass  123456" >>keepalived.conf
echo "    }" >>keepalived.conf
echo "    virtual_ipaddress {" >>keepalived.conf
echo "        172.18.0.201" >>keepalived.conf
echo "    }" >>keepalived.conf
echo "}" >>keepalived.conf

启动keepalived

启动keepalived之后,宿主机可以ping桶虚拟ip

service keepalived start
ping 172.18.0.201

image-20200417005132349

数据库热备份

冷备份

冷备份是关闭数据库时候的备份方式,通常做法是拷贝数据文件

冷备份是最简单安全的一种备份方式

大型网站无法做到关闭业务备份数据,所以冷备份不是最佳选择

热备份

热备份是在系统运行状态下备份数据,也是难度最大的备份

MySQL常见的热备份有LVM和XtraBackup两种方案

LVM是linux自带的一种服务,lVM是通过分区备份,原则上LVM是可以备份所有的数据,但是LVM备份mysql需要进行数据库加锁操作,数据库只能读取不能写入数据,对业务开展还是有影响的。而且操作lVM指令分区时指令繁多,比较麻烦

XtraBackup 不需要锁表备份,一边读写,一边备份,而是还是免费的mysql备份方案

XtraBackup

XtraBackup是percona公司开源的数据备份工具,支持mysql官方版,以及各种衍生版

优势:

XtraBackup备份过程不锁表,快速可靠

XtraBackup备份不会打断正在执行的事物

XtraBackup能够基于压缩等功能节约磁盘空间和流量

全量备份和增量备份

全量备份是备份全部数据库。备份过程时间长,占用空间大

增量备份是只备份变化的那部分数据。备份时间段,占用空间小

··1、首先要在宿主机上创建数据卷

docker volume create backup

docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=WANGchen0923 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=WANGchen0923 -v v1:/var/lib/mysql -v backup:/data --privileged -e CLUSTER_JOIN=node2 --name=node1 --net=net1 --ip 172.18.0.2 pxc

PXC全量备份步骤

pxc容器内安装XtraBackup,并执行备份

apt-get update

apt-get install percona-xtrabackup-24

innobackupex --user=root --password=WANGchen0923 /data/backup/full //全量备份,备份路径

PXC全量恢复步骤

数据库可以热备份,但是不能热还原。为了避免回复过程中数据同步,我们采用空白的Mysql还原数据,然后在建立PXC集群

还原数据前要将未提交的事物回滚,还原数据之后重启Mysql

容器内操作:

rm -rf /var/lib/mysql/*
innobackupex --user=root --password=WANGchen0923 --apply-back /data/backup/full/2020-04-14_22_28_25/   //把没有提交的参数回滚  pply-back就是回滚
innobackupex --user=root --password=WANGchen0923 --copy-back /data/backup/full/2020-04-14_22_28_25/   //copy-back还原

image-20200417223559933

image-20200417223638945

image-20200417223727582

image-20200417223743760

image-20200417223838750

image-20200418174958954

image-20200418175350088