分类 默认分类 下的文章

注意:为避免失误,请先备份你的数据库!!!

一般情况下,我们会设置MySQL默认的字符编码为utf8,但是近些年来,emoji表情的火爆使用,给数据库带来了意外的错误,就是emoji的字符集已经超出了utf8的编码范畴

现在的应用一般不要在MySQL上使用utf8字符编码,推荐使用utf8mb4

utf8mb4是MySQL5.5.3版本之后支持的字符集,so,如果你需要使用这个字符集,前提条件是你的MySQL版本必须 >= 5.5.3

#查看当前系统默认的字符集设置
SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';

#修改database默认的字符集
ALTER DATABASE {database_name} CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

#可以看到,虽然修改了database的字符集为utf8mb4,但是实际只是修改了database新创建的表,默认使用utf8mb4,原来已经存在的表,字符集并没有跟着改变,需要手动为每张表设置字符集



#只修改表默认的字符集
ALTER TABLE {table_name} DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

#修改表默认的字符集和所有字符列的字符集
ALTER TABLE {table_name} CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

#修改column默认的字符集
ALTER TABLE {table_name} CHANGE {column_name} {column_name} VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

检查字段的最大长度和索引列

字段长度

由于从utf8升级到了utf8mb4,一个字符所占用的空间也由3个字节增长到4个字节,但是我们当初创建表时,设置的字段类型以及最大的长度没有改变。例如,你在utf8下设置某一字段的类型为TINYTEXT, 这中字段类型最大可以容纳255字节,三个字节一个字符的情况下可以容纳85个字符,四个字节一个字符的情况下只能容纳63个字符,如果原表中的这个字段的值有一个或多个超过了63个字符,那么转换成utf8mb4字符编码时将转换失败,你必须先将TINYTEXT更改为TEXT等更高容量的类型之后才能继续转换字符编码

索引

在InnoDB引擎中,最大的索引长度为767字节,三个字节一个字符的情况下,索引列的字符长度最大可以达到255,四个字节一个字符的情况下,索引的字符长度最大只能到191。如果你已经存在的表中的索引列的类型为VARCHAR(255)那么转换utf8mb4时同样会转换失败。你需要先将VARCHAR(255)更改为VARCHAR(191)才能继续转换字符编码

修改配置文件

vim /etc/my.cnf
# 对本地的mysql客户端的配置
[client]
default-character-set=utf8mb4

# 对其他远程连接的mysql客户端的配置
[mysql]
default-character-set=utf8mb4

# 本地mysql服务的配置
[mysqld]
collation-server = utf8mb4_unicode_ci
init-connect='SET NAMES utf8mb4'
character-set-server = utf8mb4

> service mysqld restart

检查修改

SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';

修复&优化所有数据表

mysqlcheck -u root -p --auto-repair --optimize --all-databases

window 11系统,自己不知道设置过代理,请求python请求的时候遇到报错 ProxyError 感觉莫名其妙 的,之前钉钉也是加载不了图片,死活找不到原因

# 压根儿不用这么麻烦,直接两种方式: 
# 方法一:
session = requests.Session()
session.trust_env = False
response = session.get('http://ff2.pw') 
 
# 方法二:(多人亲测可以直接结局这个问题)
proxies = { "http": None, "https": None}
requests.get("http://ff2.pw", proxies=proxies)
 
# 都可以绕过系统设置的代理就好了

加上参数:verify=False,可以不验证SSL,解决SSLError报错问题,在开发环境或者不需要验证SSL证书的时候一定会遇到

如果不需要跟随重定向,则可以使用参数:allow_redirects=False

result = requests.get(url, proxies={"http": None, "https": None}, verify=False, allow_redirects=False)
#result.history是重定向历史
print(result.history, result.headers, result.headers.get('Location'))

参考大佬的文章:
https://juejin.cn/post/6844903927989665806

#ps j -A 命令可以看到PPID,PID,PGID,SID信息
#PGID 进程组
#SID 会话ID
#PPID 父进程

#只会结束 32551 这个进程,而如果有一堆子进程的话,子进程将链接到init这个初始进程下
kill -9 32551

#在进程PID前加一个-符号,意思是给这一进程组下的所有进程发送结束信号,将子进程全部结束掉
kill -9 -32551

-9这个参数,会立即结束程序,而可以导致非正常退出,谨慎

#给进程发送term信号,如果进程没有捕获该信号,则进程终止(前面加-表示进程组,包含子进程)
kill -SIGTERM -32551


kill -l
#列出所有信号名称

user_00@webdev:~> kill -l
 1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP
 6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG  24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF 28) SIGWINCH    29) SIGIO   30) SIGPWR
31) SIGSYS  34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX    

4476075-c6cb50421e1eb16f.jpg.webp

格式说明:
wheel(用户,前面加上%就表示这个组而不是用户了,表示这个组的用户都适用这条规则)
ALL(以什么机器登录)=(ALL)(用户:用户组,以某用户及组执行命令)
NOPASSWD: ALL([不需要输入密码:] 可执行的命令或者路径
注意:

  • 命令需要使用绝对路径,不然报错?
  • 路径则表示路径下的所有命令,路径是要以/结尾的
  • 多个命令可用,分隔
  • 命令前面加!表示不能执行的命令或者路径

例:

[root@~]# vim /etc/sudoers

root    ALL=(ALL)       ALL
wheel        ALL=(ALL)        /bin/,!/usr/sbin
%wheel        ALL=(ALL:ALL)       NOPASSWD: ALL
zabbix  ALL=NOPASSWD: /etc/init.d/nginx restart

/etc/sudoers 这个文件的权限必需设置成440否则不能执行sudo
编辑时是只读,保存时:wq!,加上!就可以保存了

Alison
https://alison.com/
未来学习
https://www.futurelearn.com/
edX
https://www.edx.org/
卡登泽
https://www.kadenze.com/
斯坦福在线
https://online.stanford.edu/
乌迪米
https://www.udemy.com/
Udacity
https://www.udacity.com/
密码学
https://www.codecademy.com/
Coursera
https://www.coursera.org/
达世币大会–学习编码
https://dash.generalassemb.ly/

https://www.edx.org/
开放学习
https://www.open.edu/openlearn/
开放学习计划