当前位置: 首页 > news >正文

Mysql不锁表备份之Xtrabackup的备份与恢复

一、Xtrabackup介绍

  MySQL冷备、热备、mysqldump都无法实现对数据库进行增量备份。如果数据量较大我们每天进行完整备份不仅耗时且影响性能。而Percona-Xtrabackup就是为了实现增量备份用于MySQL数据库物理热备的备份工具,xtrabakackup有2个工具,分别是xtrabakup、innobakupex。

二、Xtrabackup优点

(1)备份速度快,物理备份可靠

(2)备份过程不会打断正在执行的事务(无需锁表)

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

(4)自动备份校验

(5)还原速度快

(6)可以流传将备份传输到另外一台机器上

(7)在不增加服务器负载的情况备份数据

 定制数据备份策略。例如每周日完整备份,周一到周六增量备份。

三、Xtrabackup备份原理

流程图:

  

  在InnoDB内部会维护一个redo日志文件,我们也可以叫做事务日志文件。事务日志会存储每一个InnoDB表数据的记录修改。当InnoDB启动时,InnoDB会检查数据文件和事务日志,并执行两个步骤:它应用(前滚)已经提交的事务日志到数据文件,并将修改过但没有提交的数据进行回滚操作。

(1)innobackupex启动后,会先fork一个进程,用于启动xtrabackup,然后等待xtrabackup备份ibd数据文件;

(2)xtrabackup在备份innoDB数据时有2种线程:redo拷贝线程和ibd数据拷贝线程。xtrabackup进程开始执行后,会启动一个redo拷贝的线程,用于从最新的checkpoint点开始顺序拷贝redo.log;再启动ibd数据拷贝线程,进行拷贝ibd数据。这里是先启动redo拷贝线程的。在此阶段,innobackupex进行处于等待状态(等待文件被创建)

(4)xtrabackup拷贝完成ibd数据文件后,会通知innobackupex(通过创建文件),同时xtrabackup进入等待状态(redo线程依旧在拷贝redo.log)

(5)innobackupex收到xtrabackup通知后哦,执行FLUSH TABLES WITH READ LOCK(FTWRL),取得一致性位点,然后开始备份非InnoDB文件(如frm、MYD、MYI、CSV、opt、par等格式的文件),在拷贝非InnoDB文件的过程当中,数据库处于全局只读状态。

(6)当innobackup拷贝完所有的非InnoDB文件后,会通知xtrabackup,通知完成后,进入等待状态;

(7)xtrabackup收到innobackupex备份完成的通知后,会停止redo拷贝线程,然后通知innobackupex,redo.log文件拷贝完成;

(8)innobackupex收到redo.log备份完成后,就进行解锁操作,执行:UNLOCK TABLES;

(9)最后innbackupex和xtrabackup进程各自释放资源,写备份元数据信息等,innobackupex等xtrabackup子进程结束后退出。

四、xtrabackup的安装部署以及备份恢复实现

1、xtrabackup的安装(注意对应linux系统版本)

下载地址:https://www.percona.com/downloads/XtraBackup/LATEST/

  • 可以选择rpm包方式安装,也可以下载源码包编译安装,这里直接采用rpm包的方式进行安装 

    [root@master tools]# wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.9-1.el6.x86_64.rpm
    [root@master tools]# yum install -y percona-xtrabackup-24-2.4.9-1.el6.x86_64.rpm 
    [root@master ~]# rpm -qa |grep xtrabackup
    percona-xtrabackup-24-2.4.9-1.el6.x86_64Xtrabackup中主要包含两个工具:
    xtrabackup:是用于热备innodb,xtradb表中数据的工具,不能备份其他类型的表,也不能备份数据表结构;
    innobackupex:是将xtrabackup进行封装的perl脚本,提供了备份myisam表的能力。
    常用选项:  --host     指定主机--user     指定用户名--password    指定密码--port     指定端口--databases     指定数据库--incremental    创建增量备份--incremental-basedir   指定包含完全备份的目录--incremental-dir      指定包含增量备份的目录   --apply-log        对备份进行预处理操作             一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。--redo-only      不回滚未提交事务--copy-back     恢复备份目录

  • 使用innobackupex备份时,其会调用xtrabackup备份所有的InnoDB表,复制所有关于表结构定义的相关文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相关文件,同时还会备份触发器和数据库配置信息相关的文件,这些文件会被保存到一个以时间命名的目录当中。在备份的同时,innobackupex还会在备份目录中创建如下文件:

    (1)xtrabackup_checkpoints -- 备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息:每个InnoDB页(通常为16k大小)
    都会包含一个日志序列号,即LSN,LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的。(2)xtrabackup_binlog_info  --  mysql服务器当前正在使用的二进制日志文件及备份这一刻位置二进制日志时间的位置。(3)xtrabackup_binlog_pos_innodb  --  二进制日志文件及用于InnoDB或XtraDB表的二进制日志文件的当前position。(4)xtrabackup_binary  --  备份中用到的xtrabackup的可执行文件;(5)backup-my.cnf  --  备份命令用到的配置选项信息:在使用innobackupex进行备份时,还可以使用--no-timestamp选项来阻止命令自动创建一个以时间命名的目录:如此一来,innobackupex命令将会创建一个BACKUP-DIR目录来存储备份数据。

      

  • 如果要使用一个最小权限的用户进行备份,则可基于如下命令创建此类用户:如果要使用一个最小权限的用户进行备份,则可基于如下命令创建此类用户:

1

2

3

4

mysql> CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY '123456';  #创建用户

mysql> REVOKE ALL PRIVILEGES,GRANT OPTION FROM 'bkpuser';  #回收此用户所有权限

mysql> GRANT RELOAD,LOCK TABLES,RELICATION CLIENT ON *.* TO 'bkpuser'@'localhost';  #授权刷新、锁定表、用户查看服务器状态

mysql> FLUSH PRIVILEGES;  #刷新授权表

  注意:备份时需启动MySQL,恢复时需关闭MySQL,清空mysql数据目录且不能重新初始化,恢复数据后应该立即进行一次完全备份

 2、xtrabackup全量备份与恢复

1

2

3

4

5

6

7

备份(需开启mysql服务):

  innobackupex --defaults-file=/etc/my.cnf  --user=root --password=pwd --socket=/tmp/mysql.sock /home/backup/full

  xtrabackup: Error: --defaults-file must be specified first on the command line  ----提示配置文件参数必须放在第一位

恢复(需关闭mysql服务):

  innobackupex --apply-log /home/backup/full/2020.../

  innobackupex --copy-back /home/backup/full/2020.../

(1)准备(prepare)一个完全备份

  一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或者已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处于不一致状态。"准备"的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使用得数据文件处于一致性状态。

innobackupex命令的--apply-log选项可用于实现上述功能,如下面的命令:

# innobackupex --apply-log /path/to/BACKUP-DIR
如果执行正确,其最后输出的几行信息通常如下:120407 09:01:04 innobackupex: completed OK!

   在实现"准备"的过程中,innobackupex通常还可以使用--user-memory选项来指定其可以使用的内存的大小,默认为100M.如果有足够的内存空间可用,可以多划分一些内存给prepare的过程,以提高其完成备份的速度。

(2)从一个完全备份中恢复数据

  innobackupex命令的--copy-back选项用于恢复操作,其通过复制所有数据相关的文件至mysql服务器DATADIR目录中来执行恢复过程。innobackupex通过backup-my.cnf来获取DATADIR目录的相关信息。

# innobackupex --copy-back /path/to/BACKUP-DIR

  当数据恢复至DATADIR目录以后,还需要确保所有的数据文件的属主和属组均为正确的用户,如mysql,否则,在启动mysqld之前还需要事先修改数据文件的属主和属组。如:

# chown -R mysql.mysql /mydata/data/

(3)实战练习 

(1)全量备份
[root@master backups]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --host=127.0.0.1 /home/backup/full/  #在master上进行全库备份#语法解释说明:#--user=root 指定备份用户#--password=123456  指定备份用户密码#--host  指定主机#/backups  指定备份目录[root@master backups]# ll
total 0
drwxr-x--- 7 root root 232 Jul 30 11:01 2018-07-30_11-01-37
[root@master backups]# ll 2018-07-30_11-01-37/  #查看备份数据
total 77856
-rw-r----- 1 root root      418 Jul 30 11:01 backup-my.cnf  #备份用到的配置选项信息文件
-rw-r----- 1 root root 79691776 Jul 30 11:01 ibdata1  #数据文件
drwxr-x--- 2 root root     4096 Jul 30 11:01 mysql
drwxr-x--- 2 root root     4096 Jul 30 11:01 performance_schema
-rw-r----- 1 root root       21 Jul 30 11:01 xtrabackup_binlog_info  #mysql服务器当前正在使用的二进制日志文件和此时二进制日志时间的位置信息文件
-rw-r----- 1 root root      113 Jul 30 11:01 xtrabackup_checkpoints  #备份的类型、状态和LSN状态信息文件
-rw-r----- 1 root root      482 Jul 30 11:01 xtrabackup_info
-rw-r----- 1 root root     2560 Jul 30 11:01 xtrabackup_logfile    #备份的日志文件(2)在另外一台服务器恢复
[root@slave ~]# /etc/init.d/mysqld stop  #停止slave上的mysql
Shutting down MySQL.. SUCCESS! [root@slave tools]# yum install -y percona-xtrabackup-24-2.4.9-1.el6.x86_64.rpm   #安装xtrabackup
[root@master backups]# scp -r 2018-07-30_11-01-37/ root@192.168.56.12:/home/backup/full/   #从master上拷贝备份数据
[root@slave tools]# innobackupex --apply-log /home/backup/full/2020.../      #合并数据,使数据文件处于一致性的状态
180729 23:18:23 innobackupex: Starting the apply-log operationIMPORTANT: Please check that the apply-log run completes successfully.At the end of a successful apply-log run innobackupexprints "completed OK!".innobackupex version 2.4.9 based on MySQL server 5.7.13 Linux (x86_64) (revision id: a467167cdd4)
xtrabackup: cd to /backups/2018-07-30_11-01-37/
xtrabackup: This target seems to be not prepared yet.
InnoDB: Number of pools: 1
xtrabackup: xtrabackup_logfile detected: size=8388608, start_lsn=(3127097)
......
InnoDB: FTS optimize thread exiting.
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 3129915
180729 23:18:30 completed OK!
[root@slave ~]# rm -rf /usr/local/mysql/data/  #在slave上删除原有的数据
[root@slave ~]# vim /etc/my.cnf  #配置my.cnf的数据目录路径,否则会报错,要和master一致
datadir=/usr/local/mysql/data
[root@slave ~]# innobackupex --copy-back /home/backup/full/2020.../  #在slave上数据恢复
180729 23:32:03 innobackupex: Starting the copy-back operationIMPORTANT: Please check that the copy-back run completes successfully.At the end of a successful copy-back run innobackupexprints "completed OK!".
......
180729 23:32:08 completed OK!  #看到completed OK就是恢复正常了
[root@slave ~]# ll /usr/local/mysql/data/  #slave上查看数据目录,可以看到数据已经恢复,但是属主会有问题,需要进行修改,所以一般使用mysql的运行用户进行恢复,否则需要进行修改属主和属组信息
total 188432
-rw-r----- 1 root root 79691776 Jul 29 23:32 ibdata1
-rw-r----- 1 root root 50331648 Jul 29 23:32 ib_logfile0
-rw-r----- 1 root root 50331648 Jul 29 23:32 ib_logfile1
-rw-r----- 1 root root 12582912 Jul 29 23:32 ibtmp1
drwxr-x--- 2 root root       20 Jul 29 23:32 kim
drwxr-x--- 2 root root     4096 Jul 29 23:32 mysql
drwxr-x--- 2 root root     4096 Jul 29 23:32 performance_schema
drwxr-x--- 2 root root       20 Jul 29 23:32 repppp
drwxr-x--- 2 root root     4096 Jul 29 23:32 wordpress
-rw-r----- 1 root root      482 Jul 29 23:32 xtrabackup_info
[root@slave ~]# chown -R mysql.mysql /usr/local/mysql/data/  #修改属主属组
[root@slave ~]# /etc/init.d/mysqld start  #启动mysql
Starting MySQL. SUCCESS! 
[root@slave ~]# mysql -uroot -p -e "show databases;"  #查看数据,是否恢复
Enter password: 
+--------------------+
| Database           |
+--------------------+
| information_schema |
| kim                |
| mysql              |
| performance_schema |
| repppp             |
| wordpress          |
+--------------------+

 总结全库备份与恢复三步曲:

a. innobackupex全量备份,并指定备份目录路径;

b. 在恢复前,需要使用--apply-log参数先进行合并数据文件,确保数据的一致性要求;

c. 恢复时,直接使用--copy-back参数进行恢复,需要注意的是,在my.cnf中要指定数据文件目录的路径。

3、xtrabackup增量备份与恢复

  使用innobackupex进行增量备份,每个InnoDB的页面都会包含一个LSN信息,每当相关的数据发生改变,相关的页面的LSN就会自动增长。这正是InnoDB表可以进行增量备份的基础,即innobackupex通过备份上次完全备份之后发生改变的页面来实现。在进行增量备份时,首先要进行一次全量备份,第一次增量备份是基于全备的,之后的增量备份都是基于上一次的增量备份的,以此类推。

要实现第一次增量备份,可以使用下面的命令进行: 

基于全量备份的增量备份与恢复
做一次增量备份(基于当前最新的全量备份)
innobackupex --defaults-file=/etc/my.cnf --user=root --password=root --incremental /home/backup/incr/ --incremental-basedir=/home/backup/full/2020.../
恢复
1. 准备基于全量 
innobackupex --defaults-file=/etc/my.cnf --user=root --password=root --apply-log --redo-only /home/backup/full/2020.../
2. 准备基于增量 
innobackupex --defaults-file=/etc/my.cnf --user=root --password=root --apply-log --redo-only /home/backup/full/2020.../ --incremental-dir=/home/backup/incr/2020.../
3. 恢复 
innobackupex --defaults-file=/etc/my.cnf --copy-back /home/backup/full/2020.../
解释: 
1. full里指的是完全备份所在的目录。
2. incr指定是第一次基于full增量备份的目录,其他类似以此类推,即如果有多次增量备份。每一次都要执行如上操作。

需要注意的是,增量备份仅能应用于InnoDB或XtraDB表,对于MyISAM表而言,执行增量备份时其实进行的是完全备份。

"准备"(prepare)增量备份与整理完全备份有着一些不同,尤其要注意的是:
①需要在每个备份 (包括完全和各个增量备份)上,将已经提交的事务进行"重放"。"重放"之后,所有的备份数据将合并到完全备份上。
②基于所有的备份将未提交的事务进行"回滚"

(1)增量备份演示 

[root@master backups]# innobackupex --user=root --password=123456 --host=127.0.0.1 /backups/   #全备数据
[root@master ~]# mysql -uroot -p  #在master上创建student库并创建testtb表插入若干数据Enter password: 
mysql> create database student;
Query OK, 1 row affected (0.03 sec)mysql> use student;
Database changed
mysql> create table testtb(id int);
Query OK, 0 rows affected (0.07 sec)mysql> insert into testtb values(1),(10),(99);
Query OK, 3 rows affected (0.04 sec)
Records: 3  Duplicates: 0  Warnings: 0mysql> select * from testtb;
+------+
| id   |
+------+
|    1 |
|   10 |
|   99 |
+------+
3 rows in set (0.00 sec)mysql> quit;
Bye
#使用innobackupex进行增量备份
[root@master backups]# innobackupex --user=root --password=123456 --host=127.0.0.1 --incremental /backups/ --incremental-basedir=/backups/2018-07-30_11-01-37/
......
180730 13:51:50 Executing UNLOCK TABLES
180730 13:51:50 All tables unlocked
180730 13:51:50 Backup created in directory '/backups/2018-07-30_13-51-47/'
MySQL binlog position: filename 'mysql-bin.000005', position '664'
180730 13:51:50 [00] Writing /backups/2018-07-30_13-51-47/backup-my.cnf
180730 13:51:50 [00]        ...done
180730 13:51:50 [00] Writing /backups/2018-07-30_13-51-47/xtrabackup_info
180730 13:51:50 [00]        ...done
xtrabackup: Transaction log of lsn (3158741) to (3158741) was copied.
180730 13:51:50 completed OK!
[root@master backups]# ll  #查看备份数据
total 0
drwxr-x--- 7 root root 232 Jul 30 11:01 2018-07-30_11-01-37  #全量备份数据目录
drwxr-x--- 8 root root 273 Jul 30 13:51 2018-07-30_13-51-47  #增量备份数据目录
[root@master 2018-07-30_11-01-37]# cat xtrabackup_checkpoints #查看全量备份的xtrabackup_checkpoints
backup_type = full-backuped  #备份类型为全量备份
from_lsn = 0  #lsn从0开始
to_lsn = 3127097  #lsn到3127097结束
last_lsn = 3127097
compact = 0
recover_binlog_info = 0[root@master 2018-07-30_13-51-47]# cat xtrabackup_checkpoints   #查看增量备份的xtrabackup_checkpoints
backup_type = incremental  #备份类型为增量备份
from_lsn = 3127097  #lsn从3127097开始
to_lsn = 3158741    #lsn到啊3158741结束
last_lsn = 3158741  
compact = 0
recover_binlog_info = 0

(2)增量备份后数据恢复演示

(1)模拟mysql故障,删除数据目录所有数据[root@master ~]# /etc/init.d/mysqld stop  #模拟mysql故障,停止mysql
Shutting down MySQL.. SUCCESS! 
[root@master ~]# rm -rf /usr/local/mysql/data/*  #删除数据目录中的所有数据(2)合并全备数据目录,确保数据的一致性
[root@master ~]# innobackupex --apply-log --redo-only /backups/2018-07-30_11-01-37/
180730 14:05:27 innobackupex: Starting the apply-log operationIMPORTANT: Please check that the apply-log run completes successfully.At the end of a successful apply-log run innobackupexprints "completed OK!".innobackupex version 2.4.9 based on MySQL server 5.7.13 Linux (x86_64) (revision id: a467167cdd4)
xtrabackup: cd to /backups/2018-07-30_11-01-37/
......
......
xtrabackup: starting shutdown with innodb_fast_shutdown = 1
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 3127106
InnoDB: Number of pools: 1
180730 14:05:29 completed OK!(3)将增量备份数据合并到全备数据目录当中
[root@master ~]# innobackupex --apply-log --redo-only /backups/2018-07-30_11-01-37/ --incremental-dir=/backups/2018-07-30_13-51-47/
180730 14:06:42 innobackupex: Starting the apply-log operationIMPORTANT: Please check that the apply-log run completes successfully.At the end of a successful apply-log run innobackupexprints "completed OK!".
......
......
180730 14:06:44 [00]        ...done
180730 14:06:44 completed OK!
[root@master ~]# cat /backups/2018-07-30_11-01-37/xtrabackup_checkpoints 
backup_type = log-applied  #查看到数据备份类型是增加
from_lsn = 0  #lsn从0开始
to_lsn = 3158741  #lsn结束号为最新的lsn
last_lsn = 3158741
compact = 0
recover_binlog_info = 0(4)恢复数据
[root@master ~]# innobackupex --copy-back /backups/2018-07-30_11-01-37/
180730 14:07:51 innobackupex: Starting the copy-back operationIMPORTANT: Please check that the copy-back run completes successfully.At the end of a successful copy-back run innobackupexprints "completed OK!".
.......
.......
180730 14:08:17 [01]        ...done
180730 14:08:17 completed OK!
[root@master ~]# ll /usr/local/mysql/data/
total 77844
-rw-r----- 1 root root 79691776 Jul 30 14:08 ibdata1
drwxr-x--- 2 root root       20 Jul 30 14:08 kim
drwxr-x--- 2 root root     4096 Jul 30 14:08 mysql
drwxr-x--- 2 root root     4096 Jul 30 14:08 performance_schema
drwxr-x--- 2 root root       20 Jul 30 14:08 repppp
drwxr-x--- 2 root root       56 Jul 30 14:08 student
drwxr-x--- 2 root root     4096 Jul 30 14:08 wordpress
-rw-r----- 1 root root       21 Jul 30 14:08 xtrabackup_binlog_pos_innodb
-rw-r----- 1 root root      554 Jul 30 14:08 xtrabackup_info
[root@master ~]# chown -R mysql.mysql /usr/local/mysql/data  #更改数据的属主属组
[root@master ~]# /etc/init.d/mysqld start  #启动mysql
Starting MySQL.Logging to '/usr/local/mysql/data/master.err'.
.. SUCCESS! 
[root@master ~]# mysql -uroot -p -e "show databases;"  #查看数据是否恢复
Enter password: 
+--------------------+
| Database           |
+--------------------+
| information_schema |
| kim                |
| mysql              |
| performance_schema |
| repppp             |
| student            |
| wordpress          |
+--------------------+

总结:
(1)增量备份需要使用参数--incremental指定需要备份到哪个目录,使用incremental-dir指定全备目录;
(2)进行数据备份时,需要使用参数--apply-log redo-only先合并全备数据目录数据,确保全备数据目录数据的一致性;
(3)再将增量备份数据使用参数--incremental-dir合并到全备数据当中;
(4)最后通过最后的全备数据进行恢复数据,注意,如果有多个增量备份,需要逐一合并到全备数据当中,再进行恢复。

相关文章:

Mysql不锁表备份之Xtrabackup的备份与恢复

一、Xtrabackup介绍 MySQL冷备、热备、mysqldump都无法实现对数据库进行增量备份。如果数据量较大我们每天进行完整备份不仅耗时且影响性能。而Percona-Xtrabackup就是为了实现增量备份用于MySQL数据库物理热备的备份工具,xtrabakackup有2个工具,分别是x…...

flex布局:输入框布局demo

目标效果 首先,生成输入框: 代码: 结果: 设置基本样式 包括:去除边距、设置父盒子的宽度(如果不设置宽度,会使用整个浏览器的宽度)、添加父盒子边框等 代码: *{margin: 0;pad…...

PHP请求的好处,PHP如何请求淘宝开放接口

PHP的好处有很多,最主要的特性就是PHP的安全性和兼容性明显。 1、良好的安全性 PHP是开源软件,所有PHP的源代码每个人都可以看得到,同时它与Apache编绎在一起的方式也可以让它具有灵活的安全设定, PHP具有了公认的安全性能。开源…...

精选出来的几道Java语法基础面试题

1.成员变量与局部变量的区别有那些? 从语法形式上,看成员变量是属于类的,而局部变量是在方法中定义的变量或是方法的参数;成员变量可以被public,private,static等修饰符所修饰,而局部变量不能被访问控制修饰符及static所修饰;成员变量和局部…...

uniapp或者小程序图片选择中的sizeType属性到底是什么

sizeType属性到底是什么 https://developers.weixin.qq.com/community/develop/doc/0006c261a300089771f9a233a56c00 https://ask.dcloud.net.cn/question/146679 第一个链接来自微信小程序社区,有开发者提了个问题:sizeType: ["original", &q…...

判断一个字符串是否是回文

目录 判断一个字符串是否是回文 程序设计 程序分析 判断一个字符串是否是回文 【问题描述】编写一个程序,判断一个字符串是否为"回文"(顺读和倒读都一样的字符串称为"回文")。 【输入形式】长度小于100的任意字符串 【输出形式】如果输入字符串是回…...

国产软件爆发!中国版Navicat,SQL Studio成数据库管理工具热门

如果关注2023年的A股市场,会发现各行各业都掀起了“国产化替代”运动的热潮。不仅仅是芯片,新能源、医疗器械甚至软件等领域,也都加快了国产化进程。 长期以来,中国的软件业比较依赖国际巨头。比如操作系统以微软为主&#xff0c…...

算法学习day51

算法学习day511.力扣309.最佳买卖股票时机含冷冻期1.1 题目描述1.2分析1.3 代码2.力扣714.买卖股票的最佳时机含手续费2.1 题目描述2.2 分析2.3 代码3.参考资料1.力扣309.最佳买卖股票时机含冷冻期 1.1 题目描述 题目描述 给定一个整数数组,其中第i个元素代表了第…...

10 JS01——初识JS

目标: 1、初识JavaScript 2、JavaScript注释 3、JavaScript输入输出语句 一、初识JavaScript 1、JavaScript是什么 JavaScript是世界上最流行的语言之一,是一种运行在客户端的脚本语言(Script是脚本的意思) 脚本语言:不需要编译,运行过程…...

【软考备考-综合知识】安全性、可靠性与系统性能评测基础知识

计算机的安全性 安全等级 计算机系统中的三类安全性是指技术安全性、管理安全性和政策法律安全性。 信息安全五要素 机密性:全包信息不暴露给未授权的实体或进程。 完整性:只有得到允许的人才能够修改数据,并能够判别出数据是否已被篡改。…...

匆忙之间难免疏忽,写代码更加如此

一个方法包含了多个知识点的合计,合计起来用。实战开发特点1; 基础知识点不牢固,您必定就会感觉寸步难行啊 public class AddJiChuShu{int a 1;int b 2;int c 0;int d 0;string str "";string str2 "张三";//mothe…...

低代码(七)低代码平台后端技术选型2.0

JWT 登录token Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服…...

UDS介绍

首先要有网络网络七层的概念: 学习链接: 七层网络模型-CSDN博客 UDS网络层/TP层(ISO 15765-2)的解读 - 知乎 (zhihu.com) 概念: UDS(Unified Diagnostic Services,统一的诊断服务。 标准名是《…...

ASP.NET Core MVC 从入门到精通之初窥门径

随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生&#xff0c…...

英码科技智慧环卫:构建宜居城市新篇章

随着城市化进程的加快,城市环境卫生问题日益凸显。如何提高城市环境卫生管理水平,提升城市品质,成为了各级政府和社会各界关注的焦点。智慧环卫作为一种结合现代信息技术的环境卫生管理方式,正在逐渐成为解决城市环境卫生问题的有…...

在Spring Boot微服务使用HashOperations操作Redis Hash哈希散列

记录:403 场景:在Spring Boot微服务使用RedisTemplate的HashOperations操作Redis Hash哈希散列。 版本:JDK 1.8,Spring Boot 2.6.3,redis-6.2.5 1.微服务中Redis配置信息 1.1在application.yml中Redis配置信息 spring:redis:host: 192.1…...

innobackupex备份mysql产生returned OS error 124

解决使用innobackupex备份mysql产生returned OS error 124 xtrabackup 报错Too many open files 故障处理 一、背景 客户反馈数据库备份失败。 二、环境描述 [rootmes-node1 ~]# mysql -V mysql Ver 14.14 Distrib 5.7.24, for Linux (x86_64) using EditLine wrapper [root…...

明明有index.jsp文件访问的时候却显示404

重建一下项目...

人工智能前沿——「全域全知全能」人类新宇宙ChatGPT

🚀🚀🚀OpenAI聊天机器人ChatGPT——「全域全知全能」人类全宇宙大爆炸!!🔥🔥🔥 一、什么是ChatGPT?🍀🍀 ChatGPT是生成型预训练变换模型(Chat G…...

eslint-plugin-import - import/order

eslint-plugin-import是什么? 该插件目的在于支持ES6以上的导入/导出语法,并防止文件路径和导入名称拼写错误的问题。 import/order是什么? 按照约定的规则对引入的模块进行排序。 import/order常用规则介绍 groups 约定引入模块顺序的…...

selenium知识点大全

selenium知识点大全 在使用selenium之前必须先配置浏览器对应版本的webdriver。 1. 初始化浏览器对象 from selenium.webdriver import Chrome# 创建浏览器对象,并且打开一个空的页面 browser Chrome()# 关闭浏览器 browser.close()2. 访问指定网页 from selen…...

Biotin-PEG-SH生物素-聚乙二醇-巯基结构式;SH-PEG-Biotin

Biotin-PEG-SH 生物素-聚乙二醇-巯基 中文名称:生物素-聚乙二醇-巯基 英文名称:Biotin-PEG-SH Biotin-PEG-Thiol 性状:粘稠液体或者固体粉末,取决于分子量 溶剂:溶于水和DCM、DMF等大部分有机溶剂 分子式&#x…...

【防止恶意用户注册】-- 手机在网状态 API 的防欺诈应用解析

简介 手机在网状态 API 支持传入手机号码,查询手机号在网状态,返回在网、在网不可用、不在网(销号/未启用/停机)等多种状态,查询手机号在网状态之后,可以根据具体的业务需求来进行不同的处理。 本文主要介…...

Python json 数据提取 jsonpath 详解

一、JsonPath JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, PHP 和 Java。也就是独立的可以配合多种语言进行匹配的目标值的一种类库,和…...

TCP和UDP的区别以及应用场景

区别 首先UDP协议非常简单,头部只有8个字节: 校验和为了提供可靠的UDP首部和数据而设计,防止收到在网络传输中受损的UDP包。 再对比下TCP协议: 传输层有两个传输协议分别是 TCP 和 UDP,在内核中是两个完全独立的软件…...

高铁轮毂表面缺陷的<视觉显著性>超像素图像检测方法

内容:提出一种基于视觉显著性注意机制的超像素自适应检测方法; 设计视觉显著性注意机制滤波器用于粗略定位出缺陷空间范围,结合超像素分块图像分割方法消除光照不均匀引起的噪声干扰,有效地完成缺陷区域的边界分割和实时特征提取&…...

纺织工业库房如何有效防潮?恒温恒湿真的有效吗?

纺织工业库房中的设备或存放的货物对温度或湿度的变化又非常敏感,温度或湿度的波动可能会产生一些问题。 针对库房环境温湿度的监测,若采用人工检测的方式,很难管控精准且工作效率低;其次,人工综合成本高。那么该如何实…...

SDK之动态链接库开发—基本概念

动态链接库(Dynamic Link Library,简称 DLL)是一种在运行时加载的库,可用于在多个应用程序之间共享代码和数据。与静态链接库相比,动态链接库的主要优劣势如下: 优势: 空间效率更高&#xff0…...

spring生命周期、IOC工作流程、AOP过程,循环依赖、BeanFactory和FactoryBean

1、生命周期 划分为5个阶段: 创建前准备阶段、创建实例阶段、 依赖注入阶段、 容器缓存阶段、销毁实例阶段。一、创建前准备阶段:这个阶段主要的作用是,Bean 在开始加载之前,需要从上下文和相关配置中解 析并查找 Bean 有关的扩展…...

小黑子—Java从入门到入土过程:第六章

Java零基础入门6.0Java系列第六章1. 面向对象综合练习1.1 文字版格斗游戏参数占位,格式化输出回顾关于printf和print和println的区别1.2 对象数组练习1.2.1 练习一1.2.2 练习二1.2.3 练习三1.2.4 练习四1.3 键盘录入回顾1.4 复杂对象数组练习1.4.1 复杂练习一1.4.2 …...

做网站配置好了找不到服务器/长沙seo网络营销推广

简单是可靠的前提条件真正程序员从来不写代码的注释,如果代码非常难写,那么同样代码的注释也会非常难懂 看看当前计算机程序糟糕的事态,软件开发明显一直是一门妖术,其仍然不能被称为一个工程学。–比尔.克林顿 美国前总统...

手机网站开源/做seo前景怎么样

由于 Memcached 自己没有防止单点的措施,因为为了保障 Memcached 服务的高可用,我们需要借助外部的工具来实现高可用的功能。 本文引入 Repcached 这个工具,通过使用该工具我们可以完成 Memcached 服务的主从功能。 Repcached 用来实现 Memc…...

有关做内购的网站/sem竞价广告

我的世界神奇宝贝模组是一个近期非常热门的模组,安装之后就可以在我的世界游戏中抓小精灵了。那么,它的基本操作其实也非常简单,下面小编将告诉大家神奇宝贝模组里具体的键位设置。R键: 放出/收回精灵。上下键:上下选择GUI界面中的精灵。O键:…...

企业网上登记注册平台/seo软件视频教程

1_zclevel level     战场等级atitle     联盟给的头衔IDhtitle      部落给的头衔IDatitlestring    联盟给的头衔文字 一般做公告显示htitlestring    部落给的头衔文字一般做公告显示xp        升级需要经验值addspell      给予的BUFFaddtalent …...

竞网做的网站怎么/宁波seo深度优化平台

动态规划思想是将大问题分解成小问题,然后解决所有的小问题,最后把解组合起来就得到大问题的解。这个和分治法思想很类似,但是这里的小问题是有重叠的,分治处理的小问题都是独立的,有重叠就会有重复计算,为…...

深圳产品型网站建设/百度怎么推广自己的店铺

Android 通过应用设置系统日期和时间的方法 android 2.3 android 4.0 测试可行,不过需要ROOT权限. import java.io.DataOutputStream; import java.io.File; import java.io.IOException; import java.util.Calendar;import android.os.SystemClock;public class SystemDat…...