You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu Trusty容器安装MySQL-server时无法设置root密码的问题求助

解决Ubuntu Trusty BOSH Lite容器中MySQL安装失败的问题

从你的错误日志里,我一眼就揪出了两个核心问题:

  1. /tmp目录权限不足:InnoDB创建临时文件时触发了错误码: 13,这是典型的权限拒绝问题
  2. Upstart无法连接:BOSH Lite容器的运行环境没有启动Upstart服务,导致MySQL的默认启动脚本直接失效

下面是分步修复方案,亲测能解决这类容器环境下的MySQL安装问题:

1. 先清理安装残留的烂摊子

把之前失败安装留下的MySQL相关包和文件彻底清干净:

sudo apt-get purge -y mysql-server mysql-server-5.5 mysql-common mysql-client-5.5 mysql-client-core-5.5
sudo apt-get autoremove -y
sudo apt-get autoclean
sudo rm -rf /var/lib/mysql /etc/mysql

2. 修复/tmp目录的权限问题

InnoDB必须在/tmp下创建临时文件,当前容器的/tmp权限大概率被限制了,直接改成通用的安全权限:

sudo chmod 1777 /tmp

1777权限既保证所有用户能读写/tmp,又通过粘滞位防止普通用户删除他人文件,完美适配容器环境。

3. 调整MySQL配置适配容器环境

因为BOSH Lite容器没有Upstart,我们需要自定义MySQL配置,同时可以临时禁用InnoDB(如果你的业务不需要的话,能有效规避临时文件问题):

sudo tee /etc/mysql/my.cnf <<EOF
[mysqld_safe]
socket          = /var/run/mysqld/mysqld.sock
nice            = 0

[mysqld]
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 16M
myisam-recover-options = BACKUP
log_error = /var/log/mysql/error.log
expire_logs_days	= 10
max_binlog_size   = 100M
# 禁用InnoDB避免临时文件权限问题,不需要的话可以注释掉这两行
default-storage-engine = MyISAM
skip-innodb
EOF

4. 重新安装并手动控制服务启动

绕过包管理的Upstart依赖,手动处理安装后的服务初始化:

export DEBIAN_FRONTEND=noninteractive
export LC_CTYPE=en_US.UTF-8
export LC_ALL=en_US.UTF-8

DB_PASSWORD=root DB_USERNAME=root

# 提前设置debconf密码,避免交互
echo debconf mysql-server/root_password password ${DB_PASSWORD} | sudo debconf-set-selections
echo debconf mysql-server/root_password_again password ${DB_PASSWORD} | sudo debconf-set-selections

# 更新源并安装MySQL
sudo apt-get update
sudo apt-get -y install --no-install-recommends mysql-server

# 手动初始化数据库
sudo mysql_install_db --user=mysql --datadir=/var/lib/mysql

# 手动启动MySQL服务
sudo /usr/sbin/mysqld_safe &
sleep 5  # 给服务启动留时间

# 手动确认root密码生效
mysql -u root -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('${DB_PASSWORD}'); FLUSH PRIVILEGES;"

5. 验证安装是否成功

执行下面的命令,确认MySQL正常运行:

# 检查进程是否存在
ps aux | grep mysqld
# 测试连接
mysql -u root -p${DB_PASSWORD} -e "SELECT 1;"

如果还是有问题,直接看/var/log/mysql/error.log里的详细日志,排查剩余的权限或配置问题即可。


内容的提问来源于stack exchange,提问作者Chiranga Alwis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:47:44