给 Linux 安装 MySQL 数据库
基于Ubuntu ,逐步示例配置一个 MySQL 数据库
目标1:安装 MySQL
命令:
1 | sudo apt install mysql-server -y |
如果你的 apt 软件源太旧,那可以直接使用官方的配置包:
- 安装 mysql apt 配置包
1 | wget https://dev.mysql.com/get/mysql-apt-config_0.8.17-1_all.deb |
- 更新索引
1 | sudo apt update -y |
- 再次尝试安装
1 | sudo apt install mysql-server -y |
目标2:远程连接到数据库
下面的操作如果遇到了问题别慌,可以先操作 [[#如果遇到问题:|解决连接失败的问题]] 章节的内容
修改 mysql 的配置文件
默认情况 mysql 只会接受来自本地的请求,我们需要去改他的配置文件:
1 | sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf |
找到 bind-address
这一行,默认情况下是绑定到 127.0.0.1
。你可以将其更改为 0.0.0.0
,让 MySQL 监听所有的网络接口,或者将其设置为服务器的外部 IP 地址:
1 | bind-address = 0.0.0.0 |
然后以root
身份登录到 mysql :
1 | mysql -u root -p |
此时我们创建一个新用户执行权限授予操作(root身份容易出问题),
⚠️ 注意替换掉里面的newuser
和newpassword
:
1 | CREATE USER 'newuser'@'%' IDENTIFIED BY 'newpassword'; |
通过 IDE 连接
现在很多 IDE 内置此功能,这能让我们在进行项目开发的时候,很方便的执行 sql 语句,就以 Jetbrains
的 Goland
为例(Intellij IDEA
,vscode
等同理):
点击右侧的数据库按钮添加数据源(没有的话自行去设置里排查):
完事了我们把主机,用户名以及密码填一下。
如果你本身利用了 IDE 的远程开发功能,那么主机可以就填 localhost 即可,否则,请填写服务器的公网 ip;用户名和密码就是刚才设置的:
可以点一下下面蓝色的小字:“测试连接”,来解决可能的潜在报错。
如果一切正常,我们就能进入数据库的查询控制台了:
通过 ssh client 连接(可选):
我这里就只介绍 Linux 的方法,Windows 的话更推荐用上面的 IDE 连接,实在想用终端的话,大概步骤就是去 MySQL 官网下载页面 下载安装,然后配置环境变量后,即可在终端使用。
- 安装
ssh client
:
1 | sudo apt install mysql-client |
- 远程连接:
假设你要连接的 MySQL 服务器的 IP 地址是192.168.1.100
,MySQL 用户名是root
,密码是password
,你可以使用以下命令远程连接到 MySQL:
1 | mysql -h 192.168.1.100 -u root -p |
-h 192.168.1.100
:指定远程 MySQL 服务器的 IP 地址。-u root
:指定 MySQL 用户名(例如root
)。-p
:提示输入密码。
- 其他选项:
- 指定端口:
如果 MySQL 服务器使用了非默认端口(默认是 3306),可以通过-P
选项指定端口(假设你用了3307):
1 | mysql -h 192.168.1.100 -P 3307 -u root -p |
- 使用 ssl:
使用以下命令来指定证书文件
1 | mysql -h 192.168.1.100 -u root -p --ssl-ca=/path/to/ca-cert.pem --ssl-cert=/path/to/client-cert.pem --ssl-key=/path/to/client-key.pem |
如果遇到问题:
mysql 是否正常工作?
MySQL 使用的是 3306
端口,要远程连接,先保证这个端口被放行。
使用如下命令查看 mysql 是否正常工作:
1 | sudo systemctl status mysql |
如果出现端口被占用的情况,可以查看当前端口使用情况,检查是否出现 3306 端口:
1 | ss -ntl |
或者:
1 | sudo lsof -i -n -P | grep LISTEN |
解决掉 3306 的占用后,可以使用:
1 | sudo systemctl restart mysql |
重启一下 MySQL
确认端口正常工作以后,还要兼顾防火墙策略。
是不是防火墙是否拦截了?
系统的内部防火墙:
确保防火墙没有阻止 3306 端口。主要检查 iptables
,ufw
,SELinux
或 firewalld
来检查防火墙规则。
- 对于
iptables
:
1 | sudo iptables -L -n | grep 3306 |
如果发现 3306 端口被阻止,可以使用以下命令开放该端口:
1 | sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT |
- 对于
ufw
:
暂时禁用 ufw 来排查问题:
1 | sudo ufw disable |
- 对于
firewalld
(如果你使用的是firewalld
):
查看防火墙规则:
1 | sudo firewall-cmd --list-all |
如果没有看到 3306 端口,使用以下命令开放它:
1 | sudo firewall-cmd --add-port=3306/tcp --permanent sudo firewall-cmd --reload |
- 对于
SELinux
:
检查 SELinux 的状态:
1 | sestatus |
临时将 SELinux 设置为宽松模式,来排除来自于此的影响:
1 | sudo setenforce 0 |
如果这样解决了问题,你可以考虑调整 SELinux 策略来允许 MySQL 访问该端口。
你服务器提供商设置的外部防火墙:
像阿里云,腾讯云,ucloud这些服务器提供商,默认也会设置外部防火墙拦截端口(比如 ucloud ,就是基于 iptables 写了一些外部防火墙命令。
此时,你需要去服务器的网页控制台进行配置,以 ucloud 为例:
红圈可以看到 ucloud 也提醒你了,不要去用内部的防火墙。我这里为了测试把外部防火墙端口全开放了,等服务配好以后再把安全策略改回来
目标3:执行一条 sql 语句:
这里我们执行一条创建数据库的语句(比如我创建一个名为 MyPapers
的数据库)
1 | CREATE DATABASE MyPapers; |
创建成功后,还可以在 IDE 的这个位置选择要使用的数据库,这相当于 sql 里的 USE DatabaseName
执行成功,大功告成。
- 标题: 给 Linux 安装 MySQL 数据库
- 作者: 三葉Leaves
- 创建于 : 2024-12-04 00:00:00
- 更新于 : 2025-01-05 18:48:33
- 链接: https://kiss1314.top/b9447796f9ad/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。