一、数据备份的重要性

在生产环境当中,数据的安全性至关重要,任何数据的丢失都可能产生严重的后果。
造成数据丢失的原因可能有:程序错误、操作失误、运算错误、磁盘故障、灾难(火灾、地震等)、盗窃等。

二、数据库备份的分类

物理备份:对数据库操作系统的物理文件(如数据文件、日志文件等)的备份
物理备份方法:
冷备份(脱机备份):在数据库关闭的时候进行
热备份(联机备份):数据库处于运行状态,依赖于数据库的日志文件
温备份:数据库锁定表格(不可写入但可读)的状态下进行备份操作
逻辑备份:对数据库逻辑组件(如:表等数据库对象)的备份
完全备份:对整个数据库、数据库结构和文件结构的备份,保存的是备份完成时刻的数据库,是差异备份与增量备份的基础,完全备份的备份与恢复操作都非常简单方便,但是数据会存在大量的重复并且会占用大量的磁盘空间,备份时间也很长。
差异备份:备份自上次完全备份之后被修改过的所有文件,备份的时间节点是从上次完整备份起,备份数据量会越来越大。恢复数据时只需要恢复上次的完全备份与最佳的一次差异备份。
增量备份:只有那些在上次完全备份或增量备份后被修改的文件才会被备份,以上次完全备份或增量备份的时间为时间点,备份数据量小,占用空间小,备份速度快。但恢复时,需要从上一次的完整备份开始到最后一次增量备份之间的所有增量依次恢复,如果中间某次的增量备份数据损毁,将导致数据的丢失。
三、MySQL日志

MySQL日志默认保存位置:MySQL工作目录的data目录,如:/usr/local/mysql/data

3.1 MySQL日志的类型与作用

1、redo 重做日志;作用:确保日志的持久性,防止在发生故障,脏页未写入磁盘。重启数据库会进行redo log执行重做,达到事务一致性。
2、undo 回滚日志;作用:保证数据的原子性,记录事务发生之前的一个版本,用于回滚。
3、errorlog 错误日志;作用:MySQL本身启动,停止,运行期间发生的错误信息。
4、slow query log 慢查询日志;作用:记录执行时间过长的sql,时间阈值(10s)可以配置,只记录执行成功的sql。另一个作用是提醒优化。
5、bin log 二进制日志;作用:用于主从复制,实现主从同步,记录的内容是数据库中执行的sql语句。
6、relay log 中继日志;作用:用于数据库主从同步,将主库发来的bin log保存在本地,然后从库进行回放。
7、general log 普通日志;作用:记录数据库的操作明细,默认关闭,开启后会降低数据库性能。

3.2 修改配置文件开启日志功能

配置解读:
//错误日志,用来记录当MySQL启动、停止或运行时发生的错误信息,默认已开启
log-error=/usr/local/mysql/data/mysql_error.log //指定日志的保存位置和文件名

//通用日志,用来记录MySQL的所有连接和语句,默认关闭
general_log=ON
general_log_file=/usr/local/mysql/data/mysql_general.log //指定日志的保存位置和文件名

//二进制日志(binlog),用来记录所有更新了数据或者已经潜在更新了数据的语句,记录了数据的更改,可用于数据恢复,默认已开启
log-bin=mysql-bin 或者 log_bin=mysql-bin

//慢查询日志,用来记录所有执行时间超过long_query_time秒的语句,可以找到哪些查询语句执行时间长,以便于优化,默认关闭
slow_query_log=ON
slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log
long_query_time=5 //设置超过5秒执行的语句被记录,默认10秒

//复制段
log-error=/usr/local/mysql/data/mysql_error.log
log-bin=mysql-bin
slow_query_log=ON
slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log
long_query_time=5

......//省略部分内容
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
server-id = 1
#skip-grant-tables
log-error=/usr/local/mysql/data/mysql_error.log
log-bin=mysql-bin
slow_query_log=ON
slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log
long_query_time=5
......//省略部分内容

修改配置后,需要重启musqld服务
systemctl stop mysqld
systemctl start mysqld
登录数据库查看日志功能是否开启,sql语句如下:

show variables like 'general%'; //查看通用日志是否开启
show varialbes like 'log_bin%'; //查看二进制日志是否开启
show variables like '%slow%';   //查看慢查询日志功能是否开启
show variables like 'long_query_time'; //查看慢查询时间设置
mysql> show variables like '%slow%';
+---------------------------+--------------------------------------------+
| Variable_name             | Value                                      |
+---------------------------+--------------------------------------------+
| log_slow_admin_statements | OFF                                        |
| log_slow_slave_statements | OFF                                        |
| slow_launch_time          | 2                                          |
| slow_query_log            | ON                                         |
| slow_query_log_file       | /usr/local/mysql/data/mysql_slow_query.log |
+---------------------------+--------------------------------------------+
5 rows in set (0.01 sec)mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+
1 row in set (0.00 sec)mysql> show variables like 'long_query_time';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 5.000000 |
+-----------------+----------+
1 row in set (0.00 sec)mysql> show variables like 'general%';
+------------------+-------------------------------------+
| Variable_name    | Value                               |
+------------------+-------------------------------------+
| general_log      | OFF                                 |
| general_log_file | /usr/local/mysql/data/localhost.log |
+------------------+-------------------------------------+
2 rows in set (0.00 sec)mysql>

四、常见的备份方法

物理冷备:备份时数据库处于关闭状态,直接 tar 打包数据库文件。速度快,恢复简单。
专用备份工具 mysqldump 或 mysqlhotcopy
mysqldump 常用的逻辑备份工具
mysqlhotcopy 仅拥有备份 MyISAM 和 ARCHIVE 表
启用二进制日志进行增量备份
进行增量备份,需要刷新二进制日志
第三方工具备份
免费的MySQL 热备份软件 Percona XtraBackup mysqlbackup
4.1 物理冷备操作

[root@localhost mysql]# systemctl stop mysqld.service //关闭数据库
[root@localhost mysql]# tar -Jcvf /opt/mysql_all_$(date +%F).tar.xz /usr/local/mysql/data/ //打包完整数据库文件到opt目录下
[root@localhost mysql]# cd data && rm -rf test //进入data目录并删除test库,模拟数据丢失
[root@localhost data]# mysql -uroot -p123456 -e "show databases;" //登录数据库并查看有哪些库,发现没有test库
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bbs                |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
[root@localhost data]# cd ..
[root@localhost mysql]# mv data/ /opt/bak/ //将原来mysql的data目录移动到/opt/bak 目录下
[root@localhost mysql]# tar -Jxvf /opt/mysql_all_2021-07-13.tar.xz -C /usr/local/mysql/ //解压刚刚打包的完整数据库文件到MySQL的工作目录,会生成一个usr的目录
[root@localhost mysql]# ls
bin  COPYING  COPYING-test  docs  include  lib  man  mysql  mysqld.pid  mysql.sock  mysql.sock.lock  mysql-test  README  README-test  share  support-files  usr
[root@localhost mysql]# mv usr/local/mysql/data/ ./ //将mysql里面的usr/local/mysql/data 目录移动到 /usr/local/mysql 目录下
[root@localhost mysql]# ls
bin  COPYING  COPYING-test  data  docs  include  lib  man  mysql  mysqld.pid  mysql.sock  mysql.sock.lock  mysql-test  README  README-test  share  support-files  usr
[root@localhost mysql]# rm -rf usr //删除解压的usr目录
[root@localhost mysql]# systemctl restart mysqld.service  //重启mysyqld服务
[root@localhost mysql]# mysql -uroot -p123456 -e "show databases;" //查看有哪些数据库,发现test库恢复了
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bbs                |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
[root@localhost mysql]#

4.2 mysqldump温备份

语法结构:
//针对某个库或者多个库的操作
mysqldump -u[用户名] -p[密码] --databases 库名1 [库名2] … > /备份路径/备份文件名.sql //导出的就是数据库脚本文件
//针对所有库的操作
mysqldump -u[用户名] -p[密码] --all-databases > /备份路径/备份文件名.sql
//针对某个库的某张表的操作
mysqldump -u[用户名] -p[密码] --databases 库名1 --tables 表名1 表名2 > /备份路径/备份文件名.sql

以下操作只做了对两个库的完全备份,其余的大同小异,这里不多做展示

[root@localhost opt]# mysqldump -uroot -p123456 --databases test mysql > /opt/mysql_test_mysql.sql//对test muysql 两个库进行备份
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@localhost opt]# mysql -uroot -p123456 -e "drop database test;" //删除test库
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@localhost opt]# mysql -uroot -p123456 -e "show databases;" //查看所有库
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bbs                |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
[root@localhost opt]# mysql -uroot -p123456 -e "source /opt/mysql_test_mysql.sql;" //恢复test库
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@localhost opt]# mysql -uroot -p123456 -e "show databases;" //查看所有库,test库恢复
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bbs                |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
[root@localhost opt]#

4.3 启用二进制日志进行增量备份

1.一般恢复
将所有备份的二进制日志内容全部恢复
2.基于位置恢复
数据库在某一时间点可能既有错误的操作也有正确的操作
可以基于精准的位置跳过错误的操作
发生错误节点之前的一个节点,上一次正确操作的位置点停止
3.基于时间点恢复
跳过某个发生错误的时间点实现数据恢复
在错误时间点停止,在下一个正确时间点开始

1、首先修改 /etc/my.cnf 配置文件,开启二进制日志功能

[root@localhost opt]# vim /etc/my.cnf
......//省略部分内容
[mysqld]
......//省略部分内容
log-bin=mysql-bin
binlog_format=MIXED

二进制日志(binlog)有3种不同的记录格式:

STATEMENT(基于SQL语句):每一条涉及到被修改的sql 都会记录在binlog中,默认模式
缺点:日志量过大,如sleep()函数,last_insert_id()>,以及user-defined fuctions(udf)、主从复制等架构记录日志时会出现问题
ROW(基于行)
只记录变动的记录,不记录sql的上下文环境
缺点:如果遇到update…set…where true 那么binlog的数据量会越来越大
MIXED(混合模式)推荐使用
在该模式下,MySQL会根据执行的sql语句来区分对待记录日志的格式,也就是在statement和Row之间选择一种,如果sql语句确实就是update或者delete等修改数据的语句,那么还会记录所有行的变更。
重启mysqld服务刷新二进制日志文件 mysql-bin.000001 每重启一次数据库都会刷新生成一个mysql-bin.00000x的日志文件,

[root@localhost data]# systemctl restart mysqld
[root@localhost data]# ls
auto.cnf ib_buffer_pool ib_logfile0 ibtmp1 mysql-bin.000001 mysql_error.log performance_schema test
bbs ibdata1 ib_logfile1 mysql mysql-bin.index mysql_slow_query.log sys
[root@localhost data]#

2.进行完全备份(增量备份是基于完全备份的,所以我们直接完全备份数据库test)

[root@mysql data]# mysqldump -uroot -p123456 test > /opt/test_all_$(date +%F).sql

添加增量备份的测试表及表中的记录

[root@localhost data]# mysql -uroot -p123456
......//省略部分信息内容
mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> create table info(id int(4),message varchar(20));
Query OK, 0 rows affected (0.01 sec)mysql> insert into info values(1,'正确的操作');
Query OK, 1 row affected (0.00 sec)mysql> insert into info values(2,'错误的操作');
Query OK, 1 row affected (0.01 sec)mysql> insert into info values(3,'正确的操作');
Query OK, 1 row affected (0.00 sec)mysql>

重启mysqld服务刷新二进制文件

[root@localhost data]# systemctl restart mysqld
[root@localhost data]# ls
auto.cnf        ib_logfile0  mysql-bin.000001  mysql_slow_query.log
bbs             ib_logfile1  mysql-bin.000002  performance_schema //mysql-bin.000002 新生成的二进制日志文件,之前对数据库的操作全部保存在 mysql-bin.000001 中
ib_buffer_pool  ibtmp1       mysql-bin.index   sys
ibdata1         mysql        mysql_error.log   test

查看二进制文件的内容
先备份二进制文件到 opt 目录下 然后对备份的二进制文件解码
二进制日志中需要关注的部分

at :开始的位置点
end_log_pos:结束的位置
时间戳: #210714 14:45:54 server id 1 end_log_pos 123 CRC32 0xe122e09c Start: binlog v 4, server v 5.7.20-log created 210714
SQL语句

[root@localhost data]# cp mysql-bin.000001 /opt
[root@localhost data]# mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.000001 > /opt/mysqlbinlog01
[root@localhost data]# cat /opt/mysqlbinlog01
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#210714 14:45:54 server id 1  end_log_pos 123 CRC32 0xe122e09c  Start: binlog v 4, server v 5.7.20-log created 210714 14:45:54 at startup
ROLLBACK/*!*/;
# at 123
#210714 14:45:54 server id 1  end_log_pos 154 CRC32 0x2f936169  Previous-GTIDs
# [empty]
# at 154
#210714 14:46:36 server id 1  end_log_pos 219 CRC32 0xdb68c827  Anonymous_GTID  last_committed=0   sequence_number=1  rbr_only=no
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 219
#210714 14:46:36 server id 1  end_log_pos 341 CRC32 0x0e5ed1e0  Query   thread_id=3    exec_time=0    error_code=0
use `test`/*!*/;
SET TIMESTAMP=1626245196/*!*/;
SET @@session.pseudo_thread_id=3/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1437073414/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8 *//*!*/;
SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
create table info(id int(4),message varchar(20))
/*!*/;
# at 341
#210714 14:46:36 server id 1  end_log_pos 406 CRC32 0x03fc6974  Anonymous_GTID  last_committed=1   sequence_number=2  rbr_only=no
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 406
#210714 14:46:36 server id 1  end_log_pos 485 CRC32 0xefc91668  Query   thread_id=3    exec_time=0    error_code=0
SET TIMESTAMP=1626245196/*!*/;
BEGIN
/*!*/;
# at 485
#210714 14:46:36 server id 1  end_log_pos 603 CRC32 0x05bb8f38  Query   thread_id=3    exec_time=0    error_code=0
SET TIMESTAMP=1626245196/*!*/;
insert into info values(1,'正确的操作')
/*!*/;
# at 603
#210714 14:46:36 server id 1  end_log_pos 634 CRC32 0x2247643b  Xid = 10
COMMIT/*!*/;
# at 634
#210714 14:46:36 server id 1  end_log_pos 699 CRC32 0x7b647d3e  Anonymous_GTID  last_committed=2   sequence_number=3  rbr_only=no
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 699
#210714 14:46:36 server id 1  end_log_pos 778 CRC32 0xe880ce1c  Query   thread_id=3    exec_time=0    error_code=0
SET TIMESTAMP=1626245196/*!*/;
BEGIN
/*!*/;
# at 778
#210714 14:46:36 server id 1  end_log_pos 896 CRC32 0x7104a8f3  Query   thread_id=3    exec_time=0    error_code=0
SET TIMESTAMP=1626245196/*!*/;
insert into info values(2,'错误的操作')
/*!*/;
# at 896
#210714 14:46:36 server id 1  end_log_pos 927 CRC32 0xb876b386  Xid = 11
COMMIT/*!*/;
# at 927
#210714 14:46:38 server id 1  end_log_pos 992 CRC32 0x3c78e363  Anonymous_GTID  last_committed=3   sequence_number=4  rbr_only=no
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 992
#210714 14:46:38 server id 1  end_log_pos 1071 CRC32 0xcd0b8237     Query   thread_id=3    exec_time=0    error_code=0
SET TIMESTAMP=1626245198/*!*/;
BEGIN
/*!*/;
# at 1071
#210714 14:46:38 server id 1  end_log_pos 1189 CRC32 0x0d4d23ca     Query   thread_id=3    exec_time=0    error_code=0
SET TIMESTAMP=1626245198/*!*/;
insert into info values(3,'正确的操作')
/*!*/;
# at 1189
#210714 14:46:38 server id 1  end_log_pos 1220 CRC32 0x7aeb7a35     Xid = 12
COMMIT/*!*/;
# at 1220
#210714 14:47:43 server id 1  end_log_pos 1243 CRC32 0xcfc97d39     Stop
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
[root@localhost data]#

基于以上的二进制日志文件,确认位置点,并删除info表

# at 778
#210714 14:46:36 server id 1  end_log_pos 896 CRC32 0x7104a8f3  Query   thread_id=3    exec_time=0    error_code=0
SET TIMESTAMP=1626245196/*!*/;
insert into info values(2,'错误的操作')
/*!*/;
[root@localhost data]# mysql -uroot -p123456 -e "use test;drop table info;" //删除info表
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@localhost data]# mysql -uroot -p123456 -e "use test;show tables;" //查看test库里的表,info表已删除
mysql: [Warning] Using a password on the command line interface can be insecure.
+----------------+
| Tables_in_test |
+----------------+
| student        |
+----------------+
[root@localhost data]#

基于位置点恢复想要恢复的数据,根据以上二进制日志文件里面,位置点 778 这个位置 后面有一条插入的数据我不想要,我可以跳过这个位置点进行数据恢复,可以做以下操作

[root@localhost data]# mysqlbinlog --no-defaults --stop-position='778' /opt/mysql-bin.000001 | mysql -uroot -p123456 //恢复到 778 位置点 停止
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@localhost data]# mysqlbinlog --no-defaults --start-position='1071' /opt/mysql-bin.000001 | mysql -uroot -p123456//从 1071 位置点开始恢复到此二进制日志的最后
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@localhost data]# mysql -uroot -p123456 -e "use test;select * from info;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+------+-----------------+
| id   | message         |
+------+-----------------+ //查看到的数据记录也是跳过了我不想要的数据记录
|    1 | 正确的操作      |
|    3 | 正确的操作      |
+------+-----------------+
[root@localhost data]#

MySQL数据库(四)相关推荐

  1. MYSQL数据库四种索引类型的简单使用

    MYSQL数据库索引类型包括普通索引,唯一索引,主键索引与组合索引,这里对这些索引的做一些简单描述: (1)普通索引 这是最基本的MySQL数据库索引,它没有任何限制.它有以下几种创建方式: 创建索引 ...

  2. MySQL数据库四:MySQL数据库集群

    一.主从模式 MySQL主从模式是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点. mysql主从复制用途: 实时灾备,用于故障切换(高可用) 读写分离,提供查询服务(读扩展) 数 ...

  3. MYSQL数据库四种储存引擎

    四种mysql存储引擎 前言 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用 ...

  4. 青铜到王者,看看你的MySQL数据库是什么段位,如何提升?

    关注↑↑↑我们获得更多精彩内容! 作者 | 张甦, 数据库领域的专家和知名人士.图书<MySQL王者晋级之路>作者,51CTO 专家博主.近10年互联网线上处理及培训经验,专注于 MySQ ...

  5. mysql数据库电话号码类型,mySQL数据库一:数据类型

    Mysql数据库的数据类型.索引.锁.事务和视图 Mysql数据库的数据类型.索引.锁.事务和视图 数据的类型 1)数据类型: 数据长什么样? 数据需要多少空间来存放? 系统内置数据类型和用户定义数据 ...

  6. 1、MySQL——MySQL数据库管理系统、数据库基本概念

    目录 一.MySQL数据库管理系统 二.数据库基本概念 1.数据库(Database,DB) 2.数据库管理系统(Database  Management  System, DBMS) 3.数据库系统 ...

  7. 青铜到王者,快速提升你 MySQL 数据库的段位!

    新的一周,老张(superZS)再次与大家见面,我们又要面临快速的生活节奏而令人厌恶的工作!现在大多数人选择放松自己的方式就是玩游戏,最为突出的可能就要属手游"王者荣耀". 据说这 ...

  8. 超简单的Jmeter连接mysql数据库,3分钟搞定!

    目录:导读 一.确保mysql数据库能够通过Navicat等远程连接工具连接. 二.下载驱动并加入jmeter 三.配置jmeter连接mysql数据库 四.总结 一.确保mysql数据库能够通过Na ...

  9. Mysql数据库实现备份与数据恢复

    目录 一.为什么要备份数据? 二.备份工具介绍 三.数据备份的方式 3.1 完全备份 3.1.1 备份mysql数据库 3.1.2 恢复mysql数据库 3.2 增量备份 3.2.1 备份mysql数 ...

  10. 【信息化】MySQL数据库简介

    1 什么是数据库? 简单的说,数据库(英文Dtabase)就是一个存放数据的仓库,这个仓库是按照一定的数据结果(数据结构是指数据的组织形式或数据之间的联系)来组织.存储的.我们可以通过数据库提供的多种 ...

最新文章

  1. CentOS SVN服务器管理多项目
  2. AJAX Control Toolkit 30930
  3. Equinox P2的学习
  4. SpringBoot Thymeleaf使用教程(实用版)
  5. cms的 php代码,KingCMS/PHP可执行代码
  6. 【论文翻译】学习新闻事件预测的因果关系
  7. linux设置超链接,帮助-链接 - Linux Kernel Newbies
  8. 剑指offer_第一个只出现一次的字符
  9. C#下载文件和将文件转换为数据流下载的示例
  10. DataGridView导出到Excel的三个方法
  11. 软件质量-知识点整理
  12. android在体检报告叫什么,体检报告检测分析app
  13. MLX90614红外测温传感器使用arduino采集温度数据OLED显示
  14. C2AE: Class Conditioned Auto-Encoder for Open-set Recognition(CVPR 2019)部分翻译
  15. 服务器sel信息是什么意思,英特尔?服务器主板 — 如何解压和读取的服务器事件日志(SEL)...
  16. 机器学习(一) 贝叶斯法则与概念学习
  17. 以智汀和小米为例,聊一聊智能网关在智能家居中的应用
  18. 指针--指针的创建和指针的大小
  19. 运维工程师一天的日常都在做什么?
  20. ubuntu下查看opencv安装路径以及版本号

热门文章

  1. 【python】Tkinter窗口可视化(二)
  2. 论文赏析[NAACL19]一个更好更快更强的序列标注成分句法分析器
  3. 图论算法——最短路径算法
  4. 几点Java程序必须满足的基本规则
  5. 21世纪IT人才需要具有的5个鲜明特点
  6. 分享程序员成长故事 解析IT职场困惑
  7. 汇编@data_macOS上的汇编入门(十三)——从编译到执行
  8. tensorflow如何微调时如何只训练后两层_XLNet只存在于论文?都替你封装好了还不来用!...
  9. 蜗轮蜗杆计算软件_微型直流电机减速比计算方法
  10. React antD 使用Select 进阶功能 远程搜索,防抖控制,加载状态