DBA MySQL配置相关

字符集相关

字符集简介

​ 在MySQL中,字符串分二进制与非二进制类型,二进制用于储存图片、声音等文件,非二进制用于储存文本数据。

​ 非二进制类型的字符串受字符集和校对规则影响。

​ 其实字符集说白了就是字符编码。

查看字符集

​ 在MySQL中拥有多种字符集,如果MySQL版本小于8则默认字符集是拉丁。

​ 查看当前的MySQL版本支持的字符集可使用以下命令:

M > SHOW CHARSET;

​ 虽然MySQL中有utf8的字符集,但是它的支持并非完美,如不支持emoji表情等。

​ 所以一般来说我们都会在建库建表时指定字符集为utf8mb4

设置字符集

​ 字段不设置字符集继承表的字符集,表不设置字符集继承数据库的字符集,所以一般我们在配置文件中为数据库指定字符集即可:

[mysqld]
character-set-server=utf8mb4
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4

utf8&utf8mb4

MySQL中的utf8utf8mb4区别:

utf8单个字符最大支持占3个字节,不支持emoji表情

utf8mb4单个字符最大支持占4个字节,支持emoji表情,是utf8的超集

校对规则相关

校对规则简介

​ 校对规则是字符集内用于字符比较和排序的一套规则,以_ci结束的为不区分大小写、_bin结束的比对字符元信息,可理解为区分大小写,_cs结尾的为区分大小写。

​ 当使用不区分大小写的校对规则时Aa是相同的,否则则不相同,这会影响到排序与比对。

查看校对规则

​ 查看当前的MySQL支持的校对规则可使用以下命令:

M > SHOW COLLATION;

​ 查看当前的MySQL所使用的校对规则可使用以下命令:

M > SHOW variables like "collation_%";
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | utf8_general_ci   |
| collation_database   | latin1_swedish_ci |
| collation_server     | latin1_swedish_ci |
+----------------------+-------------------+

设置校对规则

​ 修改表校对规则,对表的原字段将不影响,只对新增字段影响。

​ 一般来讲,我们会使用以下两个校对规则:

utf8mb4_general_ci 	    不区分大小写
utf8mb4_bin  		    区分大小写,可以存拼音,日文

​ 设置校对规则一般都是在配置文件中直接进行配置,如下所示:

[mysqld]
collation-server=utf8mb4_general_ci

配置项

配置级别

MySQL的配置项分为会话配置、全局配置、配置文件配置。

​ 会话配置即为SESSION配置,配置完成后立即生效,关闭当前会话窗口失效。

​ 全局配置即为GLOBAL配置,配置完成后立即生效,当前mysqld.service服务重启后失效。

​ 文件配置即为/etc/my.cnf配置,配置完成后重启当前mysqld.service服务生效,永不失效。

SESSION

session配置示例,配置字符集:

M > SET CHARACTER_SET_DATABASE=utf8mb4;

GLOBAL

global配置示例,配置字符集:

M > SET GLOBAL CHARACTER_SET_DATABASE=utf8mb4;

配置文件

​ 配置文件内容是XML格式,以键值对的方式进行配置。

​ 该文件一般存放于/etc目录中,其命名为my.cnf或者my.ini

​ 配置项目可分为以下几种:

# 服务端配置:
[mysqld]
[mysqld_safe]
[server]

# 客户端根配置:
[mysql]
[client]
[mysqladmin]
[mysqldump]

​ 一般,我们只需要配置[mysqld][mysql]、即可。

根配置 描述
[mysqld] 服务端的配置项
[client] 全局的客户端配置项,即不管是使用sock文件链接登录还是TCP/IP登录的客户端,都会使用这下面的配置项
[mysql] 单一的客户端配置项,即只有通过sock文件链接登录的客户端才使用这里面的配置项,当没有[client]时以该配置项为准

​ 以下是一个配置文件的基本定义模板:

[mysqld]
user=mysql                                                  # mysql用户配置
server_id=3306                                              # 当前mysql服务的ID号,适用于多实例mysql服务
port=3306                                                   # 当前mysql服务的端口号
basedir=/usr/local/application/mysql57/mysql                # 当前mysql服务软件目录
datadir=/usr/local/application/mysql57/data                 # 当前mysql服务的数据存放目录

log_error=/usr/local/application/mysql57/logs/mysqld.log    # 当前mysql服务中运行日志存放目录及日志名称
# log_bin=/usr/local/application/mysql57/logs/mysql_bin     # 开启binlog,设定二进制日志存放目录及日志名称前缀
# binlog_format=row                       # mysql中二进制日志的格式化模式 [statement、row、mixed]
# gtid-mode=on                            # 当前mysql服务的binlog记录GTID模式以被打开
# enforce-gtid-consistency=true           # 当前mysql服务的GTID号必须是唯一的,即GTID幂等性约束已被打开
# slow_query_log=1                        # 当前mysql服务慢日志已被打开
# long_query_time=0.1                     # 设定慢语句记录时间
# slow_query_log_file=/usr/local/application/mysql57/logs/slow.log   # 当前mysql服务的慢日志存放目录及日志名称
# log_queries_not_using_indexes                   # 没走索引的语句也记录


character-set-server=utf8mb4            # 当前mysql服务所使用的字符集为utf8mb4
collation-server=utf8mb4_general_ci     # 当前mysql服务所使用的校对规则为utf8mb4_general_ci
default-storage-engine=INNODB           # 当前mysql服务创建新表时将使用的默认存储引擎为InnoDB

socket=/tmp/mysql.sock                  # socket连接时的文件,本地登录使用

[mysql]
default-character-set=utf8mb4            # 设置mysql客户端链接当前mysql服务时所使用的字符集为utf8mb4
socket=/tmp/mysql.sock                   # socket连接时的文件,本地登录使用

[client]
port=3306                                # 设置mysql客户端连接当前mysql服务时默认使用的端口
socket=/tmp/mysql.sock                   # socket连接时的文件,本地登录使用

加载顺序

​ 配置文件在不同位置可以拥有多个,使用以下命令来查看mysqld.service服务启动时加载的配置文件顺序:

T > mysqld --help --verbose | grep "my.cnf"

/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf

​ 你可以对不同的启动服务指定不同的配置文件,如对mysqld_safe服务启动时,采用全新的配置文件进行配置:

T > mysqld_safe --defaults-file=/tmp/mysql_safe.ini

查看配置

​ 可以通过SELECT @@语句和SHOW VARIABLES LIKE语句查看配置项。

​ 使用格式如下:

# SELECT @@用于精确的查看某一配置项
SELECT @@配置项名称;

# SHOW VARIABLES LIKE用于模糊的查看所有带有该词条的配置项,使用%来代表匹配所有字符,_匹配一个或多个
SHOW VARIABLES LIKE "%配置项名称%"

​ 示例演示,通过SELECT @@语句精确的查看某一配置项:

M > SELECT @@COLLATION_CONNECTION;
+------------------------+
| @@COLLATION_CONNECTION |
+------------------------+
| utf8mb4_general_ci     |
+------------------------+

​ 示例演示,通过SHOW VARIABLES LIKE语句模糊的查找所有带有该词条的配置项:

M > SHOW VARIABLES LIKE "%COLLATION_%";
+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| collation_connection | utf8mb4_general_ci |
| collation_database   | latin1_swedish_ci  |
| collation_server     | latin1_swedish_ci  |
+----------------------+--------------------+

常用的配置项查看

SHOW

单独的使用SHOW语句:

SHOW语句 描述
show databases; 查看数据库名
show tables; 查看表名
show create database [库名]; 查看建库语句
show create table [表名]; 查看建表语句
show processlist; 查看所有用户连接情况
show charset; 查看支持的字符集
show collation; 查看所有支持的校对规则
show grants for "[用户]"@"[允许登录的地址]"; 查看用户的权限信息
show variables like "%[指定参数]%"; 查看当前使用的某个参数信息
show engines; 查看所有支持的存储引擎类型
show index from [表名]; 查看表的索引信息
show engine innodb status\G; 查看innoDB引擎详细状态信息
show binlog events in "[指定参数]"; 查看二进制日志的事件信息
show master status; 查看mysql当前使用二进制日志信息
show binlog events in "[指定参数]"; 查看二进制日志的事件信息
show master status; 查看mysql当前使用二进制日志信息
show slave status\G; 查看从库状态信息
show relaylog events in "[指定参数]"; 查看中继日志的事件信息
show status like "[指定参数]"; 查看数据库整体状态信息

SELECT

​ 单独的使用SELECT语句:

SELECT语句 描述
select @@basedir; 查看软件服务相关文件存放目录(安装目录)
select @@datadir; 查看数据相关文件存放目录
select @@port; 查看当前实例端口号
select @@innodb_flush_log_at_trx_commit; 查看事务提交刷新策略
select database(); 查看当前所在的数据库
select now(); 查看当前时间
posted @ 2021-02-16 18:10  云崖君  阅读(81)  评论(0编辑  收藏  举报