1、备份MySQL数据库

重新初始化mysql。简单说就是重置,“恢复出厂设置”。重置之后,所有的数据都将被清空丢失,所以一定要备份好重要的数据库,就是data目录下面那些数据库文件

2、停止服务

在修改配置之前,请先把 mysql 服务停止。执行下面命令:

systemctl stop mysql.service

3、删除错误日志

为了方便查看 mysql 的错误日志,可以先将 /var/log/mysqld.log 删除。此处路径按照当前配置的路径来,命令如下:

rm /var/log/mysqld.log

4、删除系统数据库与用户数据库

将 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 *

5、创建数据库目录

上面将已存在的数据库目录 /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-keyring

6、配置my.cnf文件

如果需要区分大小写,需要在my.cnf 中添加

 lower_case_table_names

在这里插入图片描述

使用 vim 编辑器编辑 /etc/my.cnf 文件,如下:

[root@localhost lib]# vim /etc/my.cnf

保存配置信息。

7、初始化 MySql

执行如下命令初始化 mysql 数据库:

[root@localhost /]# mysqld --defaults-file=/etc/my.cnf --initialize  --user=mysql --basedir=/var/lib/mysql --datadir=/var/lib/mysql

Tips:注意my.cnf 文件中的路径与初始化命令是否一致,采用my.cnf文件中的路径

8、启动 MySql 服务

systemctl start mysql.service

9、登录 MySql

由于上面执行了 MySql 初始化操作,曾经的密码已经不能用了。MySQL 将在初始化过程中创建临时密码,临时密码存储在 /var/log/mysqlmysqld.log 中。

(1)查找临时密码
使用 cat 和 grep 命令配合查找,命令如下:

cat /var/log/mysql/mysqld.log |grep temp

Tips:如果不确定路径,可以使用find 命令查找mysqld.log 文件
在这里插入图片描述

(2)使用临时密码登录 MySQL

mysql -uroot -ppCg3+El.c#ao

在这里插入图片描述
之后退出mysql

(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;

就可以设置较为简单的密码了。
在这里插入图片描述

10、创建用户与权限分配

(1)默认的 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
在这里插入图片描述
(2)创建完用户之后还需要给用户分配权限

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)

11、MySQL 8.0.18 大小写敏感问题是否生效

如果配置了MySQL 8.0.18 大小写敏感问题的话,可以在此时查看配置是否生效

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)

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐