Windows下MySQL的配置文件是
my.ini
Linux下MySQL的配置文件是my.cnf
# 执行以下 查找 配置文件的 命令:
mysql --verbose --help|grep -A 1 'Default options'
>>> Default options are read from the following files in the given order:
>>> /etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf
说明:
从上可以看出, 服务器首先会读取/etc/my.cnf文件 OR 该目录下的文件,
如果发现该文件不存在,再依次尝试从后面的几个路径进行读取。
只要某一个文件加载成功,就不再加载后边指定的配置文件了。
一般配置文件是:/etc/mysql/conf.d/mysql.cnf 文件
MySQL配置文件
/etc/my.cnf
中 4个 核心模块
- [client]
MySQL客户端
应用模块,只有MySQL附带的客户端应用程序保证可以读取此模块下的内容。- [mysqld]
MySQL服务端
应用模块- [mysqld_safe]
指定mysqld_safe进程
的配置.
父进程:mysqld_safe——管理mysqld,保证mysqld正常运行,
子进程:mysqld——工作进程, 真正对外提供服务;
mysqld_safe被杀死后,mysqld依然存在, mysqld被杀死后,mysqld_safe会重启一个mysqld- [mysql]
对mysql命令
执行的配置
[client]
# 客户端 连接 字符集 默认为latin1不支持中文
default-character-set=utf8
# 客户端 连接 服务端 默认连接 的端口设置
port = 3306
#客户端 连接 服务端 设置一个默认密码, mysql -u root 回车就可以了
password=123456
# 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实例,一般在 集群中用到
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 = /data/
#临时文件目录
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 = READ-COMMITTED
# 日志自动过期清理天数
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
[mysqld_safe]
# 错误日志位置
log-error = /var/log/mysqld.log
# 进程id文件
pid-file = /var/run/mysqld/mysqld.pid
[mysql]
# mysql以socket方式运行的sock文件位置
socket=/data/var/mysql/mysql.sock
mysql默认使用的端口是
3306
,,默认root的权限是本地连接
,所以
第一步 将 端口 开放;
第二步 将root权限开放;
打开配置文件, 将bind-address = 127.0.0.1注销(前面加#号)
mysql -u root -p <回车>
update mysql.user set host = '%' where user ='root' limit 1;
flush privileges;
sudo service mysql restart
进入到配置文件,在 [mysqld]模块下 加入
skip-grant-tables
这句话.
这句的作用是 免密登录
修改完配置文件后, 重启: service mysql restart
然后 mysql -u root -p 输入密码的时 直接回车 进入数据库
进入数据库后执行下面三句指令:
use mysql; update user set authentication_string=password("123456") where user="root"; flush privileges;
此时root密码就设置好了
select user, plugin from user;
user | plugin |
---|---|
root | auth_socket |
mysql.session | mysql_native_password |
mysql.sys | mysql_native_password |
mysql-sys-maint | mysql_native_password |
将 root 的auth_socket 改成 mysql_native_password:
update user set authentication_string=password("123456"),plugin='mysql_native_password' where user='root';
修改完毕,退出数据库,然后注释掉 追加到配置文件中的那句话
重启mysql
sudo service mysql restart
数据库为 only_full_group_by 模式, 而only_full_group_by的语义就是确定 select 之后获取的 信息值 都是明确语义,
简单的说来,在此模式下,信息值要么是来自于聚合函数(sum、avg、max等)的结果,要么是来自于group by list中的表达式的值
换句话说,信息值 不能出现多个情况都可以, 让 mysql 自己选择的情况,例如 name分组下, tom的分组的 sex字段 显示man和woman 都可以,但是mysql无法做主。
MySQL5.7之后,sql_mode中ONLY_FULL_GROUP_BY模式默认设置为打开状态。
# 查看当前 mysql的 模式
SELECT @@GLOBAL.sql_mode;
# 显示如下:
# ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
# step1:打开配置文件mysql.cnf
sudo gedit /etc/mysql/mysql.cnf
# step2:将上述中的 ONLY_FULL_GROUP_BY 从输出的 字符组 中剔除,将剩下的 加入到 配置文件中
# 在[mysqld]中添加代码
sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
# step3:重启mysql
sudo systemctl restart mysql