从Web服务器连接到远程MySQL数据库服务器时出错

时间:2020-02-18 19:42:28

标签: php mysql amazon-ec2 ubuntu-16.04

我一直在努力从Ubuntu 16.04版Web服务器进行连接 (在1个AWS实例上运行,使用PHP 7.0.33和Apache 2.7.18) 使用在另一个AWS实例(运行Ubuntu版本16.04)上运行的MySQL 8.0.19与数据库服务器进行通信。

我设置数据库服务器并对其进行如下配置:

我编辑文件/etc/mysql/mysql.conf.d/mysqld.cnf

我在[mysqld]部分中添加了以下内容 [mysqld]

> :k '['(Int, Int), '(Int, Int)]
<interactive>:1:1: error: parse error on input '
> :k '[ '(Int, Int), '(Int, Int)]
'[ '(Int, Int), '(Int, Int)] :: [(*, *)]

我保存了文件,并且出现了控制台问题:

'['

然后我用以下命令重新启动mysql

require_secure_transport = on

我已经在此数据库服务器上创建了一个数据库和表。

我还按如下方式在此数据库服务器上创建了一个远程用户(IP地址和用户是虚构的):

sudo mysql_ssl_rsa_setup --uid=mysql

我已成功测试了从Web服务器客户端实例到该数据库服务器的连接性:

sudo systemctl restart mysql

但是,当我使用Web服务器客户端实例中的以下PHP代码段时 打开与数据库服务器的连接,出现错误(见下文):

CREATE USER 'Master'@'1.26.4.44' IDENTIFIED BY 'admin';

GRANT ALL PRIVILEGES ON sample_data_base.* TO ' Master'@'1.26.4.44';

FLUSH PRIVILEGES;

Exit

错误是:

mysql -u Master -p   -h '1.26.4.44'

就像供参考,当我注释掉数据库服务器中的行时, 文件/etc/mysql/mysql.conf.d/mysqld.cnf

// set up for  remote DB access     
  $dbhost  = '1.26.4.44';    // Unlikely to require changing
  $dbname  = 'sample_data_base';   // Modify these...
  $dbuser  = 'Master';   // ...variables according
  $dbpass  = "admin";   // ...to your installation
  $appname = "test_app"; // ...and preference

$dbconnection = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);

   if ( !$dbconnection) 
  {
      echo "connection failed   ";
      die('Connect Error (' . mysqli_connect_errno() . ') '
        . mysqli_connect_error());
  }

与远程数据库服务器的php代码连接没有问题。

在Web服务器客户端上我想从php代码连接到远程数据库服务器上缺少什么?

1 个答案:

答案 0 :(得分:0)

您需要在数据库设置中进行其他配置:

$db = mysqli_init();
mysqli_options ($db, MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true);

$db->ssl_set(
    '/etc/mysql/ssl/client-key.pem',
    '/etc/mysql/ssl/client-cert.pem',
    '/etc/mysql/ssl/ca-cert.pem',
    NULL,
    NULL);

$link = mysqli_real_connect(
        $db, 'ip', 'user', 'password', 'db', 3306, NULL, MYSQLI_CLIENT_SSL);

if (!$link)
{
    die ('Connect error (' . mysqli_connect_errno() . '): ' . mysqli_connect_error() . "\n");
} else {
    // your queries should be here
     $db->close();
}

希望这会有所帮助。