MacBook Pro M2环境下Vagrant配置MySQL失败的修复方案
解决Vagrant Ubuntu环境中MySQL初始化脚本的问题
错误原因分析
- SQL语法不兼容:MySQL 8.0及以上版本已取消
GRANT语句中附带IDENTIFIED BY创建用户的语法,必须先单独创建用户再执行授权操作。 - root登录认证问题:Ubuntu系统默认安装的MySQL,root用户采用socket认证而非密码认证,直接用
-p参数带密码登录会被拒绝。 - 文件权限不足:修改
/etc/mysql/mysql.conf.d/mysqld.cnf需要管理员权限,原脚本中部分操作未加sudo导致权限报错。
修改后的mysql.sh脚本
#!/bin/bash # MYSQL_VERSION $1 # RT_PASSWORD $2 # DB_USERNAME $3 # DB_PASSWORD $4 # DB_NAME $5 # DB_NAME_TEST $6 # Install MySQL apt-get update apt-get -y upgrade debconf-set-selections <<< "mysql-server mysql-server/root_password password $2" debconf-set-selections <<< "mysql-server mysql-server/root_password_again password $2" apt-get -y install mysql-server # 切换root用户认证方式为密码认证,解决后续登录问题 sudo mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '$2';" sudo mysql -e "FLUSH PRIVILEGES;" # 创建数据库并授权:先创建用户(如果不存在),再分配权限 sudo mysql -uroot -p$2 -e "CREATE DATABASE IF NOT EXISTS $5;" sudo mysql -uroot -p$2 -e "CREATE USER IF NOT EXISTS '$3'@'%' IDENTIFIED BY '$4';" sudo mysql -uroot -p$2 -e "GRANT ALL PRIVILEGES ON $5.* TO '$3'@'%';" sudo mysql -uroot -p$2 -e "CREATE DATABASE IF NOT EXISTS $6;" sudo mysql -uroot -p$2 -e "GRANT ALL PRIVILEGES ON $6.* TO '$3'@'%';" sudo mysql -uroot -p$2 -e "FLUSH PRIVILEGES;" # 修改MySQL配置文件,添加sudo确保权限 sudo sed -i "s/.*bind-address.*/bind-address = 0.0.0.0/" /etc/mysql/mysql.conf.d/mysqld.cnf sudo grep -q "^sql_mode" /etc/mysql/mysql.conf.d/mysqld.cnf || sudo echo "sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" >> /etc/mysql/mysql.conf.d/mysqld.cnf sudo service mysql restart
关键修改说明
- 拆分用户创建与授权:将原
GRANT语句拆分为CREATE USER和GRANT两步,适配MySQL 8.0+的语法规范。 - 调整root认证方式:通过
ALTER USER语句将root用户的认证方式改为mysql_native_password,确保可以用密码正常登录。 - 补全sudo权限:所有修改系统文件、执行MySQL管理命令的操作都添加
sudo,避免权限不足的问题。 - 简化命令结构:移除冗余的命令变量,直接在执行时拼接参数,减少变量展开可能带来的意外问题。
内容的提问来源于stack exchange,提问作者Pedro
相关产品推荐
相关产品推荐

