1. 登陆

1
2
3
4
5
mysql -hlocalhost -u root -p

# 如果出现:-bash: mysql: command not found

--就执行: # ln -s /usr/local/mysql/bin/mysql /usr/bin --没有出现就不用执行

2. 服务起停

1
2
3
4
5
6
7
8
9
10
11
# 查看mysql状态   
service mysql status
service mysql start
service mysql stop
service mysql restart

# service mariadb status
# service mariadb start
# service mariadb stop
# service mariadb restart

3. 修改默认配置

官方引用

3.1. 修改字符集

查看字符集:

1
show variables like '%character%';

+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | utf8mb3 |
| character_set_connection | utf8mb3 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8mb3 |
| character_set_server | latin1 |
| character_set_system | utf8mb3 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+————————–+—————————-+

3.1.1. 通过sql设置全局变量

1
2
3
4
5
SET GLOBAL character_set_client     = utf8mb4;
SET GLOBAL character_set_connection = utf8mb4;
SET GLOBAL character_set_database = utf8mb4;
SET GLOBAL character_set_results = utf8mb4;
SET GLOBAL character_set_server = utf8mb4;

这种方式我mariadb10.11测试已经无效了

3.1.2. 通过配置文件设置

mariadb的配置文件在 /etc/my.cnfmy.cnf.d/下,文件夹下默认有enable_encryption.preset、mysql-clients.cnf、server.cnf、spider.cnf
mysql的配置文件在/etc/my.cnf/etc/mysql/my.cnf,优先级递减,如果没有找到的话,则需要自己创建一个配置文件(mysql从8.0之后就不包含文件了,但是任然可以自己创建并使用)

引用

mariadb配置文件建议在mysql-clients.cnf、server.cnf中配置,见Mariadb

MySQL配置文件 /etc/my.cnf 中 4个 核心模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
[client]
# MySQL客户端应用模块,只有MySQL附带的客户端应用程序保证可以读取此模块下的内容。

# 客户端 连接 字符集 默认为latin1不支持中文
#default-character-set=utf8
default-character-set=utf8mb4

# 客户端 连接 服务端 默认连接 的端口设置
# port = 3306
# MySQL有两种主要的连接方式:
# (1)TCP/IP: mysql -h 192.168.103.67 -uroot -p
# (2)socket:客户端 找到 服务端的 mysql.sock文件,以共享文件的方式链接,比TCP快,缺点是:
# 客户端 和 服务端 应在一台PC上,依靠本地的.sock文件。
# 如果不在同一台PC上,就没有办法连接了。
# 查看 服务端 mysql.sock文件的位置:show variables like 'socket'\G;
# socket = /tmp/mysql.sock




[mysqld]
# MySQL服务端应用模块

# ========基础配置========
# 表示mysql实例,一般在 集群中用到
# server-id = 1
# MySQL服务程序TCP/IP监听端口(通常用3306)
# port = 3306
# 表示MySQL的管理用户
# user = mysql
#指定服务器 默认 字符集
character_set_server=utf8mb4
#默认排序规则
collation-server = utf8mb4_unicode_ci
# 指定服务器 默认 引擎
default-storage-engine=INNODB
# 该参数指定了安装 MySQL 的安装路径,若用到 相对路径 时,以该路径 为基准
# basedir = /usr/local/mysql
# 指定了 MySQL 的 数据库文件 放在什么路径下
# datadir = /var/lib/mysql
#临时文件目录
# tmpdir=/data/mysql/tmp
# 允许访问 mysql服务 的 IP地址
# 如果允许多个,则:bind-address = 139.196.197.138 127.0.0.1
# 允许所有IP,要么如下 写法,OR 注释掉该 配置项
# bind-address = 0.0.0.0
# 密码认证方式
# mysql8 默认的是caching_sha2_password, 老版的默认是 mysql_native_password
# default_authentication_plugin=mysql_native_password

# ========优化配置========
# 禁用DNS主机名查找,启用以后请求响应快了一半
# skip_name_resolve = 1

# ========度量配置========
#设置 MySQL 实例最大允许的并发连接数。具体来说,它决定了 MySQL 服务器能够同时处理的客户端连接数的上限。
#例如,如果将 max_connections 设置为 500,则 MySQL 服务器一次最多只能处理 500 个客户端连接。
#如果超过这个数目,新的连接请求将被拒绝。需要注意的是,max_connections 的值不应设置得过高,
#否则会占用过多的系统资源,导致性能下降或服务器宕机等问题。
#可以使用 ==> SHOW VARIABLES LIKE 'max_connections'; <== 查询 MySQL 当前 max_connections 的设置值:
#8核16G的Linux系统上,一般建议将 max_connections 的值设置为500 - 600 左右。
# max_connections=500

# ========度量配置========
# 某台 host 连接错误 次数等于 max_connect_errors(默认10),再次尝试时被屏蔽。
# 可有效防止 dos攻击
# max_connect_errors = 20

# ========事务配置========
# 数据库事务隔离级别
# 1. READ-UNCOMMITTED(读取未提交内容)
# 2. READ-COMMITTED(读取提交内容)
# 3. REPEATABLE-READ(可重读) ==> 默认 <==
# 4. SERIERLIZED(可串行化)
# transaction_isolation = REPEATABLE-READ

# ========事务配置========
# 日志自动过期清理天数
#expire_logs_days = 90
# 错误日志位置
#log_error = /data/local/mysql-5.7.19/log/mysql-error.log
# 是否开启 慢查询 日志收集
#slow_query_log = 1
# 慢查询日志位置
#slow_query_log_file = /data/local/mysql-5.7.19/log/mysql-slow.log
# 设置记录慢查询超时时间
#long_query_time = 1

# binlog相关,log-bin 配置表示开启bin_log 查看是否成功使用 show variables like 'log_bin'
log-bin=/var/lib/mysql/mysql-bin
#server-id=1
# binlog日志有三种格式:Statement、Row以及Mixed。 mysql默认采用statement,
#binlog_format=MIXED
# expire_logs_days是日志过期时间,这里配置为30天,默认是0,0是永久的意思
#expire_logs_days=30

[mysqld_safe]
#指定mysqld_safe进程的配置.
#父进程:mysqld_safe——管理mysqld,保证mysqld正常运行,子进程:mysqld——工作进程, 真正对外提供服务;mysqld_safe被杀死后,mysqld依然存在, mysqld被杀死后,mysqld_safe会重启一个mysqld
# 错误日志位置
#log-error = /var/log/mysqld.log
# 进程id文件
#pid-file = /var/run/mysqld/mysqld.pid

[mysql]
# mysql以socket方式运行的sock文件位置
# socket=/data/var/mysql/mysql.sock

修改过这里记得要重启,如果为docker容器还需要重启容器,光是重启服务不行

4. SQL执行语句

4.1. 事务相关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

-- 查询事务隔离级别
show variables like 'tx_isolation'; --老版本
show variables like 'transaction_isolation';
-- 设置事务隔离级别
set session transaction isolation level read uncommitted;
set session transaction isolation level read committed;
set session transaction isolation level repeatable read;

-- 查询事务连接
select tx.trx_id from information_schema.innodb_trx tx
where tx.trx_mysql_thread_id = connection_id();




-- 开启事务,并在第一个语句开始时开启一致性视图
begin;
start transaction;
-- 开启事务并且马上开启一致性视图
start transaction with consistent SNAPSHOT;

5. 日志

1
2
3
4
5
6
7
8
9
10
11
12
SET GLOBAL log_output = 'TABLE';SET GLOBAL general_log = 'ON'; //日志开启
SET GLOBAL log_output = 'TABLE'; SET GLOBAL general_log = 'OFF'; //日志关闭
show variables like 'general_log'; //查看是否开启
show variables like 'general_log_file'; -- 看看日志文件保存位置
set global general_log_file='tmp/general.lg'; -- 设置日志文件保存位置
show variables like 'log_output'; -- 看看日志输出类型 table或file
set global log_output='table'; -- 设置输出类型为 table
set global log_output='file'; -- 设置输出类型为file

-- 查看语句
SELECT * from mysql.general_log ORDER BY event_time DESC;

innodb_flush_log_at_trx_commit 这个参数设置成 1 的时候,表示每次事务的 redo log 都直接持久化到磁盘。这个参数建议设置成 1,这样可以保证 MySQL 异常重启之后数据不丢失
sync_binlog 这个参数设置成 1 的时候,表示每次事务的 binlog 都持久化到磁盘。这个参数建议设置成 1,这样可以保证 MySQL 异常重启之后 binlog 不丢失。