Azure 上的 CodeIgniter 连接到 Windows 虚拟机 MySql
Posted
技术标签:
【中文标题】Azure 上的 CodeIgniter 连接到 Windows 虚拟机 MySql【英文标题】:CodeIgniter On Azure Connection to Windows Virtual Machine MySql 【发布时间】:2015-10-19 21:36:08 【问题描述】:我正在开发托管在 Azure 上的 CodeIgniter Web 项目,我决定按照本教程在 Azure 中运行 Windows Server 2012 R2 的虚拟机上使用 mysql,因为它似乎是最好的解决方案。 https://azure.microsoft.com/en-gb/documentation/articles/virtual-machines-mysql-windows-server-2008r2/
我已经完成所有设置,还设法将托管在我的 Web 项目中的 phpmyadmin 连接到虚拟机,因此它确认一切正常。
但是,Codeigniter 每次都会继续给出这个错误
Unable to connect to your database server using the provided settings.
Filename: D:\home\site\wwwroot\system\database\DB_driver.php
Line Number: 124
我决定使用以下代码在我的安装根目录中创建一个测试 php 文件并成功连接。
<?php
// Create connection : Update the hostname , DB username , DB password
//, database name.
$con=mysqli_connect("host","user","password",
"database");
// Check connection
if (mysqli_connect_errno())
echo "Failed to connect to MySQL: " . mysqli_connect_errno();
else
echo "Connection with MySQL database was successful";
?>
请注意数值已更改
我进入 system/database/drivers/mysql/mysql_driver.php 并删除了“@”符号以显示 db_pconnect() 的确切调试错误,我得到了
A PHP Error was encountered
Severity: Warning
Message: mysql_pconnect(): Access denied for user 'user'@'191.236.147.142' (using password: YES)
Filename: mysql/mysql_driver.php
Line Number: 91
但是这些相同的细节在我上面提到的一个单独的 php 脚本上工作。这是我的 codeIgniter 数据库配置
$active_group = 'default';
$active_record = TRUE;
$db['default']['hostname'] = 'myvmmysql.cloudapp.net';
$db['default']['username'] = 'user';
$db['default']['password'] = 'password';
$db['default']['database'] = 'database';
$db['default']['port'] = 3306;
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;
这是我到目前为止所做的总结:
-
我已经为 $db['default']['dbdriver'] 尝试了 mysql、mysqli 和 sqlsrv
我也在test.php文件中尝试了mysql,它仍然连接到数据库
我已授予虚拟机中所有域对端口的公共访问权限
我已将所有权限授予来自所有域的数据库用户
除了在 codeigniter 中之外,Connection 基本上适用于任何地方。
我也尝试过更改 $db['default']['pconnect'] = FALSE;不是
在职的
注意:我已经完成了将数据库与 codeigniter 一起使用所涉及的必要事项......不仅如此
谢谢
【问题讨论】:
在数据库配置中尝试使用 $db['default']['pconnect'] = FALSE; @Ashish 对不起,我忘了提...我也做过...也不行 您在本期中使用了哪个版本的 Codeigniter?您选择哪台服务器来托管您的 codeigniter 应用程序、Web 应用程序或 VM? @GaryLiu-MSFT 我将 codeigniter 作为 web 应用程序托管在 azure 上...及其 codeigniter 版本 2.1.4 【参考方案1】:我尝试使用 2.2.3 和 3.0.0 版本的 codeiginter 重现您的问题,但是失败了。我可以成功连接到VM中的MySQL。
请尝试按照以下步骤操作:
1、在Azure上创建VM,安装和配置MySQL。请参考教程:https://azure.microsoft.com/en-gb/documentation/articles/virtual-machines-mysql-windows-server-2008r2/。
2、在 Azure 上创建一个 Web 应用并从 git 设置部署。
3、下载condeiginter包到本地,修改数据库连接信息
\application\config\database.php
$db['default']['hostname'] = '<your vm name>.cloudapp.net';
$db['default']['username'] = '<database username>';
$db['default']['password'] = '<password>';
$db['default']['database'] = '<database name>';
4,在本地测试MySQL连接,并部署到上面由git创建的Web应用程序。浏览 Web 应用程序。
它对我有用。
此外,当我们向数据库用户输入无密码时,我们可能会遇到此问题。所以请在 application\config\database.php
中检查您的数据库密码。
顺便说一句,您可以使用本地的工作台连接到 MySQL 服务器,以检查此错误是否存在。
【讨论】:
Liu 感谢您的帮助...我会尝试将我的 codeigniter 版本更新到 3.0,看看是否仍然存在。 我已将代码点火器更新为 3.0,但它仍然无法正常工作......现在我得到严重性:警告消息:mysqli::real_connect(): (HY000/1045): 拒绝访问用户'root'@'191.236.147.142'(使用密码:YES) 文件名:mysqli/mysqli_driver.php 行号:135 实际上,默认情况下,mysql管理员帐户“root”不允许从其他IP地址访问,除了localhost。这样我们就可以创建一个新的mysql用户账号来访问mysql了。 Liu 谢谢..我重新创建了虚拟机,并注意到没有使用“root”并且一切都开始连接(Phpmyadmin,Workbench)但我的主要安装没有工作......所以我复制了配置/数据库从 CI 3.0 安装完成升级后,它工作......非常感谢!【参考方案2】:首先请记住,您无需在文件中使用连接数据库代码(mysql_connect()
)。一切都将在 Codeigniter 中自行完成
所以你不需要使用这个代码(下)
<?php
// Create connection : Update the hostname , DB username , DB password
//, database name.
$con=mysqli_connect("host","user","password",
"database");
// Check connection
if (mysqli_connect_errno())
echo "Failed to connect to MySQL: " . mysqli_connect_errno();
else
echo "Connection with MySQL database was successful";
?>
只要去config/autoload.php
$autoload['libraries'] = array('database')
这将连接您的数据库。
在config/database.php
$db['default']['hostname'] = '';//host name
$db['default']['username'] = '';//username
$db['default']['password'] = '';//password
$db['default']['database'] = '';//database name
确保文本(Caps/Nums)
【讨论】:
我已经完成了所有这些 - 在 codeigniter 中自动加载库 - 输入我的详细信息 - 这些是必需品。我在本地有一个工作开发实例。我需要做的就是成功地将托管在 azure 上的那个连接到运行 MySql 的 VM。测试代码是在 codeIgniter 外部编写的,只是为了确认主机是否可以访问 VM。谢谢以上是关于Azure 上的 CodeIgniter 连接到 Windows 虚拟机 MySql的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Android 连接到 Azure 上的 MongoDB?
azure ubuntu 16.04 VM 无法连接到 azure 上的数据库
从 Windows Azure 上的 .NET 应用程序连接到 ***?