2025年7月

这是因为你在 MySQL 8.0+ 的 staging 环境导出了 SQL 文件,其中包含了 MySQL 8 特有的字符排序规则(collation):utf8mb4_0900_ai_ci,而你本地环境可能是 MySQL 5.7 或更低版本,它并不支持这种 collation。

解决方案一:升级本地 MySQL 至 8.0+
最彻底的方式是将本地的 MySQL 升级到和 staging 一样的版本,比如 MySQL 8.0.x,这样所有 collation 都能兼容。

解决方案二:修改导出的 .sql 文件,替换 collation
你可以手动或自动把 .sql 文件中的 utf8mb4_0900_ai_ci 改成 utf8mb4_general_ci(或其他你本地支持的 collation)。

验证本地支持哪些 collation
你可以在本地执行以下 SQL 来确认你支持哪些 collation:
SHOW COLLATION WHERE Charset = 'utf8mb4';
输出中你能看到你 MySQL 支持的全部 utf8mb4_* 排序规则,比如:
utf8mb4_general_ci
utf8mb4_unicode_ci
utf8mb4_bin
如果没有 utf8mb4_0900_ai_ci,就说明你本地 MySQL 版本较低。

Navicat premium是一款数据库管理工具,是一个可多重连线资料库的管理工具,它可以让你以单一程式同时连线到 MySQL、SQLite、Oracle 及 PostgreSQL 资料库,让管理不同类型的资料库更加的方便。

Navicat工具下载
下载官网:https://www.navicat.com.cn/download/navicat-premium
根据实际系统情况,选择下载。
双击打开安装包,选择安装路径后直接下一步傻瓜式安装即可。
使用激活工具激活,双击打开
此处一定要断网
此处一定要断网
此处一定要断网
此处一定要断网
选择安装目录(目录一定要在navicat安装的根目录下,也就是instantclient_11_2文件夹的上一级)
点击Patch
然后点击是,请勿选择否,否则需要卸载,重装再来一次.
打开navicat的注册页面,打开激活工具,点击Generate生成Keygen,点击Copy,粘贴到navicat注册页面中!点击激活
点击手动激活
按图中步骤操作,即可激活成功

连接数据库
点击左上角"连接"按钮。
双击MySQL
双击左侧数据库名称,看到图表变亮表示打开连接

操作数据库
右键,选择新建数据库,并填写相关信息。如果数据包含中文,建议设置成utf8。

补充:在选择字符集时,会有两个可选项,utf8mb3和utf8mb4,两者区别如下:
utf8mb3:用3个字节来存储UTF-8字符,占用空间少,但支持的字符集范围有限,大致在0x0000至0xFFFF之间。
utf8mb4:用4个字节来存储UTF-8字符,支持的字符集范围更广,大致在0x00000000至0x10FFFF之间,包括生僻字、冷门符号以及emoji表情符号等。

双击打开新建的数据库
导入备份文件
右键,选择运行SQL文件。导入成功后点击关闭。

备份数据库
在对应数据库下右键备份按钮,选择新建备份。或者在菜单栏点击备份按钮,点击下方的新建备份。
添加注释、选择备份对象,点击备份,开始数据库备份。
备份成功,点击关闭。

自动备份数据库
点击自动运行,在页面选择新建批处理作业
点击备份,双击提交可用的工作,点击保存按钮,保存配置文件。
点击设置任务计划,在"常规"中选中不管用户是否登录都要运行。
在"触发器"中点击新建,配置自动备份执行时间与周期。(建议备份工作可以在夜间业务量较少的时段进行)
点击确认,需要输入系统管理员的账号密码。
至此,使用navicat进行数据库的备份、还原、自动备份操作就已演示完成。

宝塔从7.4.5版本开始,宝塔安装后首页强制绑定手机号码
关闭宝塔安全入口
rm -f /www/server/panel/data/admin_path.pl

sed -i "s|if (bind_user == 'True') {|if (bind_user == 'REMOVED') {|g" /www/server/panel/BTPanel/static/js/index.js
同理,如果要还原
sed -i "s|if (bind_user == 'REMOVED') {|if (bind_user == 'True') {|g" /www/server/panel/BTPanel/static/js/index.js

方法2:修改首页html代码。猥琐点
文件路径/www/server/panel/BTPanel/templates/default/index.html

<script type="text/javascript">
    var bind_user =false ;//"{{data['bind']}}"
</script>

宝塔7.6.0安装后,会提示绑定宝塔账号,而且这个绑定和之前的绑定ui不一样了。
修改__init__.py
通过禁用/www/server/panel/BTPanel/__init__.py文件的某些代码来禁止绑定。我们通过路径找到__init__.py文件,这个如何找这个文件,可以用SFTP来连接到服务器,然后通过路径找到这个文件。拖到桌面用编辑器打开,比如说,sublime,editplus等等。
1)181-182行的代码注释掉,前面加#即可,如下。

 #if not public.is_bind():
#return redirect('/bind',302)

2)230-231行注释掉,如下:

 #if not os.path.exists('data/userInfo.json'):
#data['bind'] = os.path.exists('data/bind.pl')

3)ssh连接到服务器,输入bt命令,接着输入9,清除面板缓存即可。

Centos7.2 上防火墙的状态查看和关闭

查看防火墙状态

systemctl status firewalled
service iptables status

临时关闭防火墙

systemctl stop firewalld.service
service iptables stop

或者

systemctl stop firewalld

永久关闭防火墙(必须先临时关闭防火墙,再执行该命令,进行永久关闭)

systemctl disable firewalld.service
chkconfig iptables off

或者

systemctl disable firewalld

重启防火墙

systemctl enable firewalld
service iptables restart

在 Linux 系统中,使用 firewalld 或 iptables 管理防火墙时,可以通过以下方法开放 443 端口。
使用 firewalld:
1.查看当前的区域设置(通常是 public):
firewall-cmd --get-active-zones
2.开放 443 端口:
sudo firewall-cmd --zone=public --add-port=443/tcp --permanent
3.重新加载防火墙以应用更改:
sudo firewall-cmd --reload
4.验证端口是否已成功开放:
sudo firewall-cmd --zone=public --list-ports

使用 iptables:
1.开放 443 端口:
2.保存规则:
对于 Debian/Ubuntu 系统,保存规则:
sudo iptables-save > /etc/iptables/rules.v4
对于 RedHat/CentOS 系统,保存规则:
sudo service iptables save
3.验证端口是否已成功开放:
sudo iptables -L
确保防火墙规则生效后,443 端口就已经开放,可以用于 HTTPS 等服务。

若存在docker区域:

# firewall-cmd --get-active-zones
sudo firewall-cmd --zone=docker --add-port=443/tcp --permanent
sudo firewall-cmd --reload


通常我们业务实际开发中离不开加密,比如密码加密、token加密、敏感信息加密等,下面介绍一些常用的加密方法。

  1. Base64加密
    Base64是基于64个可打印字符来表示二进制数据的一种方法。
    const btoa = window.btoa('zhang123') // 编码
    console.log('加密后', btoa)
    const atob = window.atob('emhhbmcxMjM=') // 解码
    console.log('解密后', atob)

总结:
优势:
1.base64 适合不同平台、不同语言的传输;
2.页面中内嵌使用 base64 格式的小图片,可减少了服务器访问次数;
3.二进制位转换 base64 算法简单,对性能影响不大;

缺点:
1.二进制文件转换为 base64 后,体积大概增加 1/3;
2.base64 无法缓存,要缓存只能缓存包含 base64 的文件,比如 js 或者 css;
3.面对大文件时,会消耗一定的 CPU 进行编解码。

  1. MD5加密(不可逆)
    MD5是一种单向哈希算法,即将任意长度的“消息”经过哈希运算,生成一个128位的“指纹”。

使用MD5加密可以将原始的字符串转化为不可逆的密文,从而保证数据在传输中不被篡改,提高安全性。在前端中,我们可以通过JS库调用md5加密函数进行字符串加密,以保护用户信息。

安装:
// 下载依赖
npm install js-md5 -s

// 引入
import { md5 } from 'js-md5';

// 打印
console.log('md5加密', md5('zhang123'))

加盐:
console.log('md5加密', MD5('zhang123'));
const salt = "A1B2C3";
// 加盐
console.log('md5加密加盐', MD5('zhang123' + salt));

多次加密:
console.log('md5加密', MD5('zhang123'));
const salt = "A1B2C3";
// 加盐
console.log('md5加密加盐', MD5('zhang123' + salt));
// 多次加密
console.log('md5加密加盐', MD5(MD5('zhang123')));