Debian12安装MySQL

前言

​ 因为最近在做项目,需要测试一下线上环境,所以要使用到MySQL数据库,我尽量和本地数据库版本保持一致,下载的也会是8.0版本。

​ 我的设备是阿里云2核4G的云服务器,系统是DD之后的Debian12,远程连接工具是FinalShell,安装完成后记得配置一下阿里云的安全组,打开3306端口。



配置 MySQL 存储库

访问Debian最新的配置源,复制到下面的配置中。

目前最新的是mysql-apt-config_0.8.30-1_all.deb

要将 MySQL APT 存储库添加到系统,请转到存储库下载页面并使用以下 wget 命令下载最新的发行包:

1
2
sudo apt update   
wget https://dev.mysql.com/get/mysql-apt-config_0.8.30-1_all.deb

image-20240513000543472

下载完成后,以具有 sudo 权限的用户身份安装发行包:

1
sudo dpkg -i mysql-apt-config_0.8.30-1_all.deb

image-20240513001638021

提示需要安装gnupg。

1
sudo apt-get install gnupg

安装后继续执行:

image-20240513001840666

我们点进去,发现可以选择8.0版本

image-20240513002213551

然后选择OK

image-20240513002445159

image-20240513002724887



安装 MySQL

通过运行以下命令更新包列表并安装 MySQL 服务器包:

1
sudo apt install mysql-server

image-20240513003313187

直接报错,没找到这个包。

经过搜索之后,发现需要更新软件包(我只是开始更新了一次)。

1
2
sudo apt update 
sudo apt install mysql-server

吐槽一下,带宽太低了,安装了好长时间。。。

接下来就是设置密码:

image-20240513081610751

image-20240513081626305

按Tab或者小键盘右键(End)可以选中OK,然后密码留空

image-20240513082512768

然后直接Tab,选择OK

image-20240513082606857

接着选择使用强密码加密

image-20240513082726323

安装完成后, MySQL 服务将自动启动,您可以通过键入以下内容来验证它:

1
sudo systemctl status mysql

image-20240513083222950



保护 MySQL

运行该 mysql_secure_installation 命令设置 root 密码并提高 MySQL 安装的安全性:

1
sudo mysql_secure_installation

image-20240513084243290

询问是否要启用密码验证组件。如果你想启用这个组件,可以按下 yY。如果不想启用,可以按下任意其他键。

这里我直接回车。

image-20240513084539811

这里我输入了密码,但是报错了。

提示SET PASSWORD对用户“root”@’localhost“没有意义,因为使用的身份验证方法不会将身份验证数据存储在MySQL服务器中。如果要更改身份验证参数,请考虑改用 ALTER USER。


设置密码

上面的界面可以直接关闭了,打开一个新的终端界面

1
sudo mysql

image-20240513084840471

1
2
3
'%' - 所有情况都能访问
'localhost' - 本机才能访问
'111.222.33.44' - 指定 ip 才能访问

接下来修改密码

1
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by '123456';

image-20240513085251082

输入exit返回终端后,再运行mysql_secure_installation。

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
root@iZf8z2vb82x33szfaz267uZ:~# sudo mysql_secure_installation

Securing the MySQL server deployment.

Enter password for user root:

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: n
Using existing password for root.
Change the password for root ? ((Press y|Y for Yes, any other key for No) : n

... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
- Dropping test database...
Success.

- Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!

修改密码

修改用户密码,记得先登录mysql的root用户

1
2
alter user '用户名'@'%' identified by '密码';
alter user '用户名'@'%' identified with mysql_native_password BY '密码';

image-20240513133133016

image-20240513133213087

image-20240513133718587

image-20240513133812896



操作 MySQL

登录

1
mysql -uroot -p

image-20240513105920061


创建新用户

1
2
3
4
#默认
create user '用户名'@'%' identified by '密码';
#指定mysql_native_password插件
create user '用户名'@'%' identified with mysql_native_password by '密码';

先使用mysql -uroot -p进行登录

1
2
3
create user 'lcf'@'%' identified with mysql_native_password by '123456';

create user 'lyy'@'%' identified by '123456';

image-20240513112248083

image-20240513113249440

image-20240513175117547

我们可以看到lcf和lyy的密码插件不同


授权

1
2
3
4
5
6
7
grant all privileges on database_name.* to 'username'@'%';
-- 'database_name' - 赋予权限的数据库名称
-- 'username' - 用户名
-- 'localhost' - 用户只能在本地访问数据库

# 全部数据库
grant all privileges on *.* to 'username'@'%';

这个命令的效果是将对指定数据库的所有权限授予给特定用户,使该用户能够从任何主机连接并对数据库进行操作。

image-20240513162440184


删除用户

1
2
3
delete from mysql.user where user='用户名';

delete from mysql.user where user='lyy';

image-20240513164559362



配置 MySQL

大小写不敏感

前言

配置这个属性很重要,我这里只介绍安装后再修改配置的方法,在安装后再修改配置(会删除原有的数据和设置),所以需要谨慎使用。

在 MySQL 8 中,数据目录初始化之后,不再允许更改lower_case_table_names = 1的值;

MySQL 基于某些原因,禁止在重新启动 MySQL 服务时将 lower_case_table_names 设置 成不同于初始化 MySQL 服务时设置的 lower_case_table_names 值。

也就是说启动(重启)MySQL 时,lower_case_table_names的值必须与初始化 MySQL 时(安装 MySQL 后的首次启动)的值相同。


查看现有配置

1
show global variables like '%case%';

image-20240513164816151

  • lower_case_file_system:表示当前系统文件是否大小写敏感(ON为不敏感,OFF为敏感),只读参数,无法修改。
  • lower_case_table_names:表示表名是否大小写敏感,可以修改。
  • lower_case_table_names = 0时,mysql会根据表名直接操作,大小写敏感。
  • lower_case_table_names = 1时,mysql会先把表名转为小写,再执行操作。

具体实现

1.停止MySQL

2.删除数据目录,即删除 /var/lib/mysql 目录、

3.在MySQL配置文件( /etc/mysql/mysql.conf.d/mysqld.cnf )中添加 lower_case_table_names=1

4.启动 MySQL(这个时候没有密码了)

1
2
3
4
5
sudo service mysql stop
sudo rm -rf /var/lib/mysql
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
sudo service mysql restart
mysql -uroot -p

image-20240513171216742

image-20240513171230752

然后再查看一下配置

1
show global variables like '%case%';

image-20240513171305254


重新配置

数据库表已经不区分大小写了,接着再配置一下密码,用户即可。

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
# 连接
mysql -uroot -p

#设置root可以远程连接
use mysql;
update user set host = '%' where user = 'root';


mysql> select user, plugin from mysql.user;
+------------------+-----------------------+
| user | plugin |
+------------------+-----------------------+
| root | auth_socket |
| mysql.infoschema | caching_sha2_password |
| mysql.session | caching_sha2_password |
| mysql.sys | caching_sha2_password |
+------------------+-----------------------+


#更新了用户root的插件信息
update user set plugin='mysql_native_password' where user='root';

#修改密码
alter user 'root'@'%' identified with mysql_native_password by '123456';

#更新权限
flush privileges;

image-20240513173853789

输入alter user ‘root‘@’localhost’ identified with mysql_native_password by ‘123456’;

出现了报错,原因是我的user为root,而我的host为%,改localhost为%即可。

image-20240513174805632



参考

Debian直接安装mysql8_debian安装mysql8-CSDN博客

mysql 8改为不区分大小写的2种方法 - 知乎 (zhihu.com)

Debian12安装MySQL8、创建新用户、授权实践及问题解决方案_debian12 安装mysql-CSDN博客

MySQL报错:ERROR 1396 (HY000): Operation ALTER USER failed for root@localhost-CSDN博客