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 应用程序连接到 ***?

Azure 上的 .NET Core 无法连接到 SQL Server 数据库

如何使用 codeigniter 连接到用户 DSN?

如何将 *** 站点连接到 Azure vWAN 上的 vHub?