找回密码
 注册
查看: 1477|回复: 2

openstack 清理keystone token数据

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2021-11-18 18:53:19 | 显示全部楼层 |阅读模式
登录数据库,执行命令:
% }3 q& H4 f/ EMariaDB [keystone]>  delete from keystone.token where user_id="14687393c47346beb4a6b95232e5d434";: x5 C  p3 U6 z+ o! |
MariaDB [keystone]> delete from keystone.token where user_id='14687393c47346beb4a6b95232e5d434';! `) G# Y6 m; |' M4 K* h2 }

7 @( v; ~* x7 |, X使用truncat 方式清楚数据库中的表数据:3 V- t- w% f  ~! o3 g5 S4 ~
MariaDB [keystone]> truncate table token;4 j* U! J' l4 U; Q. D

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2021-11-18 19:29:42 | 显示全部楼层
TRUNCATE 关键字用于完全清空一个表。其语法格式如下:
1 P' m$ k! k' [/ D
0 c" ], M# E) r- E* u+ ]& t. }: KTRUNCATE [TABLE] 表名
& Q' Q6 y- p2 ]" r  K5 T  B! K其中,TABLE 关键字可省略。
4 Q% @+ u1 D6 C* X% _
( ^, Q- E! t8 v- V6 ]8 b) q" o例 1
' F8 L( j( c* ~8 B3 w1 x新建表 tb_student_course,插入数据并查询,SQL 语句和运行结果如下:: @6 j6 T* Q. f3 |; @
4 u7 H2 `/ G( _9 P" ?; o
复制代码
7 t9 g3 P$ X3 Hmysql> CREATE TABLE `tb_student_course` (
. V9 u$ {& h$ ]. f    -> `id` int(4) NOT NULL AUTO_INCREMENT,# \2 @8 \, k7 y/ ]
    -> `name` varchar(25) NOT NULL,
0 `- m% |) C  o3 u- V. o& G2 I& J; r    -> PRIMARY KEY (`id`)
, R& O. X. I  O% B' a$ _- M+ S4 ?    -> );, q& H; R% b9 h
Query OK, 0 rows affected (0.04 sec)
( ~2 I: {* b- O
. h$ w4 ^8 m0 j4 vmysql> INSERT INTO tb_student_course(name) VALUES ('Java'),('MySQL'),('Python');
, Q& e. V9 l. p5 J8 YQuery OK, 3 rows affected (0.05 sec)1 l' v" B9 |8 b. A+ V4 h1 E
Records: 3  Duplicates: 0  Warnings: 0; l1 E* l1 N( }/ p: B

, Q) P: r, V3 V2 }( {mysql> SELECT * FROM tb_student_course;
/ U) @6 y" Z5 v' K9 C/ c# f+----+--------+
1 a0 n$ w4 }. w/ a| id | name   |
- t& r0 g; E/ w) R( N+----+--------+, m' x2 c6 `  n5 k5 P
|  1 | Java   |2 v& }  R! o# J7 A5 y
|  2 | MySQL  |4 S$ m+ h5 b+ d$ i& P
|  3 | Python |! z! }' r% t6 U8 Q1 e
+----+--------+% I% P' Q: k  X- I( n
3 rows in set (0.00 sec)
4 G3 i% k+ M( k复制代码
- I+ P/ M/ c- H% j7 F; d0 |使用 TRUNCATE 语句清空 tb_student_course 表中的记录,SQL 语句和运行结果如下:
2 u8 U9 k6 y+ y- k3 E3 k9 C* b$ f# w: h
mysql> TRUNCATE TABLE tb_student_course;
/ U) K1 a% c# o/ v, h$ B" hQuery OK, 0 rows affected (0.04 sec)
; H' o+ I6 Q( ?( B, W/ d( r& o! W/ i2 k' R! g5 j1 `# X
mysql> SELECT * FROM tb_student_course;$ [. f: Z9 j8 V. _0 i; F
Empty set (0.00 sec)1 H4 z8 x# o0 p0 i. \
复制代码5 W9 }6 c/ s2 k/ f( E
TRUNCATE 和 DELETE 的区别(再次强调)
( j4 K9 F% j$ M. d$ F, K2 ?6 x7 F从逻辑上说,TRUNCATE 语句与 DELETE 语句作用相同,但是在某些情况下,两者在使用上有所区别。5 n# M* J3 T" @. g8 t' A: \
DELETE 是 DML 类型的语句;TRUNCATE 是 DDL 类型的语句。它们都用来清空表中的数据。2 J/ g- j  e" d% j4 J% r+ V: D
DELETE 是逐行一条一条删除记录的;TRUNCATE 则是直接删除原来的表,再重新创建一个一模一样的新表,而不是逐行删除表中的数据,执行数据比 DELETE 快。
0 A  {/ S  _* |: E5 {5 v6 a% j; V  因此需要删除表中全部的数据行时,尽量使用 TRUNCATE 语句, 可以缩短执行时间。: t( ~8 s, A6 j
DELETE 删除数据后,配合事件回滚可以找回数据;TRUNCATE 不支持事务的回滚,数据删除后无法找回。
: I0 J0 X" Z, f" v# }. ^DELETE 删除数据后,系统不会重新设置自增字段的计数器;TRUNCATE 清空表记录后,系统会重新设置自增字段的计数器。2 L3 ^/ e* Q" J) B5 F
DELETE 的使用范围更广,因为它可以通过 WHERE 子句指定条件来删除部分数据;而 TRUNCATE 不支持 WHERE 子句,只能删除整体。' Q- Z! Q" C' u4 u- z3 G& C! x
DELETE 会返回删除数据的行数,但是 TRUNCATE 只会返回 0,没有任何意义。- M8 h7 {# A& q8 `+ @7 U
复制代码
, d; h0 r: r9 C$ h3.truncate使用场景及注意事项
( L& T6 W: q9 `) ~' B  通过前面介绍,我们很容易得出truncate语句的使用场景,即该表数据完全不需要时可以用truncate。
8 Q( E: k+ _$ o1 _! I. Z" L7 _& N' ^: [! N" s! a
  如果想删除部分数据用delete,注意带上where子句;如果想删除表,当然用drop;如果想保留表而将所有数据删除且和事务无关,用truncate即可;! a* A! |, O0 N2 q

0 P9 W; I3 J  S2 h" `7 ]  如果和事务有关,或者想触发trigger,还是用delete;如果是整理表内部的碎片,可以用truncate然后再重新插入数据。
  [, G3 q/ h& |* j  G& P
2 e' l$ I$ N9 v6 C" G- `$ c无论怎样,truncate表都是高危操作,特别是在生产环境要更加小心,下面列出几点注意事项,希望大家使用时可以做下参考。
% \: c3 M6 H/ v$ F: n: h0 a  ]& J8 t8 ?) w% a- t6 i2 ]
truncate无法通过binlog回滚。3 _( V5 z* F5 g8 B( r
truncate会清空所有数据且执行速度很快。. d$ c- A: U/ a3 f2 K  b0 Y6 k
truncate不能对有外键约束引用的表使用。. Z/ f- X/ m+ x. I
执行truncate需要drop权限,不建议给账号drop权限。
& k3 [9 a3 k  `执行truncate前一定要再三检查确认,最好提前备份下表数据。

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2021-11-23 14:05:07 | 显示全部楼层
MariaDB [(none)]> delete from keystone.token where user_id='14687393c47346beb4a6b95232e5d434';
5 Q+ z2 t" e) L+ s! o3 t0 J: x$ J' ?0 [( t4 G6 L& g8 w
^CCtrl-C -- query killed. Continuing normally.
' L" i, M% v. ^+ R6 m) k3 Y2 p" Q  H" B/ G1 {
^CCtrl-C -- query killed. Continuing normally.
7 K$ _+ l' Q* \6 M8 UERROR 2013 (HY000): Lost connection to MySQL server during query
' M0 M, ?, H- _9 j8 D1 P3 R: ?+ zMariaDB [(none)]> truncate table keystone.token;3 A, V& W& \9 T2 Q$ u: D+ T9 a
ERROR 2006 (HY000): MySQL server has gone away
$ @$ g: l& `3 C3 R1 {; fNo connection. Trying to reconnect...
8 y- _% l6 E$ ^, ^! gConnection id:    338' `) h$ M# D* i( E  ~. ]8 g( ?
Current database: *** NONE ***& K( S1 ?! B8 }# }* `2 b1 n
Query OK, 0 rows affected (1.21 sec)
" u* V" m# e) l, k3 c
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 01:27 , Processed in 0.019512 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表