背景
我們擁有10余年網(wǎng)頁設(shè)計(jì)和網(wǎng)站建設(shè)經(jīng)驗(yàn),從網(wǎng)站策劃到網(wǎng)站制作,我們的網(wǎng)頁設(shè)計(jì)師為您提供的解決方案。為企業(yè)提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、微信開發(fā)、小程序開發(fā)、移動網(wǎng)站建設(shè)、H5網(wǎng)站設(shè)計(jì)、等業(yè)務(wù)。無論您有什么樣的網(wǎng)站設(shè)計(jì)或者設(shè)計(jì)方案要求,我們都將富于創(chuàng)造性的提供專業(yè)設(shè)計(jì)服務(wù)并滿足您的需求。
在上一篇推文中,我們介紹了 MySQL Group Replication 8.0.16 支持信息碎片化功能來增強(qiáng)大型事務(wù)處理能力。
如果您想在組復(fù)制中使用該功能,則任何組成員的版本都不能低于 8.0.16!
簡單地說就是由于低版本協(xié)議上不支持。MySQL 8.0.16 的組通訊開始支持新協(xié)議,簡稱“分段協(xié)議”,之前的版本中只有一種“壓縮協(xié)議”。
如果多個(gè)成員想加入復(fù)制組,那么在協(xié)議匹配上遵循以下原則:
現(xiàn)有復(fù)制組成員和新加入成員版本相同,加入成功。
低版本成員想加入高版本的組會被驅(qū)逐,加入失敗。
高版本的成員想加入低版本的組,單獨(dú)加入成功,多個(gè)加入失敗。
例如:
一個(gè) MySQL Server 8.0.16 實(shí)例可以成功加入使用通信協(xié)議版本 5.7.24 的組。
一個(gè) MySQL Server 5.7.24 實(shí)例無法成功加入使用通信協(xié)議版本 8.0.16 的組。
兩個(gè) MySQL Server 8.0.16 實(shí)例無法同時(shí)加入使用通信協(xié)議版本 5.7.24 的組。
兩個(gè) MySQL Server 8.0.16 實(shí)例可以同時(shí)加入使用通信協(xié)議版本 8.0.16 的組。
新增 UDF
為了能讓高版本的復(fù)制組更便于加入低版本的成員,MySQL 8.0.16 新增兩個(gè) UDF。
您可以使用兩個(gè)新的 UDF 命令去管理組通信協(xié)議:
1. group_replication_set_communication_protocol(new_protocol)
設(shè)置組復(fù)制通訊協(xié)議版本
SELECT group_replication_set_communication_protocol("8.0.15");
填入一個(gè)所有成員都支持的版本號,即:new_protocol ≤ 所有成員的 MySQL版本。
new_protocol 格式:major.minor.patch (主版本號.次版本號.發(fā)布版本號)例如:8.0.15。
2. group_replication_get_communication_protocol()
獲取復(fù)制中最舊成員的 MySQL 版本號
SELECT group_replication_get_communication_protocol(); ? ?+------------------------------------------------+ ? ?| group_replication_get_communication_protocol() | ? ?+------------------------------------------------+ ? ?| 5.7.14 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | ? ?+------------------------------------------------+
獲取的版本號可能與設(shè)置的值不一致,但不一致的版本之間組復(fù)制協(xié)議是一樣的。
返回結(jié)果格式:major.minor.patch (主版本號.次版本號.發(fā)布版本號)例如:8.0.15。
以上兩個(gè) UDF 對全部組成員有效,主機(jī)或從機(jī)上均可執(zhí)行。
結(jié)論
若想使用信息碎片功能。建議將組復(fù)制成員全部升級為 8.0.16。
若組內(nèi)成員版本僅有部分為 8.0.16,可以用兩個(gè)新的函數(shù)來讓高版本的成員保持與其它成員組協(xié)議一致。
請點(diǎn)擊輸入圖片描述
?php
mysql_connect("localhost","root","123456") //填寫mysql用戶名和密碼
or die("Could not connect to MySQL server!");
mysql_select_db("phpcms") //數(shù)據(jù)庫名
or die("Could not select database!");
mysql_query('set names "gbk"'); //數(shù)據(jù)庫內(nèi)數(shù)據(jù)的編碼
?
直接調(diào)用就行了,不過可能你需要引用文件,以下是例子
//文件conn.php,用于連接數(shù)據(jù)庫
class
DB_Conn
{
}
//文件
db.php,
用于數(shù)據(jù)庫操作,這個(gè)類必然需要使用數(shù)據(jù)庫連接對象,因此引用conn.php
require_once
conn.php;
class
DB
{
}
//文件user.php
require_once
'db.php';
class
User
{
public
function
getUserById($id)
{
$conn
=
new
Db_Conn();
$db
=
new
Db();
}
}以上只是示意,如果文件不在一個(gè)目錄下記得修改路徑。而且,一般來說數(shù)據(jù)庫對象應(yīng)該包含連接數(shù)據(jù)庫和數(shù)據(jù)操作的全部功能,不需要分別寫在兩個(gè)類里面。我覺得你對面向?qū)ο蟮睦斫膺€很淺薄,需要進(jìn)一步累積經(jīng)驗(yàn)。
Oracle(甲骨文)是世界上最為流行的關(guān)系數(shù)據(jù)庫。它是大公司推崇的工業(yè)化的強(qiáng)有力的引擎。我們先看看其相關(guān)的函數(shù):
(1)integer
ora_logon(string
user
,
string
password)
開始對一個(gè)Oracle數(shù)據(jù)庫服務(wù)器的連接。
(2)integer
ora_open(integer
connection)
打開給出的連接的游標(biāo)。
(3)integer
ora_do(integer
connection,
string
query)
在給出的連接上執(zhí)行查詢。PHP生成一個(gè)指示器,解析查詢,并執(zhí)行之。
(4)integer
ora_parse(integer
cursor,
string
query)
解析一個(gè)查詢并準(zhǔn)備好執(zhí)行。
(5)boolean
ora_exec(integer
cursor)
執(zhí)行一個(gè)先前由ora_parse函數(shù)解析過的查詢。
(6)boolean
ora_fetch(integer
cursor)
此函數(shù)會使得一個(gè)執(zhí)行過的查詢中的行被取到指示器中。這使得您可以調(diào)用ora_getcolumn函數(shù)。
(7)string
ora_getcolumn(integer
cursor,
integer
column)
返回當(dāng)前的值。列由零開始的數(shù)字索引。
(8)boolean
ora_logoff(integer
connection)
斷開對數(shù)據(jù)庫服務(wù)器的鏈接。
以下是向ORACLE數(shù)據(jù)庫插入數(shù)據(jù)的示例程序:
html
headtitle向ORACLE數(shù)據(jù)庫中插入數(shù)據(jù)/title/head
body
form
action="?echo
$PHP_SELF;?"
method="post"
table
border="1"
cellspacing="0"
cellpadding="0"
tr
thID/th
thname/th
thDescription/th
/tr
tr
tdinput
type="text"
name="name"
maxlength="50"
size="10"/td
tdinput
type="text"
name="email"
maxlength="255"
size="30"/td
tdinput
type="text"
name="Description"
maxlength="255"
size="50"/td
/tr
tr
align="center"
td
colspan="3"input
type="submit"
value="提交" input
type="reset"
value="重寫"/td
/tr
/table
/form
?
//先設(shè)置兩個(gè)環(huán)境變量ORACLE_HOME,ORACLE_SID
putenv("ORACLE_HOME=/oracle/app/oracle/product/8.0.4");
putenv("ORACLE_SID=ora8");
//設(shè)置網(wǎng)頁顯示中文
putenv("NLS_LANG=Simplified_Chinese.zhs16cgb231280");
if($connection=ora_logon("scott","tiger"))
{
//庫表test有ID,name,Description三項(xiàng)
$sql
=
'insert
into
test(ID,name,Description)
values
';
$sql
.=
'(''
.
$ID
.
'',''
.
$name
.
'',''.
$Description
.
'')';
if($cursor=ora_do($connect,$sql))
{
print("insert
finished!");
}
$query
=
'select
*
from
test';
if($cursor=ora_do($connect,$query))
{
ora_fetch($cursor);
$content0=ora_getcolumn($cursor,0);
$content1=ora_getcolumn($cursor,1);
$content2=ora_getcolumn($cursor,2);
print("$content0");
print("$content1");
print("$content2");
ora_close($cursor);
}
ora_logoff($connection);
}
?
/body
/html