在DigitalOcean使用备份创建新Droplet后出现数据库问题
解决CodeIgniter 2.1.3中MySQL连接权限错误的方案
1. 核对CodeIgniter数据库配置文件
打开application/config/database.php,逐一检查核心配置项:
$db['default']['hostname']: 确认值为localhost或127.0.0.1(MySQL对两者权限规则不同:localhost用socket连接,127.0.0.1用TCP/IP连接)$db['default']['username']: 确保是root,无多余空格或拼写错误$db['default']['password']: 核对密码是否准确,注意大小写、特殊字符,不要额外添加引号(除非密码本身包含引号)$db['default']['database']: 确认数据库名称拼写正确,且该数据库已在MySQL中创建
示例正确配置片段:
$db['default']['hostname'] = 'localhost'; $db['default']['username'] = 'root'; $db['default']['password'] = 'your_real_password'; $db['default']['database'] = 'target_db_name'; $db['default']['dbdriver'] = 'mysql';
2. 直接测试MySQL root用户权限
在服务器终端执行命令,验证root用户的连接能力:
mysql -u root -p
输入密码后若能成功登录,说明MySQL本身权限正常;若登录失败,使用超级权限账号登录MySQL后执行以下SQL重置权限:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'new_password' WITH GRANT OPTION; FLUSH PRIVILEGES;
如果localhost登录失败,尝试用127.0.0.1测试:
mysql -u root -p -h 127.0.0.1
若此命令能成功登录,需将CodeIgniter配置中的hostname改为127.0.0.1。
3. 配置MySQL Socket路径(针对localhost连接)
如果使用localhost作为主机名,需确认CodeIgniter的socket配置与MySQL一致:
- 打开
my.cnf(Linux)或my.ini(Windows),找到socket配置,例如:
socket = /var/run/mysqld/mysqld.sock
- 在
database.php中添加或修改对应项:
$db['default']['socket'] = '/var/run/mysqld/mysqld.sock';
4. 检查Apache/PHP运行用户权限
Linux环境下,Apache通常以www-data或apache用户运行,需确保该用户能访问MySQL的socket文件:
chmod 755 /var/run/mysqld/ chown mysql:mysql /var/run/mysqld/mysqld.sock
同时,通过phpinfo()查看PHP的mysql.default_socket或mysqli.default_socket配置,确认其与MySQL的socket路径一致。
5. 排查配置覆盖情况
检查是否存在其他配置覆盖数据库参数:
application/config/config.php中的相关配置- 自定义配置文件或环境变量
.htaccess中的重写规则是否影响了配置加载
内容的提问来源于stack exchange,提问作者phpforari
相关产品推荐
相关产品推荐

