Debian 10 和 11 安装 MySQL 5.7

前言

本文主要介绍 Debian 如何安装 MySQL 5.7 数据库,适用于 Debian 10 、Debian 11。

环境说明

软件版本
Debian11
MySQL5.7.42

准备工作

  • 更新系统软件
1
sudo apt-get update
  • 删除已安装的 MySQL
1
2
3
4
5
# 查看已安装的MySQL组件
sudo dpkg-query -l | grep mysql

# 卸载已经安装的MySQL组件(保留配置文件,且不会删除依赖软件包)
sudo apt-get remove xxxx

MySQL 服务安装

下载安装包

MySQL 官网 下载 5.7 版本的安装包,例如 mysql-server_5.7.42-1debian10_amd64.deb-bundle.tar点击 查看图解说明。

1
2
3
4
5
6
7
8
# 下载文件
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-server_5.7.42-1debian10_amd64.deb-bundle.tar

# 解压文件
tar -xvf mysql-server_5.7.42-1debian10_amd64.deb-bundle.tar

# 删除文件
rm -rf mysql-server_5.7.42-1debian10_amd64.deb-bundle.tar

兼容性说明

值得一提的是,MySQL 官网 5.7 版本只有 Debian 10 的,没有 Debian 11,但 Debian 11 可以直接使用 Debian 10 的安装包。

依赖软件安装

1
sudo apt install psmisc libaio1 libnuma1 libatomic1 libmecab2 perl

MySQL 安装

特别注意

必须按照以下顺序依次安装各个 MySQL 软件包。

安装基础组件

1
2
3
4
5
6
7
sudo dpkg -i mysql-common_5.7.42-1debian10_amd64.deb

sudo dpkg -i libmysqlclient20_5.7.42-1debian10_amd64.deb

sudo dpkg -i libmysqlclient-dev_5.7.42-1debian10_amd64.deb

sudo dpkg -i libmysqld-dev_5.7.42-1debian10_amd64.deb

安装客户端

1
2
3
sudo dpkg -i mysql-community-client_5.7.42-1debian10_amd64.deb

sudo dpkg -i mysql-client_5.7.42-1debian10_amd64.deb

安装服务端

1
2
3
4
# 安装服务端,期间会提示输入密码,并确认密码
sudo dpkg -i mysql-community-server_5.7.42-1debian10_amd64.deb

sudo dpkg -i mysql-server_5.7.42-1debian10_amd64.deb

提示

如果在安装 MySQL 服务端的时候,提示缺少相关的依赖软件,那么可以执行 sudo apt --fix-broken install 命令修正安装过程。

MySQL 服务管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 启动服务
sudo systemctl start mysql

# 开机自启动
sudo systemctl enable mysql

# 查看状态
sudo systemctl status mysql

# 关闭服务
sudo systemctl stop mysql

# 重启服务
sudo systemctl restart mysql

终端执行 systemctl status mysql 命令后,若输出以下的日志信息,则说明 MySQL 服务器正常运行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2023-08-12 15:52:46 UTC; 33min ago
Process: 597 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
Process: 649 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid (code=exited, status=0/SUCCESS)
Main PID: 651 (mysqld)
Tasks: 27 (limit: 19018)
Memory: 219.9M
CPU: 1.639s
CGroup: /system.slice/mysql.service
└─651 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid

Aug 12 15:52:45 uatoption01 systemd[1]: Starting MySQL Community Server...
Aug 12 15:52:46 uatoption01 systemd[1]: Started MySQL Community Server.

终端执行 mysql -h localhost -u root -p 命令,并输入密码后,若能登录 MySQL 数据库,则说明客户端成功连接 MySQL 服务器。

MySQL 性能优化

更改最大打开文件描述符数

提示

关于更改最大打开文件描述符数的详细教程,可以看 这里

系统最大打开文件描述符数

  • 查看限制
1
ulimit -n
  • 更改配置
1
2
3
4
5
6
7
8
9
10
11
12
13
# 第一步
sudo vim /etc/security/limits.conf

* soft nofile 1048576
* hard nofile 1048576

# 第二步
sudo vim /etc/sysctl.conf

fs.file-max = 1048576

# 第三步(重启系统)
sudo reboot
  • 验证生效
1
2
3
ulimit -n

sudo sysctl fs.file-max

MySQL 最大打开文件描述符数

  • 编辑 MySQL 系统服务的配置文件,更改 LimitNOFILE 的参数值
1
2
3
sudo vim /lib/systemd/system/mysql.service

LimitNOFILE=1048576
  • 重载系统服务的配置文件
1
sudo systemctl daemon-reload
  • 重启 MySQL 服务
1
sudo systemctl restart mysql
  • 验证生效,在输出结果中查看 Max open files 的显示值
1
sudo cat /proc/`pidof mysqld`/limits

常见问题

无法远程连接 MySQL

在默认情况下,MySQL 是不支持远程连接的,可以按照以下步骤实现远程连接。

第一步,配置 MySQL 支持远程连接

通过 sudo netstat -anp|grep 3306 命令查看 MySQL 占用的端口,可以得到以下信息

1
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      658/mysqld

编辑 MySQL 的配置文件,将 bind-address 的配置内容注释掉,然后重启 MySQL 服务

1
2
3
4
5
6
7
# 编辑配置文件
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

# bind-address = 127.0.0.1

# 重启服务
sudo systemctl restart mysql

MySQL 服务重启后,再次执行 sudo netstat -anp|grep 3306 命令,可以得到以下信息

1
tcp6       0      0 :::3306                 :::*                    LISTEN      658/mysqld

第二步,创建新的用户,并授权用户远程访问特定的数据库

1
2
3
4
5
CREATE USER 'clay'@'%' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON my_db.* TO 'clay'@'%';

FLUSH PRIVILEGES;

授权 Root 用户远程登录

  1. 若希望授权 root 用户远程访问所有数据库(慎重考虑),可以执行以下 MySQL 命令。
  2. 值得一提的是,考虑到数据库安全问题,不建议授予 root 远程登录的权限,这可以降低数据库被攻击的风险。
1
2
3
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

FLUSH PRIVILEGES;

特别注意

按照上述步骤进行配置后,若 MySQL 依旧无法实现远程访问,那么请检查系统的防火墙是否开放了 3306 端口。

MySQL 配置文件的位置

MySQL 安装完成后,各个配置文件的位置如下:

1
2
3
4
5
PID 文件: /var/run/mysqld/mysqld.pid
配置文件: /etc/mysql/mysql.conf.d/mysqld.cnf
数据目录: /var/lib/mysql
日志文件: /var/log/mysql/error.log
服务启动脚本: /lib/systemd/system/mysql.service

参考资料