?
MYSQL?CLUSTER 方案介紹
? 本文的大致框架來自 羅志威、黃川的報告, 在它的基礎(chǔ)上進行簡化和修改一些bug并且添加了主從復制的章節(jié),最后做出該文檔
MySQL?Cluster? 是 MySQL 適合于分布式計算環(huán)境的高實用、高冗余版本。它采用了 NDB?Cluster? 存儲引擎,允許在 1 個? Cluster? 中運行多個 MySQL 服務(wù)器。現(xiàn)在 mysql?cluster? 被獨立出來 ,? 作為一個專門的產(chǎn)品進行運營 ,?mysql-server-5.6+? 就不在存在對 mysql?cluster 的支持,需要獨立下載 cluster 包進行安裝 .?
推薦在 Linux 下完成安裝 ,? 如果一定要在 Windows 上的話 ,? 則需要考慮使用解壓版本的進行安裝 ,? 且路徑中不能帶有空格字符 .
測試環(huán)境信息
服務(wù)器信息
項 |
項 值 |
操作系統(tǒng) |
Ubuntu?14.04?32 位 |
Mysql?Cluster? 版本 |
mysql-cluster-gpl-7.3.5-debian6.0-i686 |
內(nèi)存 |
2G |
CPU |
2.20 雙核 |
網(wǎng)絡(luò)環(huán)境 |
100M 局域網(wǎng) |
部署 |
1 個數(shù)據(jù)節(jié)點, 1?SQL 節(jié)點, 1 管理節(jié)點 |
?
管理節(jié)點信息
機器 IP |
數(shù)據(jù)節(jié)點編號 |
192.168.1.37 |
1 |
?
機器 IP |
數(shù)據(jù)節(jié)點編號 |
192.168.1.37 |
2 |
數(shù)據(jù)節(jié)點信息
?
SQL 節(jié)點信息
機器 IP |
數(shù)據(jù)節(jié)點編號 |
192.168.1.37 |
3 |
?
機器安裝環(huán)境
機器 IP |
用戶名、密碼 |
安裝路徑 |
路徑說明 |
192.168.1.37 |
root/root |
/root/mysql/mysqlc |
mysql?cluster? 目錄 |
/root/mysql/data/mysqld_data |
sql 節(jié)點數(shù)據(jù)路徑 |
||
/root/mysql/data/ndb_data |
數(shù)據(jù)節(jié)點數(shù)據(jù)路徑 |
||
/root/mysqldata/mgmd_data |
管理節(jié)點數(shù)據(jù) |
||
/root/mysql/conf |
配置文件路徑 |
節(jié)點說明
SQL 節(jié)點:
這是用來訪問簇數(shù)據(jù)的節(jié)點。對于 MySQL 簇,客戶端節(jié)點是使用 NDB 簇存儲引擎的傳統(tǒng) MySQL 服務(wù)器。典型情況下, SQL 節(jié)點是使用命令 mysqld?– -ndbcluster 啟動的,或?qū)? ndbcluster 添加到 my.cnf 后使用 mysqld 啟動。簇中所有的表結(jié)構(gòu)都保存在 mysql 節(jié)點中,為了保證每個數(shù)據(jù)節(jié)點中數(shù)據(jù)分布均勻,在進行數(shù)據(jù)插入的時候 sql 節(jié)點采用了 表分片的策略將數(shù)據(jù)均勻分配到不同的數(shù)據(jù)節(jié)點上。
?
數(shù)據(jù)節(jié)點:
這類節(jié)點用于保存簇的數(shù)據(jù)。數(shù)據(jù)節(jié)點的數(shù)目與副本的數(shù)目相關(guān),是片段的倍數(shù)。例如,對于兩個副本,每個副本有兩個片段,那么就有 1 個數(shù)據(jù)節(jié)點(在測試環(huán)境中就采用了兩個副本兩個片段的策略,故有 1 個數(shù)據(jù)節(jié)點, ( ndb_mgmd?配置文件中 NoOfReplicas 屬性配置 ) 此時管理節(jié)點會將數(shù)據(jù)節(jié)點進行分組,?數(shù)據(jù)節(jié)點是用命令 ndbd啟動的。
各個數(shù)據(jù)節(jié)點中都用兩個檢查點:本地檢查點、全局檢查點。本地檢查點的目的是為了將內(nèi)存中的數(shù)據(jù)和磁盤上的數(shù)據(jù)進行同步。全局檢查點是在各節(jié)點中進行通訊,以保證事物的一致性。
?
管理節(jié)點:
管理節(jié)點是管理數(shù)據(jù)節(jié)點和 sql 節(jié)點的工具,在系統(tǒng)正常運行期間停止管理節(jié)點對整個系統(tǒng)的運行不會有任何影響。在管理節(jié)點提供了數(shù)據(jù)節(jié)點和 sql 節(jié)點的全局配置信息,包括數(shù)據(jù)、索引所占用內(nèi)存大小、數(shù)據(jù)存放的目錄信息、各個節(jié)點 ip 信息等。通過管理節(jié)點可以啟動和停止節(jié)點、啟動和停止消息跟蹤(僅對調(diào)試版本)、顯示節(jié)點版本和狀態(tài)、啟動和停止備份等的命令。
?
安裝配置說明
?軟件下載說明:
1、?軟件下載地址: http://www.mysql.com/downloads/cluster/
2、?安裝版本: mysql-cluster-gpl-7.3.5-debian6.0-i686
安裝步驟說明:
一、?管理節(jié)點安裝
1、?登陸系統(tǒng)建立目錄結(jié)構(gòu)
?
mkdir?–p?/root/mysql/data/mgmd_data
mkdir?/root/mysql/data/ndb_data
mkdir?/root/mysql/data/mysqld_data
mkdir?/root/mysql/conf
mkdir?/root/mysql/mysqlc
?
?
2、?安裝 mysqlc
dpkg?–i?mysql-cluster-gpl-7.3.5-debian6.0-i686
mv?/opt/mysql/server-5.6/*?/root/mysql/mysqlc
?
3、?設(shè)置環(huán)境變量
在 .bashrc 文件的 PATH 后面加入如下信息 /root/mysql/mysqlc/bin
vim?~/.bashrc
加入后,文件如下所示
?
加入后執(zhí)行如下命令使配置生效:
.?~/.bashrc
4、?在 /root/mysql/conf 目錄下建立 mgmd.conf文件,然后在文件中配置各節(jié)點信息 , 如下所示:
[ndbd?default]
NoOfReplicas=1?#設(shè)置冗余的分數(shù)(一個sql節(jié)點對應(yīng)幾個data節(jié)點)
DataMemory=100M?#指定存放數(shù)據(jù)的內(nèi)存段大小
IndexMemory=50M#制定索引的內(nèi)存段大小
LockPagesInMainMemory=1?#將進程鎖定在內(nèi)存中
TimeBetweenLocalCheckpoints=20#本地檢查點時間間隔。
TimeBetweenGlobalCheckpoints=1000#全局檢查點時間間隔。
TimeBetweenEpochs=100#復制同步的間隔時間
TimeBetweenWatchdogCheckInitial=60000?
MaxNoOfTables=1024?#該參數(shù)為作為整體的簇設(shè)置了最大表對象數(shù)目
MaxNoOfOrderedIndexes=2048?#設(shè)置哈希索引在系統(tǒng)中同一時間被使用總數(shù)
MaxNoOfUniqueHashIndexes=512?#設(shè)置最大的唯一索引的總數(shù)
MaxNoOfAttributes=20480?#定義了可在簇中定義的屬性數(shù)目
MaxNoOfTriggers=10240#設(shè)置簇中觸發(fā)程序?qū)ο蟮淖畲髷?shù)目
DiskCheckpointSpeedInRestart=100M?#重啟的時候本地檢查點期間發(fā)送到磁的速度?
NoOfFragmentLogFiles=16?#該參數(shù)用于設(shè)置節(jié)點的REDO日志文件的個數(shù)??
RedoBuffer=65M?#設(shè)置redo日志緩存
MaxNoOfConcurrentOperations=500000?#設(shè)置事務(wù)中同時更新的最大記錄數(shù)
MaxNoOfExecutionThreads=8#線程的數(shù)量?
BatchSizePerLocalScan=512?#該參數(shù)用于計算鎖定記錄的數(shù)目
SharedGlobalMemory=20M?#這個參數(shù)設(shè)置用于日志緩沖、磁盤操作和表空間...
DiskPageBufferMemory=80M?#設(shè)置硬盤上的緩存頁的空間總量的大小
#[tcp?default]
#portnumber=2202#通訊端口(現(xiàn)在無效)
[ndb_mgmd]
hostname=192.168.1.39#管理節(jié)點IP
datadir=/root/mysql/data/mgmd_data#管理節(jié)點數(shù)據(jù)目錄
Nodeid=1#管理節(jié)點編號
[ndbd]
hostname=192.168.1.39#數(shù)據(jù)節(jié)點IP
datadir=/root/mysql/data/ndb_data#數(shù)據(jù)節(jié)點數(shù)據(jù)目錄
NodeId=2#數(shù)據(jù)節(jié)點編號
[mysqld]
hostname=192.168.1.39#sql節(jié)點IP
NodeId=3#sql節(jié)點編號
?
5、?管理節(jié)點啟動命令
第一次啟動:
ndb_mgmd?-f?/root/mysql/conf/mgmd.conf?--configdir=/root/mysql/conf/?--initial
非第一次啟動:
ndb_mgmd?-f?/root/mysql/conf/mgmd.conf?--configdir=/root/mysql/conf/
注意:?路徑不能使用相對地址,?需要使用絕對地址.
啟動后可以輸入 ndb_mgm 命令進入管理控制臺,然后輸入 show 命令查看節(jié)點狀態(tài),如下圖所示:
?
二、?數(shù)據(jù)節(jié)點安裝
1、?管理節(jié)點啟動命令
第一次啟動命令:
ndbd?-c?192.168.1.39:1186?--initial?
非第一次啟動命令:
ndbd?-c?192.168.1.39:1186?
???注意:如果在啟動的時候加入 initial 參數(shù),那么會將用于備份和還原的日志信息都會清空,也就是說會將數(shù)據(jù)庫中的數(shù)據(jù)刪除掉。在啟動的時候一定要注意。
三、?SQL 節(jié)點安裝
?
1、?在 /root/mysql/conf 目錄下建立 mys qld.conf 文件,然后在文件中配置各節(jié)點信息 , 如下所示:
[mysqld]
ndbcluster
ndb-wait-setup=1?#等待data節(jié)點創(chuàng)建數(shù)據(jù)表時間限制
datadir=/root/mysql/data/mysqld_data
basedir=/root/mysql/mysqlc
socket=/tmp/mysql.sock?#Windows注釋掉
skip-name-resolve?#跳過域名解析
port=3306
#ndb-connectstring=192.168.1.39
[mysql_cluster]
ndb-connectstring=192.168.1.39?#指向管理節(jié)點
?
2、?第一次安裝 sql 節(jié)點后要執(zhí)行如下腳本,該腳本只執(zhí)行一次。
cd??/root/mysql/mysqlc
./scripts/mysql_install_db?--no-defaults?--datadir=/root/mysql/data/mysqld_data/?--basedir=.
?
3、?sql節(jié)點啟動命令
mysqld?--defaults-file=/root/mysql/conf/mysqld.conf?--user=root
?
4、?權(quán)限配置
本地權(quán)限配置 :
mysqladmin??–uroot???–proot
非本機訪問權(quán)限配置 :
GRANT?ALL?PRIVILEGES?ON?*.*?TO?'root'@'%'?IDENTIFIED?BY?'root'?WITH?GRANT?OPTION;
FLUSH?PRIVILEGES;
關(guān)閉mysql?cluster
數(shù)據(jù)節(jié)點?和?管理節(jié)點通過進入?ndb_mgm?,?輸入shutdown?來關(guān)閉
sql節(jié)點通過?mysqladmin?-uroot?-p?shutdown?來關(guān)閉
方案測試
一、?測試工具
壓力測試工具使用的是 mysql 自帶的 mysqlslap 壓力測試工具。
mysqlslap:
mysql 自帶的一個壓力測試工具,自 5.1.4 版本之后的 MySQL?client? 包含了此工具,下載 mysql?client?rpm 包安裝后可直接使用。在?使用 mysqlslap 的時候,可以指定 sql 語句或者是包含 sql 語句的文件,如果是文件,那么文件中的每一行至少有一個語句(不能一個 sql 語句分成?兩行或多行),因為默認的分隔符( delimiter )是換行符,當然,你也可以手動重置新的分隔符。另外,你也不能在文件中添加注?釋, mysqlslap 不支持。
Mysqlslap參數(shù)說明 :
--concurrency 代表并發(fā)數(shù)量,多個可以用逗號隔開,當然你也可以用自己的分隔符隔 開,這個時候要用到 --delimiter 開關(guān)。
--engines 代表要測試的引擎,可以有多個,用分隔符隔開。
--iterations 代表要運行這些測試多少次。
--auto-generate-sql? 代表用系統(tǒng)自己生成的 SQL 腳本來測試。
--auto-generate-sql-load-type? 代表要測試的是讀還是寫還是兩者混合的?
--number-of-queries? 代表總共要運行多少次查詢。每個客戶運行的查詢數(shù)量可以 用查詢總數(shù) / 并發(fā)數(shù)來計算。比如倒數(shù)第二個結(jié)果 2=200/100 。
--debug-info? 代表要額外輸出 CPU 以及內(nèi)存的相關(guān)信息。
--number-int-cols? 代表示例表中的 INTEGER 類型的屬性有幾個。
--number-char-cols? 意思同上。
--create-schema? 代表自己定義的模式(在 MySQL 中也就是庫)。
--query? 代表自己的 SQL 腳本。
--only-print? 如果只想打印看看 SQL 語句是什么,可以用這個選項。
-h?sql 節(jié)點 ip
-u? 用戶
-p( 小寫 )? 密碼
-P( 大寫 )? 端口
二、?壓力測試建表及存儲過程
1.?建庫、建表腳本:
CREATE?DATABASE?cluster1;
USE?cluster1;
CREATE?TABLE?ndbtest?(
id?int(11)?NOT?NULL?AUTO_INCREMENT,
regtime?DATETIME?DEFAULT?NULL,
name?VARCHAR(200)?DEFAULT?NULL,
PRIMARY?KEY?(`id`)
)?ENGINE=ndb?AUTO_INCREMENT=1000001?DEFAULT?CHARSET=latin1?PACK_KEYS=0;
?
2.?存儲過程腳本
DELIMITER?$$
DROP?PROCEDURE?IF?EXISTS?`p_test_t1_disk`?$$
CREATE?PROCEDURE?`p_test_t1_disk`()
BEGIN
declare?i?int?default?0;
test:?loop
insert?into?cluster1.ndbtest(regtime,name)?values(sysdate(),md5(rand()));
set?i=i+1;
if?i>=10000?then
leave?test;
end?if;
end?loop;
END?$$
DELIMITER?;
3.?工具運行命令
mysqlslap?-uroot?-proot?--concurrency=1?--iterations=1?--query='call?cluster1.p_test_t1_disk;'?--number-of-queries=1?-h?192.168.1.37?--create-schema=cluster1
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
MYSQL?REPLICATION 方案介紹
Mysql?Replication ( MySQL 主從復制)是 MySQL 數(shù)據(jù)庫使用率非常高的一種技術(shù),它使用某個數(shù)據(jù)庫服務(wù)器為?主,然后在其他數(shù)據(jù)庫服務(wù)器上進行復制,后面復制的數(shù)據(jù)庫也稱從數(shù)據(jù)庫。 MySQL 支持單向、異步復制,復制過程中一個服務(wù)器充當主服務(wù)器,而一個或多個?其它服務(wù)器充當從服務(wù)器。
在設(shè)置鏈式復制服務(wù)器時,從服務(wù)器本身也可以充當主服務(wù)器,如:
a->b->c
,
b
對于
a
來說是從服務(wù)器,但是它又?是
c
的主服務(wù)器。
Mysql?Replication
(
MySQL
主從復制)主要用于:
1. 使用一個從服務(wù)器執(zhí)行備份,而不會干擾主服務(wù)器。在備份過程中主服務(wù)器可以繼續(xù)處理更新;
2.
解決數(shù)據(jù)庫讀需求很高
(
讀寫分離
),?
通常使用
amoeba
或者
mysqlproxy
作為中間代理層
.
Mysql?Replication
(
MySQL
主從復制)的原理:
Mysql 的復制( replication )是一個異步的復制,從一個 Mysql?instace (稱之為 Master )復制到另一個 Mysql?instance (稱之 Slave )。實現(xiàn)整個復制操作主要由三個進程完成的,其中兩個進程在 Slave ( Sql 進程和 IO 進程),另外一個進程在? Master ( IO 進程)上。
要實施復制,首先必須打開
Master
端的
binary?log
(
bin-log
)功能,否則無法實現(xiàn)。因為整個復制過程實際上就是
Slave
從
Master
端獲取該日志然后再在自己身上完全順序的執(zhí)行日志中所記錄的各種操作。
復制的基本過程如下:
1)
、
Slave
上面的
IO
進程連接上
Master
,并請求從指定日志文件的指定位置(或者從最開始的日志)之后的日志內(nèi)容;
2)
、
Master
接收到來自
Slave
的
IO
進程的請求后,通過負責復制的
IO
進程根據(jù)請求信息讀取制定日志指定位置之后的日志信息,返回給
Slave?
的
IO
進程。返回信息中除了日志所包含的信息之外,還包括本次返回的信息已經(jīng)到
Master
端的
bin-log
文件的名稱以及
bin-log
的位置;
3)
、
Slave
的
IO
進程接收到信息后,將接收到的日志內(nèi)容依次添加到
Slave
端的
relay-log
文件的最末端,并將讀取到的
Master
端的?
bin-log
的文件名和位置記錄到
master-info
文件中,以便在下一次讀取的時候能夠清楚的高速
Master“
我需要從某個
bin-log
的哪個位置開始往后的日志內(nèi)容,請發(fā)給我
”
;
4)
、
Slave 的 Sql 進程檢測到 relay-log 中新增加了內(nèi)容后,會馬上解析 relay-log 的內(nèi)容成為在 Master 端真實執(zhí)行時候的那些可執(zhí)行的內(nèi)容,并在自身執(zhí)行。
如果要實現(xiàn) Slave 和 Master 為同一個 mysqld,? 需要添加 log-slave-updates?=?1
參數(shù)到 my.cnf- à[mysqld]
服務(wù)器結(jié)構(gòu):
A 、 B 、 C 三臺服務(wù)器;?其中 A 為新聞數(shù)據(jù)源, A 為 B 的 Master , B 為 A 的 Slave , 同時也是 C 的 Master ;
B 服務(wù)器從 A 復制部分數(shù)據(jù), C 備份 A 的所有數(shù)據(jù);
注意 :
如果數(shù)據(jù)庫在做主從的時候已經(jīng)有數(shù)據(jù)了 ,? 則需要進行鎖表操作 .
mysql>?flush?tables?with?read?lock;
記住數(shù)據(jù)導完后要解鎖:
mysql>?unloclk?tables;
?
Master?A 的配置
?
sudo?vi?/etc/mysql/my.cnf
?
刪除以下參數(shù)前的注釋并修改
server-id???????=?1?// 分配 server-id
log-bin?????????=?master-bin?// 默認 mysql-bin, 可以不修改
log-bin-index???=?master-bin.index??// 非必須
bind-adress?????=?0.0.0.0?// 默認 127.0.0.1? 不修改可能導致無法訪問
?
修改系統(tǒng)防火墻使 B 服務(wù)器可以訪問 3306 端口,(詳查 ufw 命令)??
重啟 mysql :
sudo?/init.d/mysql?restart
?
通過語句:
GRANT?REPLICATION?SLAVE,REPLICATION?CLIENT?ON?*.*?TO?user@'ip?B'?IDENTIFIED?BY?'password';
?
給 B 服務(wù)器建立一個可以連接到 A 的帳號
進入 mysql ,通過:
show?master?status;
查看 A 的狀態(tài),記錄下 file 的位置和 postion 的參數(shù)
?
?
?
Slave?B 的配置
sudo?vi?/etc/mysql/my.cnf
?
server-id???????=?2
log-bin?????????=?slave-bin
bind-address????=?0.0.0.0
relay-log-index?=??slave-relay-bin.index?// 非必須
relay-log???????=?slave-relay-bin???// 非必須
?
添加參數(shù):
log-slave-updates?=?1???
// 通常情況,從服務(wù)器從主服務(wù)器接收到的更新不記入它的二進制日志。
// 該選項告訴從服務(wù)器將其 SQL 線程執(zhí)行的更新記入到從服務(wù)器自己的二進制日志。
?
replicate_wild_do_table?=?copy_db.copy_table?// 表示需要復制的庫中的表,可以善用 %
replicate_wild_ignore_table?=?ignore_db.ignore_table?// 不復制的表
?
至于為什么不使用 replicate_do_db 和 replicate_ignore_db 參數(shù),
是為了方式跨庫更新時出錯,如果能確保不會跨庫更新可考慮
?
重啟 mysql ,進入本機 mysql
?
執(zhí)行以下語句:
CHANGE?MASTER?TO?MASTER_HOST='server?A?ip',
MASTER_PORT=3306,
MASTER_USER='user',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=0;
?
//MASTER_LOG_FILE 和 MASTER_LOG_POS 對應(yīng) A 中的 file 位置和 postion 參數(shù),表示開始復制的 bin 文件和位置
?
start?slave;????// 啟動 Slave
show?slave?status ;?? // 查看 Slave_IO_State 參數(shù),如果是 Waiting?for?master?to?send?event, 則正常
// 正常狀態(tài)下 Slave_IO_Running 與 Slave_SQL_Running 均為 yes
?
// 如不能正常鏈接,根據(jù) Slave_IO_State , Slave_IO_Running , Slave_SQL_Running , Last_IO_Error
// 等參數(shù)查找失敗原因
?
通過:
show?master?status;
命令記錄 file 位置和 postion 參數(shù);
?
給 C 服務(wù)器分配一個帳號用于同步;
方法參照 A ,防火墻設(shè)置參照 A ;
?
?
?
?
Slave?C 的配置
sudo?vi?/etc/mysql/my.cnf
server-id??=?3
relay-log-index?=??slave-relay-bin.index?// 非必須
relay-log???????=?slave-relay-bin???// 非必須
?
通過 CHANGE?MASTER?TO 語句來修改 master 的參數(shù),參照 B 的配置;
通過
show?slave?status;
檢查 C 的狀態(tài),參照 B
?
?
?
?
?
讀寫分離配置 :
推薦使用 amoeba,?amoeba? 相比較 mysqlproxy,? 優(yōu)點在于中文文檔齊全 ( 國人編寫 ) ,穩(wěn)定性高,免除了 mysqlproxy 的 lua 配置的復雜性 .
Amoeba 讀寫分離:
http://docs.hexnova.com/amoeba/rw-splitting.html
高可用性
可以制作兩個 master, 它們兩個為雙熱備主機,然后通過 keepalive 整合 master? 變?yōu)橐粋€ VIP ,?最后? amoeba 和 slave 都是通過這個 VIP? 來進行操作, amoeba 把 insert 等操作發(fā)送到這個 VIP ,? slave 通過 VIP 獲得具體的 bin 日志,然后進行更新
Keepalive 在使用的時候,通常只有一臺 master 會進行工作,另外一臺進行主從復制,當 query 發(fā)送到 VIP 的時候,就會進入工作的 master 運行。當工作 master 宕機后, keepaliave 會自動切換 VIP 指向空閑 master 進行工作,?這樣子就實現(xiàn)了高可用性。
所以在雙擊熱備的環(huán)境中?,總共會占用 3+ 個 IP 地址。
?
負載均衡
負載均衡在 IP 層上,通常使用 LVS 軟件,在 HTTP 層面上可以使用 Nginx , lighttpd , apache?web?server? 等軟件。
現(xiàn)在為了實現(xiàn) MySql 的 master 的負載均衡,可以使用 LVS ,?在 IP 層面上進行負載均衡,
也可以使用 MySql-Cluster(NDB) 產(chǎn)品,?它已經(jīng)實現(xiàn)了高可用性以及負載均衡 .
高可用性和負載均衡都可以直接通過 NDB 來實現(xiàn) , 上面提及的是一般方法
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
