【Minecraft】脚本删除CoreProtect使用MySQL记录的自定义日期前的数据

Minecraft插件百科:

CoreProtect是一种快速,高效的数据记录和防止恶意破坏的工具。可以回滚和恢复破坏。为大型服务器设计,CoreProtect将记录和管理数据,而不会影响服务器性能。

脚本功能:删除CoreProtect使用MySQL记录的自定义日期前的数据。

作者的脚本使用环境:
Minecraft服务端:Spigot-1.14.4
CoreProtect版本:CoreProtect v19.4
MySQL版本:5.7.32
系统版本:CentOS 7.6


脚本

请按实际情况修改变量内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/bin/bash
#ZJHCOFI
#删除自定义日期前的CoreProtect使用MySQL记录的数据

#=============变量=============

#数据库用户名
sql_username="zjhcofi"
#数据库密码
sql_pwd="zjhcofi"
#数据库名
sql_db="coreprotect"
#数据库端口
sql_port="3306"
#数据库IP地址
sql_ip="127.0.0.1"

#===============================

# 判断输入的参数
if [ "${1}" == "" ];then
echo -e "\n=================================="
echo -e "请输入需要删除的最后日期,格式 2021-03-03"
echo -e "==================================\n脚本执行样例:"
echo -e "./del_corep_mysql.sh 2021-03-03"
echo -e "==================================\n"
exit
fi

# 增加字符
del_time="${1} 23:59:59"

echo "需要删除的最后时间为:【 ${del_time} 】,是否确定?(Y/N)"
read answer
if [ "${answer}" == "Y" -o "${answer}" == "y" ];then

# 转换时间戳
timestamp=`date -d "${del_time}" +%s`
echo "时间戳:${timestamp}"

# 删除数据库内容
#数据库删除语句
del_co_block="DELETE FROM co_block WHERE time<='${timestamp}'"
del_co_container="DELETE FROM co_container WHERE time<='${timestamp}'"
del_co_entity="DELETE FROM co_entity WHERE time<='${timestamp}'"
del_co_item="DELETE FROM co_item WHERE time<='${timestamp}'"
del_co_session="DELETE FROM co_session WHERE time<='${timestamp}'"
optimize_co_block="optimize table co_block"
optimize_co_container="optimize table co_container"
optimize_co_entity="optimize table co_entity"
optimize_co_item="optimize table co_item"
optimize_co_session="optimize table co_session"

#删除数据
echo "正在删除co_block过期数据,请稍后..."
mysql -h${sql_ip} -P${sql_port} -u${sql_username} -p${sql_pwd} $sql_db -e "$del_co_block"
echo "正在删除co_container过期数据,请稍后..."
mysql -h${sql_ip} -P${sql_port} -u${sql_username} -p${sql_pwd} $sql_db -e "$del_co_container"
echo "正在删除co_entity过期数据,请稍后..."
mysql -h${sql_ip} -P${sql_port} -u${sql_username} -p${sql_pwd} $sql_db -e "$del_co_entity"
echo "正在删除co_item过期数据,请稍后..."
mysql -h${sql_ip} -P${sql_port} -u${sql_username} -p${sql_pwd} $sql_db -e "$del_co_item"
echo "正在删除co_session过期数据,请稍后..."
mysql -h${sql_ip} -P${sql_port} -u${sql_username} -p${sql_pwd} $sql_db -e "$del_co_session"

#优化索引
echo "正在优化co_block,请稍后..."
mysql -h${sql_ip} -P${sql_port} -u${sql_username} -p${sql_pwd} $sql_db -e "$optimize_co_block"
echo "正在优化co_container,请稍后..."
mysql -h${sql_ip} -P${sql_port} -u${sql_username} -p${sql_pwd} $sql_db -e "$optimize_co_container"
echo "正在优化co_entity,请稍后..."
mysql -h${sql_ip} -P${sql_port} -u${sql_username} -p${sql_pwd} $sql_db -e "$optimize_co_entity"
echo "正在优化co_item,请稍后..."
mysql -h${sql_ip} -P${sql_port} -u${sql_username} -p${sql_pwd} $sql_db -e "$optimize_co_item"
echo "正在优化co_session,请稍后..."
mysql -h${sql_ip} -P${sql_port} -u${sql_username} -p${sql_pwd} $sql_db -e "$optimize_co_session"

else

echo "=========【错误】==========="
echo "输入有误"
echo "已停止执行"
echo "============================"
exit

fi

使用

脚本使用截图

彩蛋

查看数据库占用空间
“coreprotect”为数据库名

1
mysql> select table_schema as '数据库',sum(table_rows) as '记录数', sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)',sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)' from information_schema.tables where table_schema='coreprotect';
文章目录
  1. 1. 脚本
  2. 2. 使用
  3. 3. 彩蛋