Ubuntu 20.04源码安装MySQL后如何启动并正常使用?
问题核心原因
两个报错本质是源码安装MySQL不会自动完成服务注册、目录初始化、环境配置流程:
Failed to start mysqld.service: Unit mysqld.service not found:系统中没有注册mysqld对应的systemd服务单元Can't connect to local MySQL server through socket:MySQL服务本身未成功启动,自然不会生成socket监听文件/usr/local/mysql/bin/mysql --version能正常输出版本,说明编译的二进制程序本身没有问题,按下面步骤修复即可。
修复步骤
- 提前创建依赖目录并配置权限
# 创建mysql运行系统用户(已存在可跳过) useradd -r -s /sbin/nologin mysql # 创建数据存储、socket运行、日志存储目录 mkdir -p /usr/local/mysql/data mkdir -p /var/run/mysqld mkdir -p /var/log/mysql # 给所有MySQL相关目录分配正确的属主权限 chown -R mysql:mysql /usr/local/mysql chown -R mysql:mysql /var/run/mysqld chown -R mysql:mysql /var/log/mysql
- 初始化MySQL数据目录
源码安装完成后必须先初始化数据目录才能启动服务,直接执行:
cd /usr/local/mysql/bin ./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
初始化完成后终端会输出root用户的临时初始密码,务必保存,第一次登录需要用到。
- 先手动启动验证程序可用性
先跳过systemd直接启动服务,确认二进制程序运行正常,避免后续服务配置走弯路:
/usr/local/mysql/bin/mysqld_safe --user=mysql &
等待3~5秒后执行ps aux | grep mysqld,如果存在mysqld进程,再执行/usr/local/mysql/bin/mysql -uroot -p输入之前保存的临时密码,能成功登录即说明核心程序运行正常。
- 配置systemd服务实现系统管理
手动创建systemd服务单元文件/usr/lib/systemd/system/mysqld.service,写入以下内容:
[Unit] Description=MySQL 8.0 Server After=network.target [Service] Type=forking User=mysql Group=mysql PIDFile=/var/run/mysqld/mysqld.pid ExecStart=/usr/local/mysql/bin/mysqld_safe --user=mysql ExecStop=/usr/local/mysql/bin/mysqladmin shutdown Restart=on-failure LimitNOFILE=65535 [Install] WantedBy=multi-user.target
保存后执行systemctl daemon-reload重载系统服务配置,之后先杀掉之前手动启动的mysqld进程,就可以用systemctl正常管理服务:
pkill mysqld systemctl start mysqld # 配置开机自启(按需执行) systemctl enable mysqld
- 全局命令与配置文件校验
- 配置全局命令软链接,避免直接执行
mysql等命令时提示找不到:
- 配置全局命令软链接,避免直接执行
ln -sf /usr/local/mysql/bin/mysql /usr/bin/mysql ln -sf /usr/local/mysql/bin/mysqladmin /usr/bin/mysqladmin
- 检查MySQL选项文件(默认路径
/etc/my.cnf),确认以下路径配置和实际创建的目录完全一致,[client]段必须和[mysqld]段配置相同的socket路径,否则客户端连接会报错:
[mysqld] basedir=/usr/local/mysql datadir=/usr/local/mysql/data socket=/var/run/mysqld/mysqld.sock log-error=/var/log/mysql/error.log pid-file=/var/run/mysqld/mysqld.pid [client] socket=/var/run/mysqld/mysqld.sock
如果执行以上步骤后服务仍无法启动,直接查看错误日志
/var/log/mysql/error.log,所有启动失败的具体原因(比如参数非法、端口占用、权限不足)都会在日志中明确标注,对照日志调整即可。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

