數(shù)據(jù)庫常見問題
為了有效排查和解決在使用云虛擬主機(jī)數(shù)據(jù)庫時(shí)遇到的功能問題(例如支持哪些數(shù)據(jù)庫、是否支持開啟event_scheduler組件)和其他操作問題(例如,如何擴(kuò)大數(shù)據(jù)庫空間、數(shù)據(jù)庫導(dǎo)入失敗問題等)。本文為您匯總了使用云虛擬主機(jī)數(shù)據(jù)庫時(shí)遇到的一些常見問題。
功能問題
操作問題
云虛擬主機(jī)支持哪些數(shù)據(jù)庫?
不同操作系統(tǒng)的云虛擬主機(jī)支持不同類型的數(shù)據(jù)庫,如下所示:
Linux操作系統(tǒng)云虛擬主機(jī)支持MySQL和SQLite數(shù)據(jù)庫。
Windows操作系統(tǒng)云虛擬主機(jī)支持SQL Server和Access數(shù)據(jù)庫。
更多信息,請(qǐng)參見云虛擬主機(jī)支持的數(shù)據(jù)庫版本。
MySQL數(shù)據(jù)庫是否支持開啟event_scheduler?
云虛擬主機(jī)的MySQL數(shù)據(jù)庫默認(rèn)關(guān)閉event_scheduler
參數(shù),且不支持手動(dòng)開啟該參數(shù)。
event_scheduler
是MySQL中一個(gè)類似定時(shí)器的組件,通過調(diào)用該組件,您可以在指定的時(shí)間點(diǎn)執(zhí)行一條SQL語句或一個(gè)語句塊,也可以用于在固定間隔重復(fù)執(zhí)行SQL語句。
通過以下操作,您可以看到event_scheduler
參數(shù)為關(guān)閉(OFF
)狀態(tài):
登錄MySQL數(shù)據(jù)庫。
具體操作,請(qǐng)參見通過DMS Web版本登錄數(shù)據(jù)庫。
在頂部菜單欄,選擇SQL窗口。
在SQL窗口編輯區(qū)域,輸入
show variables like '%sche%';
,然后單擊執(zhí)行(F8)。命令執(zhí)行成功后,在結(jié)果集1頁簽下,您可以查詢到
event_scheduler
的狀態(tài)為OFF
。
MySQL函數(shù)與MySQLi函數(shù)有什么區(qū)別?
PHP可以通過MySQL和MySQLi兩種函數(shù)操作MySQL數(shù)據(jù)庫,函數(shù)的具體說明和示例代碼如下所示:
MySQL函數(shù)
在PHP 5.0之前,一般使用PHP的MySQL函數(shù)操作MySQL數(shù)據(jù)庫,屬于面向過程的方式。例如,函數(shù)
mysql_query()
。MySQL是非持久連接函數(shù),每次連接都會(huì)打開一個(gè)新的連接進(jìn)程。
MySQL函數(shù)語法:以
query
語句為例,使用mysql_query(SQL語句,資源標(biāo)識(shí))
時(shí),資源標(biāo)識(shí)是可選參數(shù),默認(rèn)值是上次打開的連接或資源。以使用MySQL函數(shù)連接數(shù)據(jù)庫、并從數(shù)據(jù)庫中獲取指定字段的值為例,MySQL示例代碼如下所示:
$conn = mysql_connect('localhost', 'user', 'password'); //連接mysql數(shù)據(jù)庫 mysql_select_db('data_base'); //選擇數(shù)據(jù)庫 $result = mysql_query('selectfrom data_base'); //第二個(gè)可選參數(shù),指定打開的連接 $row = mysql_fetch_row( $result ) ) //只取一行數(shù)據(jù) echo $row[0]; //輸出第一個(gè)字段的值
MySQLi函數(shù)
在PHP 5.0之后,新增了MySQLi函數(shù),它是MySQL函數(shù)的增強(qiáng)版,比MySQL函數(shù)更加穩(wěn)定、高效和安全,屬于面向?qū)ο蟮姆绞健@纾瘮?shù)
mysqli_query()
。說明MySQLi不僅封裝了數(shù)據(jù)庫操作過程中的常用方法,還封裝了事務(wù)等一些高級(jí)操作。
MySQLi是永久連接函數(shù)。即使您多次運(yùn)行MySQLi函數(shù)連接服務(wù)器,也只會(huì)使用同一連接進(jìn)程,可有效減少服務(wù)器的資源浪費(fèi)。
MySQLi函數(shù)語法:以
query
語句為例,使用mysqli_query(資源標(biāo)識(shí),SQL語句)
時(shí),必須指定資源。以使用MySQLi函數(shù)連接數(shù)據(jù)庫、并從數(shù)據(jù)庫中獲取指定字段的值為例,MySQLi示例代碼如下所示:
$conn = new mysqli('localhost', 'user', 'password','data_base'); //使用new操作符,最后一個(gè)參數(shù)是直接指定數(shù)據(jù)庫 $conn -> select_db('data_base') //如果上一句沒有指定數(shù)據(jù)庫,需要執(zhí)行本命令指定數(shù)據(jù)庫 $result = $conn -> query( 'selectfrom data_base'); $row = $result -> fetch_row(); //取一行數(shù)據(jù) echo row[0]; //輸出第一個(gè)字段的值
如何管理云虛擬主機(jī)數(shù)據(jù)庫?
購買云虛擬主機(jī)時(shí),阿里云會(huì)根據(jù)您選擇的數(shù)據(jù)庫類型為您的云虛擬主機(jī)預(yù)裝數(shù)據(jù)庫。您可以在云虛擬主機(jī)管理控制臺(tái)執(zhí)行重置數(shù)據(jù)庫密碼、變更數(shù)據(jù)庫、備份數(shù)據(jù)庫的數(shù)據(jù)等操作,也可以通過數(shù)據(jù)管理DMS對(duì)數(shù)據(jù)庫中的表和數(shù)據(jù)進(jìn)行維護(hù)。更多信息,請(qǐng)參見云虛擬主機(jī)數(shù)據(jù)庫概述。
您可以通過以下方式管理數(shù)據(jù)庫:
(推薦)數(shù)據(jù)管理DMS:阿里云提供的集數(shù)據(jù)管理、結(jié)構(gòu)管理、用戶授權(quán)、安全審計(jì)、數(shù)據(jù)趨勢、數(shù)據(jù)追蹤于一體的數(shù)據(jù)管理服務(wù)。推薦您通過數(shù)據(jù)管理DMS Web版本登錄數(shù)據(jù)庫。具體操作,請(qǐng)參見通過DMS Web版本登錄數(shù)據(jù)庫。
Navicat for MySQL:用于管理和開發(fā)MySQL的理想解決方案,是一套單一的應(yīng)用程序,您可以使用Navicat for MySQL導(dǎo)入導(dǎo)出MySQL數(shù)據(jù)庫數(shù)據(jù)。具體操作,請(qǐng)參見通過Navicat for MySQL導(dǎo)入SQL文件和通過Navicat for MySQL導(dǎo)出數(shù)據(jù)庫表中的數(shù)據(jù)。
SQL Server Management Studio (SSMS):用于管理任何SQL基礎(chǔ)結(jié)構(gòu)的集成環(huán)境,您可以使用SSMS導(dǎo)入導(dǎo)出SQL Server數(shù)據(jù)庫數(shù)據(jù)。具體操作,請(qǐng)參見通過SQL Server Management Studio導(dǎo)入SQL Server數(shù)據(jù)庫數(shù)據(jù)和通過SQL Server Management Studio導(dǎo)出SQL Server數(shù)據(jù)庫數(shù)據(jù)。
如何查看數(shù)據(jù)庫已用空間?
本文以MySQL數(shù)據(jù)庫為例,操作步驟如下所示:
查看云虛擬主機(jī)數(shù)據(jù)庫空間的使用情況。
站點(diǎn)信息頁面:
在站點(diǎn)信息頁面的網(wǎng)站信息區(qū)域查看空間使用情況。
數(shù)據(jù)庫信息頁面:
單擊左側(cè)的數(shù)據(jù)庫信息,在數(shù)據(jù)庫信息頁面的數(shù)據(jù)空間列下查看空間使用情況。
如何擴(kuò)大云虛擬主機(jī)的數(shù)據(jù)庫空間?
阿里云會(huì)提前為云虛擬主機(jī)預(yù)裝數(shù)據(jù)庫。購買云虛擬主機(jī)后,如果您需要擴(kuò)大云虛擬主機(jī)的數(shù)據(jù)庫空間來滿足當(dāng)前業(yè)務(wù)需要,可以通過以下方法來實(shí)現(xiàn)。
升級(jí)云虛擬主機(jī):如果您業(yè)務(wù)需要的數(shù)據(jù)庫空間最大為1 GB,您可以通過升級(jí)云虛擬主機(jī)來擴(kuò)大數(shù)據(jù)庫空間。具體操作,請(qǐng)參見升級(jí)云虛擬主機(jī)。
額外購買數(shù)據(jù)庫空間:如果當(dāng)前業(yè)務(wù)需要的數(shù)據(jù)庫空間超過主機(jī)本身預(yù)裝的數(shù)據(jù)庫空間,甚至超過1 GB,您可以通過額外購買數(shù)據(jù)庫空間來擴(kuò)大空間大小。具體操作,請(qǐng)參見增加云虛擬主機(jī)的數(shù)據(jù)庫空間。
如何修改ASP和ASP.NET網(wǎng)站的數(shù)據(jù)庫連接字符串?
當(dāng)您執(zhí)行手動(dòng)遷移網(wǎng)站數(shù)據(jù)、重置數(shù)據(jù)庫密碼等操作后,還需要同步修改網(wǎng)站程序配置文件中包含的數(shù)據(jù)庫連接字符串信息。
在使用ASP或ASP.NET編寫的網(wǎng)站程序中,一般配置文件Conn.asp和Web.Config中包含連接數(shù)據(jù)庫信息的字符串。以配置文件Conn.asp為例,代碼示例如下:
set Conn=server.CreateObject("ADODB.CONNECTION")
StrConn="Provider=SQLOLEDB;Data Source=云虛擬主機(jī)數(shù)據(jù)庫地址,端口號(hào);User ID=云虛擬主機(jī)數(shù)據(jù)庫用戶名;Password=云虛擬主機(jī)數(shù)據(jù)庫密碼;Initial Catalog= 云虛擬主機(jī)數(shù)據(jù)庫名稱"
Conn.open StrConn
數(shù)據(jù)庫信息變更后,上述代碼示例中的數(shù)據(jù)庫信息需要您替換為變更后的數(shù)據(jù)庫信息。獲取數(shù)據(jù)庫信息的具體操作,請(qǐng)參見獲取和配置數(shù)據(jù)庫信息。
數(shù)據(jù)庫導(dǎo)入失敗或無法導(dǎo)入怎么辦?
問題現(xiàn)象:
將本地?cái)?shù)據(jù)庫的SQL文件、CSV文件或.bak
格式的SQL Server文件導(dǎo)入云虛擬主機(jī)數(shù)據(jù)庫時(shí),提示數(shù)據(jù)庫導(dǎo)入失敗。
可能原因:
原因一:待導(dǎo)入的數(shù)據(jù)庫對(duì)應(yīng)的數(shù)據(jù)量過大。
原因二:使用舊版的DMS(Web版)導(dǎo)致無法導(dǎo)入。
解決方案:
針對(duì)原因一,您可以通過第三方數(shù)據(jù)庫軟件連接數(shù)據(jù)庫進(jìn)行備份并再次進(jìn)行導(dǎo)入操作。例如Navicat for MySQL或者SQL Server Management Studio軟件。具體操作,請(qǐng)參見通過Navicat for MySQL導(dǎo)入SQL文件或通過SQL Server Management Studio導(dǎo)入SQL Server數(shù)據(jù)庫數(shù)據(jù)。
針對(duì)原因二,通過新版DMS入口重新登錄數(shù)據(jù)庫,然后再次進(jìn)行數(shù)據(jù)庫導(dǎo)入操作。
重要登錄新版DMS時(shí),您必須擁有阿里云賬號(hào)。如果通過代理商購買的云虛擬主機(jī),請(qǐng)及時(shí)聯(lián)系代理商進(jìn)行賬號(hào)轉(zhuǎn)移操作,具體操作,請(qǐng)參見轉(zhuǎn)移賬號(hào)。
數(shù)據(jù)庫連接數(shù)已占滿怎么辦?
問題現(xiàn)象:
連接云虛擬主機(jī)的數(shù)據(jù)庫時(shí),提示云虛擬主機(jī)數(shù)據(jù)庫存在故障,無法正常連接,并出現(xiàn)類似如下報(bào)錯(cuò)信息User bdm2569**** already has more than 'max_user_connections' active connections
,表示數(shù)據(jù)庫連接數(shù)已滿。
可能原因:
網(wǎng)站程序可能存在數(shù)據(jù)庫慢查詢或者數(shù)據(jù)庫連接未釋放等問題。
解決方案:
修改網(wǎng)站程序代碼,提高數(shù)據(jù)庫的查詢速度或者正常釋放數(shù)據(jù)庫連接。
重啟云虛擬主機(jī)服務(wù)器。具體操作,請(qǐng)參見重啟云虛擬主機(jī)和云享主機(jī)。
重要重啟服務(wù)器需要15分鐘,請(qǐng)您耐心等待。重啟過程中您的所有操作會(huì)無法生效,請(qǐng)您在服務(wù)器重啟完成后再進(jìn)行其他操作。
再次連接云虛擬主機(jī)的數(shù)據(jù)庫。
如果正常連接,則問題已解決,操作結(jié)束。
如果未正常連接,則問題未解決,請(qǐng)提交工單獲取幫助。