安装教程如下
https://www.modb.pro/db/1787599262368468992
踩坑一:tcp连接mysql没问题,socket连接mysql失败
全局搜索 mysql.sock
sudo find / -type s -name "*mysql*.sock" 2>/dev/null
richiezhang@computer:/$ sudo find / -type s -name "*mysql*.sock" 2>/dev/null
/tmp/systemd-private-8e431245bb61421e8779371ae6fd1448-mysql.service-HljfC6/tmp/mysql.sock
/tmp/systemd-private-8e431245bb61421e8779371ae6fd1448-mysql.service-HljfC6/tmp/mysqlx.sock
这是 systemd 的私有临时目录(PrivateTmp)机制导致的,常见于 Ubuntu/Debian 等使用 systemd 的系统。
从 systemd 235+ 版本开始,许多服务(包括 mysql.service)默认启用了:
PrivateTmp=true
这意味着:
- 服务的
/tmp目录是隔离的,实际映射到/tmp/systemd-private-<hash>-mysql.service-<random>/tmp/ - 宿主机直接访问
/tmp/mysql.sock是找不到的 - 但 MySQL 服务内部看到的 socket 路径仍是
/tmp/mysql.sock
所以 SHOW VARIABLES LIKE 'socket'; 返回 /tmp/mysql.sock,但你在宿主机的 /tmp 下看不到它。
解决方案,/etc/systemd/system/mysql.service 中 PrivateTmp=false
[Unit]
Description=MySQL Server
After=network.target
[Service]
Type=notify
User=mysql
Group=mysql
ExecStart=/usr/local/mysql-8.4.7/bin/mysqld --defaults-file=/etc/my.cnf
Restart=always
RestartSec=5
TimeoutSec=300
StandardOutput=null
StandardError=journal
LimitNOFILE=65536
# 安全加固(可选)
PrivateTmp=false
ProtectHome=true
NoNewPrivileges=true
[Install]
WantedBy=multi-user.targe
踩坑二:mysql重复启动,报错找不到pid文件
原因是因为ubuntu每次开机会自动删除/var/run/mysqld/目录
解决方案,更改 /etc/my.cnf
[mysqld]
datadir = /usr/local/mysql-8.4.7/data
socket = /tmp/mysql.sock
log-error = /var/log/mysql/mysqld.log
#重启后/var/run/mysqld/目录会消失,所以注释
#pid-file = /var/run/mysqld/mysqld.pid
basedir = /usr/local/mysql-8.4.7