MySQL备份

article/2025/10/8 0:02:34

目录

一、直接拷贝数据库文件

二、mysqldump备份数据库

1、备份

2、备份还原

(1)完全备份还原

(2)增量备份

#eg

     ​(1)创建一个新的数据库表resume.test

     ​(2)此时完全备份

     ​​(3)接着再往数据库表里面插入两条数据

     ​(4)删除数据库resume,刷新日志

     ​(5)此时会增加一个新的二进制日志

     ​(6)备份还原

#GTID全局事务标识符

#binlog日志的GTID新特性

(1)启动gtid

(2)使用DDL和DML语句之后查看gtid会发生改变

#查看binlog

(3)数据库还原

三、mydumper备份数据库

1、备份 mydumper

2、还原 myloader

 eg:备份数据库表 db.course,删除表后还原

四、借用windows下的软件备份

1、首先先授权一个用户

2、此时软件登录数据库

五、lvm备份、恢复

1、数据迁移到逻辑卷

(1)进行逻辑卷管理

(2) 将/var/lib/mysql/下所有内容压缩打包到/backup/MySQL/

(3)将lv_mysql挂载到/var/lib/mysql下此时mysql下内容将自动被清空,接着进行解压

(4) 接着检查所属用户和组是否为mysql,如果不是则需要修改

(5)登录数据库

​#创建用户并授权方法

2、快照备份数据库

(1)锁表(读锁)

(2)逻辑卷创建快照

(3)解锁

(4)挂载

      #如果没有rsync需要进行安装(yum install rsync -y)

(5)备份

(6)此时关掉mysql 配置/etc/my.cnf

(7)接着启动mysql并登录可以看到数据库表和开始一样

(8)卸载快照并删除

#脚本方式进行(1)-(8)操作


一、直接拷贝数据库文件

首先关闭数据库
[root@host1 mysql]# pwd
/var/lib/mysql
压缩、拷贝到host2
[root@host1 mysql]# tar czf db.tar.gz *
[root@host1 mysql]# scp db.tar.gz 192.168.157.11:/beifenhost2
首先关闭数据库,清理/var/lib/mysql/下的内容
[root@host2 beifen]# tar xf db.tar.gz /var/lib/mysql/
将/beifen/db.tar.gz解压到/var/lib/mysql

 此时登录host2的数据库可以看到两个数据库中的内容相同

二、mysqldump备份数据库

1、备份

帮助 mysqldump --help[root@host1 ~]# mysqldump -u登录用户 -p'密码' 数据库 表名 > 备份文件名称.sql
#数据库 表名:这里可以是指定数据库或者是某个库表
-A备份所有数据库,
-B会将创建数据库语句也备份,
-d备份数据库表的结构不备份数据。
​
备份数据库
[root@host1 ~]# mysqldump -uroot -p'MySQL@123' db -B  > beifen1.sql  
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@host1 ~]# ls
beifen1.sql
备份成压缩包形式
[root@host1 ~]# mysqldump -uroot -p'MySQL@123' db -B | gzip > beifen1.sql.gz
mysqldump: [Warning] Using a password on the command line interface can be insecure.

 

备份数据库表
[root@host1 ~]# mysqldump -uroot -p'MySQL@123' db course > beifen2.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@host1 ~]# ls beifen*
beifen1.sql  beifen1.sql.gz  beifen2.sql

2、备份还原

(1)完全备份还原

备份还原
还原数据库
方法一
在mysql中source后跟备份文件存放路径
mysql> source /backup/MySQL/beifen1.sql
​
方法二
[root@host1 ~]# mysql -uroot -p'MySQL@123' < /backup/MySQL/beifen1.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
​
这个时候就可以看到被还原的数据库
​
还原数据库表
mysql> source /backup/MySQL/beifen2.sql
​
[root@host1 MySQL]# mysql -uroot -p'MySQL@123' db < ./beifen2.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
​
压缩包还原
[root@host1 MySQL]# zcat ./beifen1.sql.gz | mysql -uroot -p'MySQL@123'
mysql: [Warning] Using a password on the command line interface can be insecure.

(2)增量备份

首先是要先开启数据库的二进制日志的log_bin

方法参考MySQL日志管理_spring℡的博客-CSDN博客

第一步先做完全备份

#eg

     ​(1)创建一个新的数据库表resume.test

mysql> select * from test;
+--------+------+------+------------+------+
| name   | weig | age  | hobby      | sex  |
+--------+------+------+------------+------+
| 白熊   | 80.0 |   10 | dance,sing | m    |
| 胖达   | 75.0 |   10 | dance,sing | m    |
+--------+------+------+------------+------+
2 rows in set (0.00 sec)
​
mysql> insert test values ('克洛伊','35','8','sing','f'),('棕熊','76','9','dance','m');
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

     ​(2)此时完全备份

[root@host1 MySQL]# mysqldump -uroot -p'MySQL@123' --opt -F --single-transaction -B resume > /backup/MySQL/resume.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.

     ​​(3)接着再往数据库表里面插入两条数据

mysql> insert test values ('小白','45','8','sing','f'),('小胖','66','9','dance','m');

     ​(4)删除数据库resume,刷新日志

mysql> drop database resume;
Query OK, 1 row affected (0.01 sec)
mysql> flush logs;
Query OK, 0 rows affected (0.01 sec)

     ​(5)此时会增加一个新的二进制日志

[root@host1 mysql]# ll mysql-bin.00000*
-rw-r-----. 1 mysql mysql   177 Apr 17 14:34 mysql-bin.000002
-rw-r-----. 1 mysql mysql   177 Apr 17 14:54 mysql-bin.000003
-rw-r-----. 1 mysql mysql   177 Apr 17 14:59 mysql-bin.000004
-rw-r-----. 1 mysql mysql   177 Apr 17 15:28 mysql-bin.000005
-rw-r-----. 1 mysql mysql  3303 Apr 17 15:37 mysql-bin.000006
-rw-r-----. 1 mysql mysql 18407 Apr 20 15:03 mysql-bin.000007
-rw-r-----. 1 mysql mysql  2059 Apr 20 16:44 mysql-bin.000008
-rw-r-----. 1 mysql mysql   665 Apr 20 16:46 mysql-bin.000009

     ​(6)备份还原

第一步还原完全备份
mysql> source /backup/MySQL/resume.sql

第二步还原增量备份
[root@host1 ~]# mysqlbinlog /var/lib/mysql/mysql-bin.000009

方法一:根据时间备份还原
[root@host1 MySQL]# mysqlbinlog --start-datetime="2022-04-20 16:45:32" --stop-datetime="2022-04-20 16:45:57"  /var/lib/mysql/mysql-bin.000009 -r resume1.sql
[root@host1 MySQL]# mysql -uroot -p'MySQL@123' < resume1.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
​
方法二:根据位置点备份还原
[root@host1 MySQL]# mysqlbinlog --start-position=293 --stop-position=455  /var/lib/mysql/mysql-bin.000009 -r resume2.sql
mysql> source /backup/MySQL/resume2.sql
mysql> select * from test;
+-----------+------+------+------------+------+
| name      | weig | age  | hobby      | sexs  |
+-----------+------+------+------------+------+
| 白熊      | 80.0 |   10 | dance,sing | m    |
| 胖达      | 75.0 |   10 | dance,sing | m    |
| 克洛伊    | 35.0 |    8 | sing       | f    |
| 棕熊      | 76.0 |    9 | dance      | m    |
| 小白      | 45.0 |    8 | sing       | f    |
| 小胖      | 66.0 |    9 | dance      | m    |
+-----------+------+------+------------+------+
6 rows in set (0.00 sec)

#GTID全局事务标识符

5.6以后添加5.7做了加强

#binlog日志的GTID新特性

(1)启动gtid

mysql> desc mysql.gtid_executed-> ;
+----------------+------------+------+-----+---------+-------+
| Field          | Type       | Null | Key | Default | Extra |
+----------------+------------+------+-----+---------+-------+
| source_uuid    | char(36)   | NO   | PRI | NULL    |       |
| interval_start | bigint(20) | NO   | PRI | NULL    |       |
| interval_end   | bigint(20) | NO   |     | NULL    |       |
+----------------+------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
mysql> show variables like '%gtid%';
+----------------------------------+-----------+
| Variable_name                    | Value     |
+----------------------------------+-----------+
| binlog_gtid_simple_recovery      | ON        |
| enforce_gtid_consistency         | OFF       |
| gtid_executed_compression_period | 1000      |
| gtid_mode                        | OFF       |
| gtid_next                        | AUTOMATIC |
| gtid_owned                       |           |
| gtid_purged                      |           |
| session_track_gtids              | OFF       |
+----------------------------------+-----------+
8 rows in set (0.00 sec)

 由于gtid_mode=OFF所以需要开启

[root@host1 ~]# vim /etc/my.cnf
​
gtid-mode=on
enforce-gtid-consistency=on

(2)使用DDL和DML语句之后查看gtid会发生改变

DDL
mysql> create database dba;
Query OK, 1 row affected (0.01 sec)
mysql> use dba
Database changed
mysql> create table test (sno char(12),name char(13),cno char(8));
Query OK, 0 rows affected (0.01 sec)

DML
​
开启事务mysql> begin;
​
mysql> insert test(sno,name) values('122110','小白');
Query OK, 1 row affected (0.00 sec)
#不管是中间进行几次插入
​
事务提交mysql> commit;
最后79c7390e-ad1f-11ec-9593-000c29ae9e04:只会增一

#查看binlog

mysql> SHOW binlog EVENTS in 'mysql-bin.000012';

(3)数据库还原

首先有一个数据库 dba 库里面有表tb1,且表内插入了一些简单数据。

mysql> select * from tb1;
+-----+--------+
| sno | name   |
+-----+--------+
| 100 | 小明   |
| 101 | 小李   |
+-----+--------+
2 rows in set (0.00 sec)创完之后删除tb1

mysql> show binlog events in 'mysql-bin.000012'; 

 此时在/backup/MySQL下编写备份还原部分内容 

因为9是删表部分因此恢复1-8

(1)数据备份
因为GTID幂等性,这里我添加了--skip-gtids
​
[root@host1 MySQL]# mysqlbinlog  --skip-gtids --include-gtids="79c7390e-ad1f-11ec-9593-000c29ae9e04:1-8" mysql-bin.000012 -r gtid_1.sql
​
此时就有了gtid_1.sql(2)数据恢复​
mysql> set sql_log_bin=0;
Query OK, 0 rows affected (0.00 sec)
​
[root@host1 MySQL]# mysql -u root -p'MySQL@123'< gtid_1.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
​
mysql> set sql_log_bin=1;
Query OK, 0 rows affected (0.00 sec)

此时在数据库中就可以查看被删除的数据库已经库表

三、mydumper备份数据库

安装:Gitee 极速下载/mydumper

yum install https://github.com/mydumper/mydumper/releases/download/v0.11.5/mydumper-0.11.5-1.el7.x86_64.rpm

1、备份 mydumper

mydumper -uroot -pMySQL@123 -B 数据库名 -T 表名 -o /存放路径
备份数据库db[root@localhost ~]# mydumper -u root -p MySQL@123 -B db -o /db
[root@localhost ~]# tree /db
/db
├── db.course.00000.sql
├── db.course-metadata
├── db.course-schema.sql
├── db-schema-create.sql
├── db.student.00000.sql
├── db.student-metadata
├── db.student-schema.sql
└── metadata
​
0 directories, 8 files

2、还原 myloader

myloader -u root -p MySQL@123 -d /db -o -B db

先右边再左边 

 eg:备份数据库表 db.course,删除表后还原

备份
[root@localhost db]# mydumper -u root -p MySQL@123 -B db -T course -o /db11
#这里-B后面跟数据库名,-T后面跟表名,-o代表输出到那个位置
[root@localhost db]# cd /db11
[root@localhost db11]# ls
db.course.00000.sql  db.course-metadata  db.course-schema.sql  db-schema-create.sql  metadata
​
删除表course
mysql> drop table course;
Query OK, 0 rows affected (0.02 sec)
​
恢复表course
[root@localhost db11]# myloader -u root -p MySQL@123 -d /db11 -B db  -o
这里直接恢复数据库就会恢复表内容

四、借用windows下的软件备份

1、首先先授权一个用户

grant all on . to jim@'%' identified by 'Jim@12345';

2、此时软件登录数据库

将需要备份的数据库如下备份,后删除再导入即可

五、lvm备份、恢复

1、数据迁移到逻辑卷

先关闭mysql服务,虚拟机添加一块新的磁盘(这里添加6G)

lvs:查看磁盘分区情况

lsblk:磁盘剩余内存

此时重启虚拟机即可

(1)进行逻辑卷管理

创建物理卷
[root@localhost ~]# pvcreate /dev/sdbPhysical volume "/dev/sdb" successfully created.
​
创建卷组
[root@localhost ~]# vgcreate vg1 /dev/sdbVolume group "vg1" successfully created
​
创建逻辑卷
[root@localhost ~]# lvcreate -n lv_mysql -L 4G vg1Logical volume "lv_mysql" created.格式化逻辑卷(xfs的文件系统只支持扩大逻辑卷,ext4的文件系统支持扩大和缩小逻辑卷)
[root@localhost ~]# mkfs.xfs /dev/vg1/lv_mysql

(2) 将/var/lib/mysql/下所有内容压缩打包到/backup/MySQL/

[root@localhost mysql]# tar -czvf /backup/MySQL/mysql.tar.gz .
查看
[root@localhost mysql]# tar -tvf /backup/MySQL/mysql.tar.gz

(3)将lv_mysql挂载到/var/lib/mysql下此时mysql下内容将自动被清空,接着进行解压

[root@localhost mysql]# mount /dev/vg1/lv_mysql /var/lib/mysql
[root@localhost mysql]# tar xf /backup/MySQL/mysql.tar.gz -C .

(4) 接着检查所属用户和组是否为mysql,如果不是则需要修改

[root@localhost lib]# ls -ld mysql
drwxr-x--x. 15 mysql mysql 4096 May  4 16:42 mysql此时启动mysql即可
systemctl start mysqld

(5)登录数据库

show databases;
和原来数据库内容一样

​#创建用户并授权方法

mysql> grant all on *.* to admin@'192.168.157.%' identified by 'Admin@123';
Query OK, 0 rows affected, 1 warning (0.00 sec)

2、快照备份数据库

(1)锁表(读锁)

mysql> flush table with read lock;
Query OK, 0 rows affected (0.00 sec)

(2)逻辑卷创建快照

[root@host1 ~]# lvcreate -n lv_mysql_s -L 500M -s /dev/vg1/lv_mysqlLogical volume "lv_mysql_s" created.
[root@host1 ~]# lvsLV         VG     Attr       LSize   Pool Origin   Data%  Meta%  Move Log Cpy%Sync Convertroot       centos -wi-ao---- <17.00g                                                      swap       centos -wi-ao----   2.00g                                                      lv_mysql   vg1    owi-aos---   4.00g                                                      lv_mysql_s vg1    swi-a-s--- 500.00m      lv_mysql 0.00  

(3)解锁

​​​​​​​mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)

(4)挂载

[root@host1 ~]# mkdir /mnt/mysql -p
[root@host1 ~]# mount -o nouuid /dev/vg1/lv_mysql_s /mnt/mysql

      #如果没有rsync需要进行安装(yum install rsync -y)

(5)备份

[root@host1 mnt]# rsync -av /mnt/mysql/ /mysql_back/

(6)此时关掉mysql 配置/etc/my.cnf

(7)接着启动mysql并登录可以看到数据库表和开始一样

(8)卸载快照并删除

[root@host1 ~]# umount /mnt/mysql/ && lvremove /dev/vg01/lv_mysql_s

#脚本方式进行(1)-(8)操作

cd /mysql/scripts

[root@host1 scripts]# vim my.sh

#!/bin/bash
back_dir=/backup/`date +%F`
[ -d $back_dir ]|| mkdir -p $back_dir
echo "flush tables with read lock; system lvcreate -n lv_mysql_s -L 500M -s /dev/vg1/lv_mysql;unlock tables;" |mysql -uroot -pMySQL@123 &>/dev/null
[ -d /mnt/mysql/ ] || mkdir -p /mnt/mysql/
mount -o nouuid /dev/vg1/lv_mysql_s /mnt/mysql/
rsync -a /mnt/mysql/ $back_dir
if [ $? -eq 0 ];thenumount /mnt/mysql/ && lvremove -f /dev/vg01/lv_mysql_s &>/dev/null
fi

执行脚本

[root@host1 scripts]# sh my.sh


http://chatgpt.dhexx.cn/article/tOM9LvKA.shtml

相关文章

MySQL备份方案

mysql数据库的几种备份方案&#xff1a; 一、binlog二进制日志通常作为备份的重要资源&#xff0c;所以再说备份方案之前先总结一下binlog日志 1、binlog日志 1.1、引起mysql服务器改变的任何操作( 增 删 改 没有查)1.2、复制功能依赖于此日志1.3、slave服务器通过复制master…

MySQL 数据库备份(一)(完全备份与恢复)

文章目录 前言一、MySQL 完全备份1.数据库备份方式精讲1.1 数据库备份的重要性1.2 数据库备份的分类1.2.1 物理备份1.2.2 逻辑备份1.2.3 完全备份1.2.4 差异备份1.2.5 增量备份1.2.6 备份方式比较 1.3 MySQL 完全备份概念解读 2.mysqldump 备份演练2.1 使用 tar 打包文件夹备份…

捷豹路虎选择思博伦车载以太网一致性测试解决方案

现代化的汽车往往拥有上百种发动机控制单元&#xff08;ECU&#xff09;&#xff0c;随着越来越多的车辆开始支持多摄像机和高级驾驶员辅助系统&#xff08;ADAS&#xff09;等特性&#xff0c;汽车设计师必须在车载网络中采用更高带宽的以太网技术。汽车以太网源于现代通信网络…

Hype_V

Hyper-V是 微软的一款虚拟化产品&#xff0c;是微软第一个采用类似Vmware和Citrix开源Xen一样的基于hypervisor的技术。这也意味着 微软会更加直接地与市场先行者VMware展开竞争&#xff0c;但竞争的方式会有所不同。 目录 简介 系统要求 架构特点 技术 实际部署 展开 简介 系统…

HSRP介绍

HSRP(Hot Standby Router Protocol 热备份路由器协议)是Cisco的专有协议。HSRP把多台路由器组成一个“热备份组”&#xff0c;形成一个虚拟路由器。这个组内只有一个路由器是Active(活动)的&#xff0c;并由它来转发数据包&#xff0c;如果活动路由器发生了故障&#xff0c;备份…

php+coreseek/sphinx之中文全文搜索平台搭建

1.简介 sphinx是一款高性能全文搜索软件包&#xff0c;由俄罗斯人开发&#xff0c;sphinx本身是可以支持中文搜索的&#xff0c;只是不支持中文分词&#xff0c;需要安装中文分词插件&#xff0c;coreseek就是一个打包了mmseg中文分词插件和sphinx源码的安装包。 2.安装 cores…

live555传输Speex音频详解一:Speex over RTP

1. RTP Speex 头部 RTP头部在[RFC3550]中定义。本文定义RTP头部中各字段的用法。 Payload Type (PT): 本格式的负责类型号。 Marker (M) bit: 此位被用来标志一段无声后有声的开始。打在 有声数据的第一个包上。 Speex支持声音检测&#xff0c;可以在无声时不 产生帧数据。所…

Speex的使用

Downloads Speex是一套主要针对语音的开源免费&#xff0c;无专利保护的音频压缩格式。Speex工程着力于通过提供一个可以替代高性能语音编解码来降低语音应用输入门槛 。另外&#xff0c;相对于其它编解码器&#xff0c;Speex也很适合网络应用&#xff0c;在网络应用上有着自己…

网络测速服务器OpenSpeedTest

什么是 OpenSpeedTest &#xff1f; OpenSpeedTest 是一个跨平台的互联网速度测试应用程序。因此&#xff0c;您可以在不同操作系统中的各种网络浏览器中测试您的互联网速度&#xff0c;而无需安装任何其他应用程序或插件&#xff08;无需 Flash 或 Java&#xff09;。这意味着…

【SpeechX—统一高性能语音部署工具】SpeechX Custom ASR

(以下内容搬运自 PaddleSpeech) 在一些场景中&#xff0c;识别系统需要高精度的识别一些稀有词&#xff0c;例如导航软件中地名识别。而通过定制化识别可以满足这一需求。 相关demo: https://github.com/PaddlePaddle/PaddleSpeech/tree/develop/demos/custom_streaming_asr …

Speex for Android

http://blog.csdn.net/chenfeng0104/article/details/7088138 在Android开发中&#xff0c;需要录音并发送到对方设备上。这时问题来了&#xff0c;手机常会是GPRS、3G等方式上网&#xff0c;所以节省流量是非常关键的&#xff0c;使用Speex来压缩音频文件&#xff0c;可以将音…

IOS开发之SDWebImage

SDWebImage 前言&#xff1a;在我们日常的开发中我们通常会使用SDWebImage来实现UIImageView加载来自互联网的远程图片 官方介绍&#xff1a;一个具有缓存支持的异步映像下载程序 功能简介 一个添加了web图片加载和缓存管理的UIImageView分类一个异步图片下载器一个异步的内存…

SDWebImage-解码、压缩图像

一、简单介绍 研究了下SDWebImage的源码&#xff0c;借鉴了别人的一些资料&#xff0c;感觉逐渐的明白的一些原理&#xff0c;现在就来记录下。 在我们使用 UIImage 的时候&#xff0c;创建的图片通常不会直接加载到内存&#xff0c;而是在渲染的时候默认在主线程上再进行解码…

sdwebimage 加载webp图片

sdwebimage加载 webp / git 配置宏 - (void)setUpCusPhoto {_scrollView [UIScrollView new];_scrollView.frame self.view.bounds;[self.view addSubview:_scrollView];//webpUIImageView *view [[UIImageView alloc] init];view.frame CGRectMake(10, 100, 320, 200);NS…

SDWebImage 5.0简介

一、 SDWebImage原理简介 1.结构 (设计思路借鉴&#xff1a;提供多种接口&#xff0c;到底层调用到同一个方法&#xff0c;减少调用方对可选参数的传递) UIImageViewWebCache和UIButtonWebCache直接为表层的 UIKit框架提供接口, SDWebImageManger&#xff08;SDWebImageManager…

SDWebImage的主流程

SDWebImage提供了UIImageView的分类来实现从网络端下载数据并缓存到内存和磁盘。非常的流行,现在就主流程分析下. 主要的学习链接 &#xff1a;SDWebImage源码解读 - 简书 SDWebImage有如下特点&#xff1a; 提供了UIImageView和UIButton的分类。以支持加载网络图片并缓存…

SDWebImage的缓存策略

SDWebImage 相信对大多数开发者来说&#xff0c;都是一个不陌生的名字。它除了帮助我们读取网络图片&#xff0c;还会处理这些图片的缓存。它的缓存机制到底是什么样的呢&#xff0c;让我给跟大家唠叨唠叨&#xff0c;希望你能有收获。 基本结构 闲言少叙&#xff0c;咱们这就…

SDWebImage源码解析

这段时间研究了一下SDWebImage源码&#xff0c;因个人能力有限&#xff0c;如有不对的地方&#xff0c;请指出或留言&#xff0c;谢谢&#xff01; SDWebImage是一个开源的第三方库&#xff0c;它提供了UIImageView的一个分类&#xff0c;以支持从远程服务器下载并缓存图片的功…

【iOS】SDWebImage

文章目录 SDWebImage日常使用一些主要功能获取图片缓存 缓存机制独立的异步图像下载独立的异步图像缓存 图片加载全过程 源码分析架构图结构SDWebImageManager1. SDWebImageOptions2. SDWebImageManagerDelegate SDWebImageCompatSDWebImageCompat.hSDWebImageCompat.m sd_imag…

开源框架:SDWebImage

引言: SDWebImage是我搞iOS以来少数佩服的框架,膜拜一下作者.真的写的非常棒! 这套开源框架还是蛮重要的, 涉及到异步加载图片源和自动缓存. 我们如果能够熟练使用其API 就可以实现很多复杂的需求了. 作者依旧在更新,目前3.0 版本已经非常强大! 简化了更多的API接口.加强了…