通过 show variables 命令查看当前 mysql 是否是区分大小写,如下:
mysql大小写敏感配置相关的两个参数,lower_case_file_system 和 lower_case_table_names。
查看当前mysql的大小写敏感配置
show global variables like '%lower_case%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | lower_case_file_system | ON | | lower_case_table_names | 0 | +------------------------+-------+
lower_case_table_names=1 表示 mysql 是不区分大小写的
lower_case_table_names=0 表示 mysql 是区分大小写的
MySQL 8.0 以上版本,大小写敏感配置比较坑,根据官方文档可以发现如下信息:
lower_case_table_names can only be configured when initializing the server. Changing the lower_case_table_names setting after the server is initialized is prohibited. lower_case_table_names 只能在初始化服务器时配置。 禁止在服务器初始化后更改 lower_case_table_names 设置。
lower_case_table_names 配置必须在安装好 MySQL 后,初始化 mysql 配置时才有效。一旦 mysql 启动后,再设置是无效的,而且启动报错。
需要重新初始化MySQL数据库,并且在初始化过程中,在初始化之前将lower_case_table_names = 1写入到my.cnf文件中
在修改配置之前,请先把 mysql 服务停止。执行下面命令:
systemctl stop mysqld.service3.2、删除错误日志
为了方便查看 mysql 的错误日志,可以先将 /var/log/mysqld.log 删除。命令如下:
rm /var/log/mysqld.log3.3、删除系统数据库与用户数据库
将 mysql 数据库中的系统数据库和用户数据库都删除掉,执行下面命令:
(1)查看 /var/lib/mysql 目录下面的内容
[root@localhost mysql]# ls auto.cnf binlog.000003 binlog.000006 binlog.000009 ca.pem ib_buffer_pool ib_logfile1 mysql phoenix server-cert.pem undo_001 binlog.000001 binlog.000004 binlog.000007 binlog.index client-cert.pem ibdata1 ib_logfile2 mysql.ibd private_key.pem server-key.pem undo_002 binlog.000002 binlog.000005 binlog.000008 ca-key.pem client-key.pem ib_logfile0 #innodb_temp performance_schema public_key.pem sys
(2)递归删除 /var/lib/mysql 目录下面的内容
[root@localhost mysql]# rm -rf *3.4、创建数据库目录
上面将已存在的数据库目录 /var/lib/mysql 删除,下面将手动创建一个空目录且进行授权。命令如下:
(1)手动创建一个 mysql 目录,即上面刚刚删除的 mysql 目录
[root@localhost lib]# mkdir mysql [root@localhost lib]# ls alternatives dbus games logrotate misc mysql-files NetworkManager plymouth postfix rpm-state stateless tuned yum authconfig dhclient initramfs machines mysql mysql-keyring os-prober polkit-1 rpm rsyslog systemd vmware
(2)为 /var/lib/mysql 目录授权,设置目录的所属用户和所属组
[root@localhost lib]# chown -R mysql:mysql mysql
(3)查看目录详细信息,授权成功
[root@localhost lib]# ll|grep mysql drwxr-xr-x. 2 mysql mysql 6 Jul 1 17:01 mysql drwxr-x---. 2 mysql mysql 6 Sep 20 2019 mysql-files drwxr-x---. 2 mysql mysql 6 Sep 20 2019 mysql-keyring3.5、配置 lower_case_table_names
使用 vim 编辑器编辑 /etc/my.cnf 文件,如下:
[root@localhost lib]# vim /etc/my.cnf
在文件中的最后一行添加 lower_case_table_names 配置,配置如下:
#是否对sql语句大小写敏感,1表示不敏感 lower_case_table_names = 1
保存配置信息。
3.6、初始化 MySql执行如下命令初始化 mysql 数据库:
[root@localhost /]# mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql --basedir=/var/lib/mysql --datadir=/var/lib/mysql
Tips:注意my.cnf 文件路径是否正确
3.7、启动 MySql 服务systemctl start mysqld.service4、登录 MySql
由于上面执行了 MySql 初始化操作,曾经的密码已经不能用了。MySQL 将在初始化过程中创建临时密码,临时密码存储在 /var/log/mysql/error.log 中。
(1)查找临时密码
使用 cat 和 grep 命令配合查找,命令如下:
cat /var/log/mysql/mysqld.log |grep temp
Tips:如果不确定路径,可以使用find 命令查找mysqld.log 文件
(2)使用临时密码登录 MySql
mysql -uroot -ppCg3+El.c#ao
(3)修改root用户密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';
-
这里可能会提示 Your password does not satisfy the current policy requirements,意思是您的密码不符合当前规定的要求,你要么就把你的密码设置得复杂点,要么就去降低密码的校验规则。
-
在 Linux 上安装 MySQL 时会自动安装一个校验密码的插件,默认密码检查策略要求密码必须包含:大小写字母、数字和特殊符号,并且长度不能少于8位。修改密码时新密码是否符合当前的策略,不满足则会提示ERROR;
-
所以可以将这个限制密码位数设小一点,复杂度类型调底一点
# 将密码复杂度校验调整简单类型 set global validate_password.policy = 0; # 设置密码最少位数限制为 9 位 set global validate_password.length = 9;
就可以设置较为简单的密码了。
(4) 创建用户与权限分配
默认的 root 用户只能当前节点localhost访问,是无法远程访问的
创建用户命令:
语法格式:CREATE USER <用户名> [ IDENTIFIED ] BY [ PASSWORD ] <口令>
# mysql 8.0 以下 create user 'siteweb'@'%' IDENTIFIED BY 'siteweb1!'; create user 'siteweb'@'%' identified by 'siteweb1!'; #授予root远程权限 # mysql 8.0 create user 'siteweb'@'%' IDENTIFIED WITH mysql_native_password BY 'siteweb1!';
Tips: mysql8.0 的默认密码验证不再是 password 。所以在创建用户时,create user ‘username’@‘%’ identified by ‘password’; 客户端是无法连接服务的,所以在创建用户的时候需要加上 WITH mysql_native_password
创建完用户之后还需要给用户分配权限
grant all privileges on *.* to 'siteweb'@'%'; #给root用户授予远程权限 flush privileges; #刷新权限
mysql> grant all privileges on *.* to 'siteweb'@'%'; Query OK, 0 rows affected (0.00 sec) mysql> grant all privileges on *.* to 'root'@'%'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> select host,user from user; +-----------+------------------+ | host | user | +-----------+------------------+ | % | root | | % | siteweb | | localhost | mysql.infoschema | | localhost | mysql.session | | localhost | mysql.sys | | localhost | root | +-----------+------------------+ 6 rows in set (0.00 sec)5、确认配置是否生效
mysql> show global variables like '%lower_case%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | lower_case_file_system | OFF | | lower_case_table_names | 1 | +------------------------+-------+ 2 rows in set (0.00 sec)



