mysql truncate恢复_求一个恢复truncate或drop table的完整案例
这两天自己找资料实现了上面的流程,详细步骤如下:
1. 锁定当前误操作表->改名->解锁
2. 创建新实例,恢复操作在新实例上进行
3. 先还原备份-->恢复备份到误操作之前的业务-->恢复误操作之后的业务
4. 确认恢复之后的表
5. 导入到生产库
1. 确认log_bin是否打开
mysql> show global variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
root@localhost [(none)]> use test1;
2. 建立测试表
create table t1 (
id int unsigned not null auto_increment,
name char(20) not null,
sex enum('f','m') not null default 'm',
address varchar(30) not null,
primary key(id)
);
insert into t1 (name,sex,address)values('daiiy','m','guangzhou');
insert into t1 (name,sex,address)values('tom','f','shanghai');
insert into t1 (name,sex,address)values('liany','m','beijing');
insert into t1 (name,sex,address)values('lilu','m','zhuhai');
root@localhost [test1]> select * from t1;
+----+-------+-----+---------+
| id | name | sex | address |
+----+-------+-----+---------+
| 1 | daiiy | m | zhuhai |
| 2 | tom | f | zhuhai |
| 3 | liany | m | zhuhai |
| 4 | lilu | m | zhuhai |
+----+-------+-----+---------+
3. 清空binglog
reset master;
4. 备份test1数据库
select now(); #2017-06-22 08:42:26
mysqldump -uroot -p3308 --protocol tcp --host 192.168.220.128 --port 3308 --flush-logs --force --databases test1 >test1.dmp #备份指定数据库
mysql -S /home/data/3308/mysql.sock -uroot -p3308 -e "reset master"
5. 模拟备份后的业务操作
5.1 向t1表中添加记录
select now(); #2017-06-22 13:07:29
insert into t1 (name,sex,address)values('111','m','guangzhou');
insert into t1 (name,sex,address)values('222','f','shanghai');
5.2 创建表t2
select now(); #2017-06-22 13:07:56
create table t2 (a int);
insert into t2 values(10),(11),(12),(13),(14),(15);
select * from t2;
5.3 模拟误操作,删除表t1内容
select now(); #2017-06-22 13:08:35
truncate table t1;
5.4 向t2追加记录
select now(); #2017-06-22 13:09:02
insert into t2 values(16),(17),(18),(19),(20);
select * from t2;
5.5 继续向t1表追加记录
select now(); #2017-06-22 13:09:31
insert into t1 (name,sex,address)values('333','m','beijing');
insert into t1 (name,sex,address)values('444','m','zhuhai');
########## 要求恢复表t1以及t1后面新插入的记录
1. 首先LOCK 生产库被truncate的表,禁止所有的操作.
use test1;
lock tables t1 write;
alter table t1 rename to t1_old;
unlock table;
select now(); # 2017-06-22 13:17:26,恢复到这个时间点
2. 创建一个新实例如3308_recover
mkdir /home/data/3309
chown -R mysql:mysql /home/data/3309
cp /home/data/3308/my.cnf /home/data/3309
vi /home/data/3309/my.cnf
:1,$s/3308/3309/g #把所有3308替换成3309
#log-bin = /home/data/3309/mysql-bin ##为了加快恢复速度,禁止binlog
运行下面命令进行数据库的初始化:
cd /home/mysql-5.6.35
./scripts/mysql_install_db --defaults-file=/home/data/3309/my.cnf --datadir=/home/data/3309
#修改root密码
kill 启动的mysql #如果没有启动执行执行下一步
mysqld_safe --defaults-file=/home/data/3309/my.cnf --ledir=/home/mysql-5.6.35/bin --datadir=/home/data/3309 --skip-grant-tables --user=mysql &
mysql -S /home/data/3309/mysql.sock -u root mysql
UPDATE user SET password=PASSWORD("3309") WHERE user='root';
FLUSH PRIVILEGES;
#重启新建实例
mysqladmin -S /home/data/3309/mysql.sock shutdown -u root -p3309
mysqld_safe --defaults-file=/home/data/3309/my.cnf --ledir=/home/mysql-5.6.35/bin --datadir=/home/data/3309 --user=mysql &
#连接实例
mysql -S /home/data/3309/mysql.sock -u root -p3309
#新建一个和误操作的表所在的数据库同名的数据库
CREATE DATABASE test1 /*!40100 DEFAULT CHARACTER SET utf8 */;
3. 将目前的binlog全部复制到一个新位置
cp mysql-bin.0* /tmp
4. 从备份中还原误操作的表
sed -n '/DROP TABLE IF EXISTS `t1`/,/UNLOCK TABLES;/p' test1.dmp > t1.sql #把要恢复的表从备份文件中取出,如下
▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
DROP TABLE IF EXISTS `t1`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `t1` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` char(20) NOT NULL,
`sex` enum('f','m') NOT NULL DEFAULT 'm',
`address` varchar(30) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `t1`
--
LOCK TABLES `t1` WRITE;
/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
INSERT INTO `t1` VALUES (1,'daiiy','m','zhuhai'),(2,'tom','f','zhuhai'),(3,'liany','m','zhuhai'),(4,'lilu','m','zhuhai');
/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
UNLOCK TABLES;
▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
#### 恢复到新实例中,恢复到这里,t1表应该有4条记录
[root@c12 ~]# mysql -uroot -p3309 -S /home/data/3309/mysql.sock --port 3309 --database test1 < t1.sql
+----+-------+-----+-----------+
| id | name | sex | address |
+----+-------+-----+-----------+
| 1 | daiiy | m | zhuhai |
| 2 | tom | f | zhuhai |
| 3 | liany | m | zhuhai |
| 4 | lilu | m | zhuhai |
+----+-------+-----+-----------+
5. 恢复备份后到truncate前t1表的重做日志
##### 获取备份完成时刻时间
tail -f test1.dmp
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2017-06-22 13:06:04 ★★★★★ 这个时间就是备份后的时间
##### 获得truncate时刻的时间
ls -ltr ../3308
total 176412
drwx------. 2 mysql mysql 4096 Mar 1 13:52 performance_schema
drwx------. 2 mysql mysql 4096 Mar 1 13:52 mysql
-rw-rw----. 1 mysql mysql 56 Mar 1 13:53 auto.cnf
-rw-r--r--. 1 root root 2454 Apr 11 12:01 my.cnf
drwx------. 2 mysql mysql 4096 May 19 13:28 test
srwxrwxrwx. 1 mysql mysql 0 Jun 20 16:51 mysql.sock
-rw-rw----. 1 mysql mysql 6 Jun 20 16:51 mysql.pid
-rw-rw----. 1 mysql mysql 237361 Jun 22 11:53 mysql_error.log
-rw-rw----. 1 mysql mysql 167 Jun 22 13:06 mysql-bin.000001
-rw-rw----. 1 mysql mysql 167 Jun 22 13:06 mysql-bin.000002 -->误删除时间是13:08:35,可能在这个log中
-rw-rw----. 1 mysql mysql 99 Jun 22 13:06 mysql-bin.index
drwx------. 2 mysql mysql 4096 Jun 22 13:08 test1
drwx------. 2 mysql mysql 4096 Jun 22 13:20 test2
-rw-rw----. 1 mysql mysql 2661 Jun 22 13:20 mysql-bin.000003 -->也可能在这个log中
-rw-rw----. 1 mysql mysql 50331648 Jun 22 13:20 ib_logfile1
-rw-rw----. 1 mysql mysql 79691776 Jun 22 13:20 ibdata1
-rw-rw----. 1 mysql mysql 50331648 Jun 22 13:20 ib_logfile0
##### 查找binlog日志中对应的误操作位置
##### 使用mysqlbinlog将二进制日志转化为明文SQL日志
mysqlbinlog mysql-bin.000002 > /tmp/000002.sql
mysqlbinlog: unknown variable 'default-character-set=gbk'
原因:
[client]下的选项会被所有客户端程序读取(但不包括mysqld),但是mysqlbinlog却不能识别default-character-set,而当客户端不能识别时就会报错并退出,不在继续执行。可以使用loose-variable_name=xxx来解决。
三种解决方法:
1. 修改my.cnf,在[client]下注释或删除default-character-set=gbk;
2. 在命令行中加入--no-defaults开关,使用mysqlbinlog --no-defaults;
3. 将default-character-set=gbk改为(不需重启):
[client]
loose-default-character-set=gbk
这样,所有不能识别该变量的客户端程序(包括mysqlbinlog)都会忽略它,4.0.2以上版本有效;但是执行mysqlbinlog时还是会有以下警告:
Warning: mysqlbinlog: unknown variable 'loose-default-character-set=gbk'
所以上面命令修改如下:
mysqlbinlog --no-defaults /tmp/mysql-bin.000002 > /tmp/000002.sql
### 使用linux的grep命令根据“key word”找到那个引发数据写花的SQL所在的位置
cat /tmp/000002.sql |egrep -C 20 -i 'truncate table `t1`|truncate table t1' --color #20表示找到行后前后各取20行,没有找到truncate语句
没有找到,用mysql-bin.000003试试
mysqlbinlog --no-defaults /tmp/mysql-bin.000003 > /tmp/000003.sql
cat /tmp/000003.sql |egrep -B 20 -A40 -i 'truncate table `t1`|truncate table t1' --color #误操作语句前20行,后40行
▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
#170622 13:07:56 server id 1 end_log_pos 719 CRC32 0xe64755de Query thread_id=19 exec_time=0 error_code=0
SET TIMESTAMP=1498108076/*!*/;
BEGIN
/*!*/;
# at 719
#170622 13:07:56 server id 1 end_log_pos 765 CRC32 0x4b93c93f Table_map: `test1`.`t2` mapped to number 240
# at 765
#170622 13:07:56 server id 1 end_log_pos 830 CRC32 0x926d9e92 Write_rows: table id 240 flags: STMT_END_F
BINLOG '
rFBLWRMBAAAALgAAAP0CAAAAAPAAAAAAAAEABXRlc3QxAAJ0MgABAwABP8mTSw==
rFBLWR4BAAAAQQAAAD4DAAAAAPAAAAAAAAEAAgAB//4KAAAA/gsAAAD+DAAAAP4NAAAA/g4AAAD+
DwAAAJKebZI=
'/*!*/;
# at 830 ★★★★★(这个就是误操作语句前一个事务POS)
#170622 13:07:56 server id 1 end_log_pos 861 CRC32 0xa4a7f181 Xid = 4862 ★★★★★第一步就恢复到这里
COMMIT/*!*/;
# at 861 ★★★★★(这个就是误操作语句发起的POS)
#170622 13:08:35 server id 1 end_log_pos 946 CRC32 0xac5f8a61 Query thread_id=19 exec_time=1 error_code=0
SET TIMESTAMP=1498108115/*!*/; ★★★★★(误操作语句发起的时间) select from_unixtime(1498108115); -> 2017-06-22 13:08:35
truncate table t1 ★★★★★(误操作语句)
/*!*/;
# at 946 ★★★★★(误操作之后第一个正常语句的POS) 每个事务结束标志是"/*!*/;"
#170622 13:09:02 server id 1 end_log_pos 1019 CRC32 0x31fcff50 Query thread_id=19 exec_time=0 error_code=0
SET TIMESTAMP=1498108142/*!*/; ★★★★★(误操作之后第一个正常语句的发出时间) 2017-06-22 13:09:02
BEGIN
/*!*/;
# at 1019
#170622 13:09:02 server id 1 end_log_pos 1065 CRC32 0xd181c1f9 Table_map: `test1`.`t2` mapped to number 240
# at 1065
#170622 13:09:02 server id 1 end_log_pos 1125 CRC32 0xebc98b56 Write_rows: table id 240 flags: STMT_END_F
BINLOG '
7lBLWRMBAAAALgAAACkEAAAAAPAAAAAAAAEABXRlc3QxAAJ0MgABAwAB+cGB0Q==
7lBLWR4BAAAAPAAAAGUEAAAAAPAAAAAAAAEAAgAB//4QAAAA/hEAAAD+EgAAAP4TAAAA/hQAAABW
i8nr
'/*!*/;
# at 1125
#170622 13:09:02 server id 1 end_log_pos 1156 CRC32 0xa837b2d9 Xid = 4869
COMMIT/*!*/;
# at 1156
#170622 13:09:31 server id 1 end_log_pos 1229 CRC32 0x7a350100 Query thread_id=19 exec_time=0 error_code=0
SET TIMESTAMP=1498108171/*!*/;
BEGIN
/*!*/;
# at 1229
#170622 13:09:31 server id 1 end_log_pos 1284 CRC32 0xce22b81c Table_map: `test1`.`t1` mapped to number 241
# at 1284
#170622 13:09:31 server id 1 end_log_pos 1337 CRC32 0x5dcd4c30 Write_rows: table id 241 flags: STMT_END_F
BINLOG '
C1FLWRMBAAAANwAAAAQFAAAAAPEAAAAAAAEABXRlc3QxAAJ0MQAEA/7+Dwb+PPcBWgAAHLgizg==
C1FLWR4BAAAANQAAADkFAAAAAPEAAAAAAAEAAgAE//ABAAAAAzMzMwIHYmVpamluZzBMzV0=
'/*!*/;
# at 1337
#170622 13:09:31 server id 1 end_log_pos 1368 CRC32 0x0885b098 Xid = 4872
COMMIT/*!*/;
# at 1368
#170622 13:09:31 server id 1 end_log_pos 1441 CRC32 0xce0af952 Query thread_id=19 exec_time=0 error_code=0
SET TIMESTAMP=1498108171/*!*/;
BEGIN
▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
##### 开始恢复t1表到truncate之前的那一刻
## 导出从备份完成后到truncate之前所有的业务语句
mysqlbinlog --no-defaults --start-datetime='2017-06-22 13:06:04' --stop-datetime='2017-06-22 13:07:56' /tmp/mysql-bin.0* >/tmp/recovery_t1.sql
/*
## 把上面生成的日志中涉及切换数据库的语句替换掉,这样在下一步执行这些SQL语句时使得所有的操作都实在新实例上执行的
sed 's/`test1`/`test2`/g' /tmp/recovery_t1.sql > /tmp/recovery_t1_real.sql
*/
## 在新实例中重新运行这些业务语句,恢复到这里,t1表应该有6条记录
mysql -uroot -p3309 -S /home/data/3309/mysql.sock --port 3309 --force --database test1
+----+-------+-----+-----------+
| id | name | sex | address |
+----+-------+-----+-----------+
| 1 | daiiy | m | guangzhou |
| 2 | tom | f | shanghai |
| 3 | liany | m | beijing |
| 4 | lilu | m | zhuhai |
| 5 | 111 | m | guangzhou |
| 6 | 222 | f | shanghai |
+----+-------+-----+-----------+
6. 开始恢复truncate之后第一个正常的SQL直到现在时刻的业务
mysqlbinlog --no-defaults --start-datetime='2017-06-22 13:09:02' --stop-datetime='2017-06-22 13:17:26' /tmp/mysql-bin.0* >/tmp/after_trun.sql
/*
## 把上面生成的日志中涉及切换数据库的语句替换掉,这样在下一步执行这些SQL语句时使得所有的操作都实在新实例上执行的
sed 's/use `test1`//g' /tmp/after_trun.sql > /tmp/after_trun_real.sql
*/
## 在新实例中重新运行这些业务语句,恢复到这里,t1表应该有8条记录
mysql -uroot -p3309 -S /home/data/3309/mysql.sock --port 3309 --force --database test1
ERROR 1146 (42S02) at line 46: Table 'test1.t2' doesn't exist #由于没有创建其他的表,所以对t1表外的表的语句全部会报错.
ERROR 1062 (23000) at line 64: Duplicate entry '1' for key 'PRIMARY'
ERROR 1062 (23000) at line 81: Duplicate entry '2' for key 'PRIMARY'
+----+-------+-----+-----------+
| id | name | sex | address |
+----+-------+-----+-----------+
| 1 | daiiy | m | zhuhai |
| 2 | tom | f | zhuhai |
| 3 | liany | m | zhuhai |
| 4 | lilu | m | zhuhai |
| 5 | 111 | m | guangzhou |
| 6 | 222 | f | shanghai |
| 1 | 333 | m | beijing |
| 2 | 444 | m | zhuhai |
+----+-------+-----+-----------+
但是由于自增长字段是主键,所以最后两条记录在恢复时提示,主键冲突错误.如果没有自增长字段应该不会出错.这里的解决方法是
1) 先将目前恢复出的数据表 t1 改名为 t1_1; alter table t1 rename to t1_1;
2) create table t1 as select * from t1_1 where 1=2;
3) 再次执行上面的恢复语句,这时新的t1表应该有2条记录
4) 将t1的记录插入到t1_1,此时的t1_1表应该有8条记录 insert into t1_1(name,sex,address) select name,sex,address from t1;
5) drop table t1; alter table t1_1 rename to t1;
7. 查看表t1_1
select * from t1;
+----+-------+-----+-----------+
| id | name | sex | address |
+----+-------+-----+-----------+
| 1 | daiiy | m | guangzhou |
| 2 | tom | f | shanghai |
| 3 | liany | m | beijing |
| 4 | lilu | m | zhuhai |
| 5 | 111 | m | guangzhou |
| 6 | 222 | f | shanghai |
| 7 | 333 | m | beijing |
| 8 | 444 | m | zhuhai |
+----+-------+-----+-----------+
8. 将恢复出的t1导入到源库中
#从新建实例中导出已恢复的表
mysqldump -S/home/data/3309/mysql.sock -uroot -p3309 --databases test1 --tables t1 > /tmp/t1.sql
#导入到生产库中,由于源表已经改名,所以这里可以直接恢复,如果生产库中的表还有主外键约束,建议先导入到一个其他表,然后确认数据无误后在插入到生产表
mysql -uroot -p3308 -S /home/data/3308/mysql.sock --port 3308 --database test1
后续会逐渐测试一些其他的恢复案例,陆续分享
mysql truncate恢复_求一个恢复truncate或drop table的完整案例相关推荐
- C++求一个整数的各位数字总和(附完整源码)
C++求一个整数的各位数字总和算法 C++求一个整数的各位数字总和算法完整源码(定义,实现,main函数测试) C++求一个整数的各位数字总和算法完整源码(定义,实现,main函数测试) int su ...
- vc mysql init 崩溃_故障分析 | 崩溃恢复巨慢原因分析
作者:xuty 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源. 一.现象 有个 MySQL 5.7 开发库异常挂掉后,奔溃恢复一直处于如下位置,且持 ...
- mysql数据恢复慢_故障分析 | 崩溃恢复巨慢原因分析
一.现象 有个 MySQL 5.7 开发库异常挂掉后,奔溃恢复一直处于如下位置,且持续了 2 小时左右才起来.非常疑惑这段时间 MySQL 到底做了什么事情?居然需要这么长时间.虽说这里虚拟机的 IO ...
- macos备份恢复_如何在恢复模式下从Time Machine备份中完全还原macOS
macos备份恢复 If you're installing a new hard drive, or your Mac is completely messed up, you might thin ...
- java 最大子数组_求一个数组中子数组的最大和算法(Java实现)
前几天在微信订阅号"待字闺中"中看到的一篇文章<小技巧求一个数组中子数组的最大和>,提供下Java的实现,并且在对题目做下小修改,本来打算直接在微信里直接回复,但是发现 ...
- python把英语句子成分字母_求一个可以分析英语句子成分的软件或网站
目前还没有,最好的翻译软件都不能翻译英语语法,只能翻译语法结构简单的句子,更别提专业分析句子成分的软件了:出现专业分析英语句子成分的软件,英语老师应该就失业了. 求一个可以分析英语句子成分的软件或网站 ...
- mysql计划任务书_求做一个基于java的mysql课程设计任务书 要求如下
课程设计任务书一.课程设计的目标使学生综合使用所学过的Java语言程序设计知识,掌握面向对象程序设计的基本思路和方法,利用所学的基本知识和技能,发挥自学能力和查找资料的能力,... 课程设计任务书 一 ...
- mysql 强制启动_强制 InnoDB 恢复,启动 MySQL 数据库
要调查数据库页面损坏,您可以使用从数据库转储表 SELECT ... INTO OUTFILE.通常,以这种方式获得的大多数数据是完整的.严重损坏可能导致语句或 后台操作崩溃或断言,甚至导致前滚恢复崩 ...
- 织梦mysql占用资源_解决一个 MySQL 服务器进程 CPU 占用 100%的技术笔记
早上帮朋友一台服务器解决了Mysql cpu 占用 100%的问题.稍整理了一下: 朋友主机(Windows 2003 + IIS + PHP + MYSQL )近来 MySQL 服务进程 (mysq ...
最新文章
- linux下的软硬资源限制,关于ulimit命令修改软硬资源大小说明及正确修改软硬资源限制数配置...
- Exchange Server 2007 移动邮件
- java中的数据库事务处理
- python的mysql模块_python使用MySQLdb模块连接MySQL
- occam‘s razor
- 冬至日,诚邀你来杭州网易,一起吃着饺子畅聊「B2B增长」
- C# == 和equals()区别
- 在 Microsoft word中插入代码
- 计算机中 amp 是什么符号,这里面的amp;amp;,||是什么意思,相当与数学里面的什么符号?...
- 数字化转型太太太难?AI、IoT 重拳出击!
- 20155226实验四
- Java程序员如何写好一份个人求职简历
- 从零开始学Java【基本输入输出、排序(sort)、高精度大数运算(BigInteger)】
- 基于五种机器算法的信用风险评估
- 面试了一位-46-岁的程序员,思绪万千,最后结局竟让我大惊失色
- python---字符串函数
- 北京内推 | 华为诺亚方舟实验室招聘自动驾驶仿真实习生
- 视频素材网,视频剪辑必备。
- 致远SPM之协同供应链集成解决方案
- 国密加密解密之vue-sm2使用
热门文章
- python里面pow是什么意思_python中pow是什么意思
- Android获取AP热点IP,获取连接到本机AP热点设备的IP地址
- privat,pubic的区别
- 计算机休眠密码,启用或停用Windows 10睡眠唤醒密码的方法
- IDEA集成leetcode
- 哈斯HASS数控系统CNC数据采集
- 未来计算机结构图,青科看未来——计算机体系结构的新黄金时代 | YEF2021大会论坛...
- ZJU夏令营面试记录
- opencv HSV色彩空间 追踪特定颜色
- 完美安装BatteryHistorian-Note: Could not parse aggregated battery stats.