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
中的utf8
和utf8mb4
区别:
utf8单个字符最大支持占3个字节,不支持emoji表情
utf8mb4单个字符最大支持占4个字节,支持emoji表情,是utf8的超集
校对规则相关
校对规则简介
校对规则是字符集内用于字符比较和排序的一套规则,以_ci
结束的为不区分大小写、_bin
结束的比对字符元信息,可理解为区分大小写,_cs
结尾的为区分大小写。
当使用不区分大小写的校对规则时A
与a
是相同的,否则则不相同,这会影响到排序与比对。
查看校对规则
查看当前的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(); | 查看当前时间 |