数据库常见问题

为了有效排查和解决在使用云虚拟主机数据库时遇到的功能问题(例如支持哪些数据库、是否支持开启event_scheduler组件)和其他操作问题(例如,如何扩大数据库空间、数据库导入失败问题等)。本文为您汇总了使用云虚拟主机数据库时遇到的一些常见问题。

云虚拟主机支持哪些数据库?

不同操作系统的云虚拟主机支持不同类型的数据库,如下所示:

  • Linux操作系统云虚拟主机支持MySQL和SQLite数据库。

  • Windows操作系统云虚拟主机支持SQL Server和Access数据库。

更多信息,请参见云虚拟主机支持的数据库版本

MySQL数据库是否支持开启event_scheduler?

云虚拟主机的MySQL数据库默认关闭event_scheduler参数,且不支持手动开启该参数。

说明

event_scheduler是MySQL中一个类似定时器的组件,通过调用该组件,您可以在指定的时间点执行一条SQL语句或一个语句块,也可以用于在固定间隔重复执行SQL语句。

通过以下操作,您可以看到event_scheduler参数为关闭(OFF)状态:

  1. 登录MySQL数据库。

    具体操作,请参见通过DMS Web版本登录数据库

  2. 在顶部菜单栏,选择SQL窗口

  3. SQL窗口编辑区域,输入show variables like '%sche%';,然后单击执行(F8)

    命令执行成功后,在结果集1页签下,您可以查询到event_scheduler的状态为OFF

    SQL窗口

MySQL函数与MySQLi函数有什么区别?

PHP可以通过MySQL和MySQLi两种函数操作MySQL数据库,函数的具体说明和示例代码如下所示:

  • MySQL函数

    • 在PHP 5.0之前,一般使用PHP的MySQL函数操作MySQL数据库,属于面向过程的方式。例如,函数mysql_query()

    • MySQL是非持久连接函数,每次连接都会打开一个新的连接进程。

    • MySQL函数语法:以query语句为例,使用mysql_query(SQL语句,资源标识)时,资源标识是可选参数,默认值是上次打开的连接或资源。

    • 以使用MySQL函数连接数据库、并从数据库中获取指定字段的值为例,MySQL示例代码如下所示:

      $conn = mysql_connect('localhost', 'user', 'password');  //连接mysql数据库  
      mysql_select_db('data_base');                            //选择数据库
      $result = mysql_query('selectfrom data_base');           //第二个可选参数,指定打开的连接  
      $row = mysql_fetch_row( $result ) )                      //只取一行数据  
      echo $row[0];                                            //输出第一个字段的值 
  • MySQLi函数

    • 在PHP 5.0之后,新增了MySQLi函数,它是MySQL函数的增强版,比MySQL函数更加稳定、高效和安全,属于面向对象的方式。例如,函数mysqli_query()

      说明

      MySQLi不仅封装了数据库操作过程中的常用方法,还封装了事务等一些高级操作。

    • MySQLi是永久连接函数。即使您多次运行MySQLi函数连接服务器,也只会使用同一连接进程,可有效减少服务器的资源浪费。

    • MySQLi函数语法:以query语句为例,使用mysqli_query(资源标识,SQL语句)时,必须指定资源。

    • 以使用MySQLi函数连接数据库、并从数据库中获取指定字段的值为例,MySQLi示例代码如下所示:

      $conn = new mysqli('localhost', 'user', 'password','data_base');  //使用new操作符,最后一个参数是直接指定数据库
      $conn -> select_db('data_base')                                  //如果上一句没有指定数据库,需要执行本命令指定数据库 
      $result = $conn -> query( 'selectfrom data_base');  
      $row = $result -> fetch_row();                                    //取一行数据 
      echo row[0];                                                      //输出第一个字段的值        

如何管理云虚拟主机数据库?

购买云虚拟主机时,阿里云会根据您选择的数据库类型为您的云虚拟主机预装数据库。您可以在云虚拟主机管理控制台执行重置数据库密码、变更数据库、备份数据库的数据等操作,也可以通过数据管理DMS对数据库中的表和数据进行维护。更多信息,请参见云虚拟主机数据库概述

您可以通过以下方式管理数据库:

如何查看数据库已用空间?

本文以MySQL数据库为例,操作步骤如下所示:

  1. 登录云虚拟主机管理控制台

  2. 查看云虚拟主机数据库空间的使用情况。

    • 站点信息页面:

      站点信息页面的网站信息区域查看空间使用情况。

      站点信息页面

    • 数据库信息页面:

      单击左侧的数据库信息,在数据库信息页面的数据空间列下查看空间使用情况。

      数据库信息页面

如何扩大云虚拟主机的数据库空间?

阿里云会提前为云虚拟主机预装数据库。购买云虚拟主机后,如果您需要扩大云虚拟主机的数据库空间来满足当前业务需要,可以通过以下方法来实现。

  • 升级云虚拟主机:如果您业务需要的数据库空间最大为1 GB,您可以通过升级云虚拟主机来扩大数据库空间。具体操作,请参见升级云虚拟主机

  • 额外购买数据库空间:如果当前业务需要的数据库空间超过主机本身预装的数据库空间,甚至超过1 GB,您可以通过额外购买数据库空间来扩大空间大小。具体操作,请参见增加云虚拟主机的数据库空间

如何修改ASP和ASP.NET网站的数据库连接字符串?

当您执行手动迁移网站数据、重置数据库密码等操作后,还需要同步修改网站程序配置文件中包含的数据库连接字符串信息。

在使用ASP或ASP.NET编写的网站程序中,一般配置文件Conn.aspWeb.Config中包含连接数据库信息的字符串。以配置文件Conn.asp为例,代码示例如下:

set Conn=server.CreateObject("ADODB.CONNECTION")
StrConn="Provider=SQLOLEDB;Data Source=云虚拟主机数据库地址,端口号;User ID=云虚拟主机数据库用户名;Password=云虚拟主机数据库密码;Initial Catalog= 云虚拟主机数据库名称"
Conn.open StrConn

数据库信息变更后,上述代码示例中的数据库信息需要您替换为变更后的数据库信息。获取数据库信息的具体操作,请参见获取和配置数据库信息

数据库导入失败或无法导入怎么办?

问题现象:

将本地数据库的SQL文件、CSV文件或.bak格式的SQL Server文件导入云虚拟主机数据库时,提示数据库导入失败。

可能原因

  • 原因一:待导入的数据库对应的数据量过大。

  • 原因二:使用旧版的DMS(Web版)导致无法导入。

解决方案

数据库连接数已占满怎么办?

问题现象

连接云虚拟主机的数据库时,提示云虚拟主机数据库存在故障,无法正常连接,并出现类似如下报错信息User bdm2569**** already has more than 'max_user_connections' active connections,表示数据库连接数已满。

可能原因

网站程序可能存在数据库慢查询或者数据库连接未释放等问题。

解决方案

  1. 修改网站程序代码,提高数据库的查询速度或者正常释放数据库连接。

  2. 重启云虚拟主机服务器。具体操作,请参见重启云虚拟主机和云享主机

    重要

    重启服务器需要15分钟,请您耐心等待。重启过程中您的所有操作会无法生效,请您在服务器重启完成后再进行其他操作。

  3. 再次连接云虚拟主机的数据库。

    • 如果正常连接,则问题已解决,操作结束。

    • 如果未正常连接,则问题未解决,请提交工单获取帮助。