这条命令的解读如下:

bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/manager.sh)"

1.bash:启动一个新的 Bash shell 进程来执行命令。
2.-c:告诉 Bash 执行后跟的字符串命令,而不是执行文件。
3.$(...):命令替换(Command Substitution),表示将括号中的命令执行后返回的结果作为文本插入到外部命令中。在这个例子中,括号中的命令 curl -fsSLk https://waf-ce.chaitin.cn/release/latest/manager.sh 会被执行,并且它的输出(即 manager.sh 文件的内容)会被传递给 bash -c 来执行。

命令 curl -fsSLk https://waf-ce.chaitin.cn/release/latest/manager.sh 解释如下:

4.curl:用于下载数据的命令行工具,常用来从网络上获取资源。
5.-f:如果 HTTP 请求失败(例如返回 404 错误),curl 会“安静地”退出,不会显示错误信息。
6.-s:使 curl 以“安静模式”运行,不显示进度条和错误信息。
7.-S:与 -s 配合使用,启用在出现错误时显示错误信息。
8.-L:如果服务器返回重定向响应,curl 会跟随重定向。
9.-k:忽略 SSL/TLS 证书验证警告(即使证书不受信任,curl 也会继续进行)。

最后,https://waf-ce.chaitin.cn/release/latest/manager.sh 是指要从该 URL 下载的脚本文件 manager.sh。

总结:
此命令的作用是:

10.使用 curl 从指定 URL (https://waf-ce.chaitin.cn/release/latest/manager.sh) 下载 manager.sh 脚本文件。
11.忽略 SSL/TLS 证书错误(如果有)。
12.将下载的内容传递给 bash,并通过 bash 执行该脚本。

这通常用于自动化安装或更新某个软件,前提是下载的脚本内容是安全且可信的。在执行这类命令时,要确保来源的可信性,避免潜在的安全风险。

        //图片列表预览功能
        $('.j-image-viewer').each(function () {
            let $this = $(this)
            $this.data('viewer', new Viewer(this, {
                url: $this.data('original') || 'data-original',
                title: false
            }))
            //新增删除节点时重新刷新viewer
            const config = {childList: true, subtree: true}
            const observer = new MutationObserver(function (mutations) {
                mutations.forEach(function (mutation) {
                    if (mutation.type === 'childList') {
                        $(mutation.target).data('viewer').destroy();
                        $(mutation.target).data('viewer', new Viewer(mutation.target, {
                            url: $(mutation.target).data('original') || 'data-original',
                            title: false
                        }))
                    }
                });
            })
            observer.observe($this[0], config)
        });

MutationObserver
https://developer.mozilla.org/zh-CN/docs/Web/API/MutationObserver
MutationObserver 接口提供了监视对 DOM 树所做更改的能力。它被设计为旧的 Mutation Events 功能的替代品,该功能是 DOM3 Events 规范的一部分。

构造函数
MutationObserver()
创建并返回一个新的 MutationObserver 它会在指定的 DOM 发生变化时被调用。

方法
disconnect()
阻止 MutationObserver 实例继续接收的通知,直到再次调用其 observe() 方法,该观察者对象包含的回调函数都不会再被调用。

observe()
配置 MutationObserver 在 DOM 更改匹配给定选项时,通过其回调函数开始接收通知。

takeRecords()
从 MutationObserver 的通知队列中删除所有待处理的通知,并将它们返回到 MutationRecord 对象的新 Array 中。

// 选择需要观察变动的节点
const targetNode = document.getElementById("some-id");

// 观察器的配置(需要观察什么变动)
const config = { attributes: true, childList: true, subtree: true };

// 当观察到变动时执行的回调函数
const callback = function (mutationsList, observer) {
  // Use traditional 'for loops' for IE 11
  for (let mutation of mutationsList) {
    if (mutation.type === "childList") {
      console.log("A child node has been added or removed.");
    } else if (mutation.type === "attributes") {
      console.log("The " + mutation.attributeName + " attribute was modified.");
    }
  }
};

// 创建一个观察器实例并传入回调函数
const observer = new MutationObserver(callback);

// 以上述配置开始观察目标节点
observer.observe(targetNode, config);

// 之后,可停止观察
observer.disconnect();

删除 MySQL 的二进制日志文件(mysql-bin)是一个需要谨慎操作的过程,因为这些日志文件用于记录数据库的所有更改操作,对于数据恢复、主从复制等非常重要。如果你确实需要删除或清理这些日志文件,以下是几种安全的方法:

方法一:使用 PURGE BINARY LOGS 命令

这是最推荐的方法,因为它可以在不影响当前正在使用的日志文件的情况下,安全地删除旧的日志文件。

  1. 登录 MySQL

    mysql -u root -p
  2. 查看当前的二进制日志文件

    SHOW BINARY LOGS;
  3. 删除指定日期之前的日志文件

    PURGE BINARY LOGS TO 'mysql-bin.0000XX';

    或者

    PURGE BINARY LOGS BEFORE 'YYYY-MM-DD HH:MM:SS';

例如,删除 2023 年 1 月 1 日之前的所有日志文件:

PURGE BINARY LOGS BEFORE '2023-01-01 00:00:00';
  1. 确认删除结果
    再次运行 SHOW BINARY LOGS; 查看是否已成功删除。

方法二:修改 MySQL 配置文件

如果希望定期自动清理二进制日志文件,可以在 MySQL 配置文件中设置保留时间。

  1. 编辑 MySQL 配置文件(通常是 /etc/my.cnf/etc/mysql/my.cnf):

    [mysqld]
    expire_logs_days = 7

    这将设置二进制日志文件保留 7 天后自动删除。

  2. 重启 MySQL 服务

    sudo systemctl restart mysqld

方法三:手动删除(不推荐)

虽然可以直接手动删除二进制日志文件,但这可能会导致主从复制等问题,因此不推荐这样做。如果你仍然选择手动删除,请确保先停止 MySQL 服务,并且备份所有重要的日志文件。

  1. 停止 MySQL 服务

    sudo systemctl stop mysqld
  2. 删除日志文件

    rm /var/lib/mysql/mysql-bin.*
  3. 重置二进制日志文件
    编辑 MySQL 数据目录下的 index 文件(通常为 mysql-bin.index),删除其中的内容。
  4. 启动 MySQL 服务

    sudo systemctl start mysqld

注意事项

  • 备份重要数据:在进行任何操作之前,确保已经备份了所有重要的数据和日志文件。
  • 检查主从复制状态:如果你的 MySQL 是主从架构的一部分,确保删除不会影响从库的同步。
  • 监控系统性能:删除大量日志文件可能会对系统性能产生短期影响,建议在低峰期进行操作。

通过以上方法,你可以安全地管理和清理 MySQL 的二进制日志文件。推荐使用 PURGE BINARY LOGS 命令,因为它是最安全和可靠的方式。

表250万行,可能是磁盘空间不够(存放数据的盘只有5G空闲空间)的情况下出现失败:

ALTER TABLE pre_answers_caiji9 ENGINE=InnoDB
1114 - The table '#sql-6b33_1d98828' is full

分步操作,新建表再复制数据的方式进行:

CREATE TABLE pre_answers_caiji9_new LIKE pre_answers_caiji9;
ALTER TABLE pre_answers_caiji9_new ENGINE=InnoDB;

INSERT INTO pre_answers_caiji9_new SELECT * FROM pre_answers_caiji9 WHERE id BETWEEN 1 AND 1000000;
INSERT INTO pre_answers_caiji9_new SELECT * FROM pre_answers_caiji9 WHERE id BETWEEN 1000001 AND 2000000;
-- 继续插入剩余的数据, 一次1百万行太久,可降低到10万...

-- 重命名表
RENAME TABLE pre_answers_caiji9 TO pre_answers_caiji9_old, pre_answers_caiji9_new TO pre_answers_caiji9;

--删除旧表
DROP TABLE pre_answers_caiji9_old;


        //复制图片功能
        $(document).on('click', ".j-copy-image", function(e) {
            var img = $('#' + $(this).data('target'))[0]
            var canvas = document.createElement('canvas')
            canvas.width = img.naturalWidth
            canvas.height = img.naturalHeight
            var ctx = canvas.getContext('2d');
            ctx.drawImage(img, 0, 0)
            canvas.toBlob(async blob => {
                const data = [
                    new ClipboardItem({
                        [blob.type]: blob,
                    }),
                ];
                await navigator.clipboard.write(data)
                    .then(
                        () => {
                            simpleDialog({
                                msg: '复制成功'
                            })
                        },
                        () => {
                            simpleDialog({
                                msg: '复制失败,请右键选择【复制图像】'
                            })
                        }
                    );
            });
        })