MySQL mgr搭建的實(shí)現(xiàn)步驟
1. 傳統(tǒng)主從復(fù)制技術(shù)架構(gòu)
傳統(tǒng)主從復(fù)制的方式是在master節(jié)點(diǎn)上執(zhí)行數(shù)據(jù)更新事務(wù),而后記錄這些事務(wù)到binlog中,再將binlog發(fā)送到slave節(jié)點(diǎn)轉(zhuǎn)儲(chǔ)成relay log,在slave節(jié)點(diǎn)上再有單獨(dú)的線程讀取這些relay log然后重新執(zhí)行或應(yīng)用這些事務(wù),它是shared-nothing的,每個(gè)節(jié)點(diǎn)都有一份完整的數(shù)據(jù)副本,其技術(shù)流程圖如下所示:
- 傳統(tǒng)主從復(fù)制技術(shù)架構(gòu)圖

MySQL還提供了半同步復(fù)制,這是在傳統(tǒng)主從復(fù)制的基礎(chǔ)上增加了一個(gè)同步的步驟,master節(jié)點(diǎn)上提交事務(wù)前,要先等到slave節(jié)點(diǎn)確認(rèn)收到事務(wù)信息才可以(所以前文才說當(dāng)slave節(jié)點(diǎn)響應(yīng)慢時(shí)會(huì)影響master節(jié)點(diǎn)的事務(wù)提交),其技術(shù)流程圖如下所示:
- 半同步復(fù)制技術(shù)架構(gòu)圖

2. MGR組復(fù)制技術(shù)架構(gòu)
MGR也是shared-nothing的,每個(gè)節(jié)點(diǎn)都有一份完整的數(shù)據(jù)副本,MGR可以做到在任何節(jié)點(diǎn)、任何時(shí)間都能執(zhí)行讀寫事務(wù)(不含只讀事務(wù)),不過讀寫事務(wù)要被整個(gè)復(fù)制組確認(rèn)后才能提交。如果是只讀事務(wù)則沒有這個(gè)限制,任何節(jié)點(diǎn)都可以發(fā)起及提交。
當(dāng)讀寫事務(wù)準(zhǔn)備提交前,它會(huì)向復(fù)制組發(fā)出一個(gè)原子廣播,內(nèi)容包括:該事務(wù)修改的數(shù)據(jù),及其所對(duì)應(yīng)的writeset(例如,一個(gè)執(zhí)行 UPDATE user SET age=25 WHERE id=1 的事務(wù),其 WriteSet 可能記錄為:{ "database": "test", "table": "user", "primary_key": "id=1" })。復(fù)制組中所有節(jié)點(diǎn)要么接收該事務(wù),要么都不接收。如果組中所有節(jié)點(diǎn)都接收該事務(wù)消息,那么它們都會(huì)按照與之前發(fā)送事務(wù)的相同順序收到該廣播消息。因此,所有組成員都以相同的順序接收事務(wù)的寫集,并為事務(wù)建立全局順序。
在多個(gè)節(jié)點(diǎn)上并行執(zhí)行的事務(wù)是可能產(chǎn)生沖突的,這時(shí)候就需要對(duì)比判斷兩個(gè)并行事務(wù)的writeset來確認(rèn),這個(gè)過程稱為事務(wù)認(rèn)證,也叫做沖突檢測(cè)。事務(wù)沖突檢測(cè)是行級(jí)別的,也就是說兩個(gè)并行的事務(wù)更新同一行時(shí),則視為產(chǎn)生沖突。這時(shí)的做法是全局順序在前面的事務(wù)可以成功,所有節(jié)點(diǎn)都提交該事務(wù)。而全局順序在后面的事務(wù)會(huì)失敗回滾,各節(jié)點(diǎn)會(huì)刪除該事務(wù)。這實(shí)際上是個(gè)分布式的誰先提交誰先贏得事務(wù)的規(guī)則。建議:如果經(jīng)常發(fā)生節(jié)點(diǎn)間的事務(wù)沖突,那最好將這些事務(wù)放在同一個(gè)節(jié)點(diǎn)上執(zhí)行,這樣它們?cè)诒镜厥聞?wù)并發(fā)控制協(xié)調(diào)下可能都可以提交成功,而不至于由于MGR的沖突檢測(cè)而導(dǎo)致某個(gè)事務(wù)總是被回滾。
對(duì)于正在應(yīng)用或外化的事務(wù),MGR允許它們不一定按照原有順序執(zhí)行,只要不破壞事務(wù)的一致性和有效性即可。MGR默認(rèn)要求是最終一致性,也就是說當(dāng)所有事務(wù)都應(yīng)用完畢后,所有節(jié)點(diǎn)的數(shù)據(jù)是一致的。當(dāng)流量巨大時(shí),事務(wù)可能會(huì)被外化而導(dǎo)致順序輕微不一致。例如在多主模式下,一個(gè)本地事務(wù)在通過認(rèn)證后會(huì)被立即外化,盡管此時(shí)可能還有個(gè)有這更早全局順序的遠(yuǎn)程事務(wù)還沒被應(yīng)用,只要MGR的認(rèn)證線程認(rèn)為這個(gè)事務(wù)不會(huì)產(chǎn)生沖突即可。在單主模式下,在Primary節(jié)點(diǎn)上的本地并發(fā)事務(wù),在不產(chǎn)生沖突的情況下,其提交和外化的順序可能和該事物的全局事務(wù)順序有輕微不一致。在Secondary節(jié)點(diǎn)上,由于沒有寫事務(wù),因此它們的事務(wù)順序和全局事務(wù)順序是一致的。
下圖描述了MGR的組復(fù)制協(xié)議,可以看到和傳統(tǒng)主從復(fù)制(及半同步復(fù)制)的一些差異。為了簡(jiǎn)單起見,圖中少了共識(shí)算法和Paxos相關(guān)的信息:
- MGR技術(shù)架構(gòu)圖

Paxos 協(xié)議
在 MySQL Group Replication(MGR)中,共識(shí)算法基于 Paxos 協(xié)議,主要用于確保集群中各節(jié)點(diǎn)在事務(wù)提交等操作上達(dá)成一致,其工作過程如下:
事務(wù)提議與廣播
- 當(dāng)一個(gè)節(jié)點(diǎn)上有事務(wù)要執(zhí)行時(shí),該事務(wù)在本地執(zhí)行后,節(jié)點(diǎn)會(huì)將事務(wù)信息,如 WriteSet 等,通過 Paxos 模塊廣播給 MGR 集群中的各個(gè)節(jié)點(diǎn),包括其自身。這個(gè)過程類似于 Paxos 協(xié)議中的提議階段,每個(gè)節(jié)點(diǎn)都可以提出事務(wù)提議。
沖突檢測(cè)與解決
- 各個(gè)節(jié)點(diǎn)在接收到事務(wù)信息后,會(huì)各自進(jìn)行沖突檢測(cè)。如果多個(gè)事務(wù)修改了同一行數(shù)據(jù),MGR 會(huì)采用 “先提交者獲勝” 的策略,后提交的事務(wù)將被回滾。在多主模式下,節(jié)點(diǎn)會(huì)根據(jù)版本號(hào),如 trx_id 或行級(jí)時(shí)間戳等,判斷最新版本,拒絕舊版本的事務(wù)。如果是單主模式,當(dāng)主節(jié)點(diǎn)在應(yīng)用來自前一個(gè)主節(jié)點(diǎn)的中繼日志時(shí),不進(jìn)行沖突檢測(cè),其他情況則需要進(jìn)行沖突檢測(cè)。
具體處理流程(3 節(jié)點(diǎn)場(chǎng)景)
假設(shè)集群節(jié)點(diǎn)為 A、B、C,事務(wù) T 在節(jié)點(diǎn) A 發(fā)起:
事務(wù)執(zhí)行與廣播:節(jié)點(diǎn) A 執(zhí)行 T 并生成 WriteSet,廣播給 B 和 C。
多數(shù)派初步確認(rèn):節(jié)點(diǎn) A 和 B 檢測(cè)到 T 的 WriteSet 與本地歷史無沖突,返回 “確認(rèn)”(已滿足多數(shù)派 2/3)。
第 3 節(jié)點(diǎn)檢測(cè)到?jīng)_突:節(jié)點(diǎn) C 發(fā)現(xiàn) T 的 WriteSet 與本地已提交的事務(wù) T’ 沖突(例如 T 和 T’ 都修改了
user.id=1),返回 “沖突”。- 全集群事務(wù)回滾:
- 節(jié)點(diǎn) A 收到 C 的 “沖突” 反饋后,判定 T 為沖突事務(wù),立即在本地回滾 T。
- 同時(shí)向 B 和 C 廣播 “事務(wù) T 沖突,需回滾” 的指令。
- 節(jié)點(diǎn) B 即使已初步確認(rèn)無沖突,也會(huì)執(zhí)行回滾(放棄 T 的執(zhí)行)。
- 最終,A、B、C 均不保留 T 的修改,集群數(shù)據(jù)保持一致。
多數(shù)派確認(rèn)
- Paxos 協(xié)議的核心是 “多數(shù)派確認(rèn)” 機(jī)制。在 MGR 中,僅當(dāng)多數(shù)節(jié)點(diǎn),即超過半數(shù)的節(jié)點(diǎn)確認(rèn)接收并接受該寫集合后,事務(wù)才會(huì)最終提交。例如,在一個(gè) 3 節(jié)點(diǎn)的集群中,至少需要 2 個(gè)節(jié)點(diǎn)確認(rèn)后事務(wù)才能提交。這確保了只有被多數(shù)節(jié)點(diǎn)認(rèn)可的寫操作才會(huì)被最終執(zhí)行,從而避免了數(shù)據(jù)丟失。
狀態(tài)同步與主節(jié)點(diǎn)選舉
- 當(dāng)新的事務(wù)提交或者主節(jié)點(diǎn)發(fā)生變化時(shí),節(jié)點(diǎn)之間需要進(jìn)行狀態(tài)同步。例如,當(dāng)主節(jié)點(diǎn)不可用時(shí),剩余節(jié)點(diǎn)會(huì)通過 Paxos 協(xié)議選舉新的主節(jié)點(diǎn)。選舉過程中,需滿足 “多數(shù)存活” 條件,如 3 節(jié)點(diǎn)集群中至少 2 節(jié)點(diǎn)存活。新主節(jié)點(diǎn)會(huì)同步已提交的全局事務(wù),確保數(shù)據(jù)完整性后再對(duì)外提供服務(wù)。
原子廣播
- MGR 基于 Paxos 的原子廣播特性,確保所有節(jié)點(diǎn)要么全部接收消息,要么全部不接收。這意味著在事務(wù)廣播過程中,不會(huì)出現(xiàn)部分節(jié)點(diǎn)接收到消息并執(zhí)行,而另一部分節(jié)點(diǎn)未接收到消息的情況,從而避免了數(shù)據(jù)不一致。
3.mgr搭建
| 角色 | IP |
| 主 | 192.168.160.205 |
| 從 | 192.168.160.203 |
| 從 | 192.168.160.206 |
安裝mysql(三個(gè))
創(chuàng)建數(shù)據(jù)庫(kù)目錄
mkdir -p /data/mysql/mysqldata/mysql3306/{data,logs,binlog,relaylog,sock,backup,tmp}
mkdir -p /data/mysql/mysqlbase
touch /data/mysql/mysqldata/mysql3306/logs/error.log
解壓安裝包
tar -xvf mysql-8.0.43-linux-glibc2.17-x86_64.tar.xz -C /data/mysql/mysqlbase/ cd /data/mysql/mysqlbase/ mv mysql-8.0.43-linux-glibc2.17-x86_64/ mysql3306
添加配置文件
cd /data/mysql/mysqldata/mysql3306/ vim my8.cnf [mysql] default-character-set=utf8mb4 [mysqld] port=3306 character-set-server=utf8mb4 default-storage-engine=INNODB general_log= on max_connections=100 interactive_timeout = 120 wait_timeout = 120 ###dir basedir=/data/mysql/mysqlbase/mysql3306 datadir=/data/mysql/mysqldata/mysql3306/data pid-file=/data/mysql/mysqldata/mysql3306/sock/mysqld.pid socket = /data/mysql/mysqldata/mysql3306/sock/mysql.sock tmpdir=/data/mysql/mysqldata/mysql3306/tmp log-error=/data/mysql/mysqldata/mysql3306/logs/error.log ###slow sql slow_query_log = ON slow_query_log_file = /data/mysql/mysqldata/mysql3306/logs/slow.log long_query_time = 0.5 ###safe #skip-grant-tables skip-name-resolve ###memory size binlog_cache_size = 4096 max_binlog_cache_size = 256m table_open_cache=2000 tmp_table_size=256m key_buffer_size=256M read_buffer_size=4M read_rnd_buffer_size=32M innodb_log_buffer_size=32M innodb_buffer_pool_size=512M join_buffer_size=128M sort_buffer_size=32M bulk_insert_buffer_size = 64M ###file size max_binlog_size = 50m innodb_log_file_size=128M ###replication server-id=1 log_bin=ON binlog_expire_logs_seconds = 2592000 binlog_format=ROW gtid_mode=on enforce_gtid_consistency=on log-slave-updates=1 skip_slave_start=0 enforce_gtid_consistency=ON master_info_repository=TABLE relay_log_info_repository=TABLE binlog_checksum=NONE log_bin=/data/mysql/mysqldata/mysql3306/binlog/mysql-bin log_bin_index=/data/mysql/mysqldata/mysql3306/binlog/mysql-bin.index relay-log-index = /data/mysql/mysqldata/mysql3306/relaylog/mysql-relay-bin.index relay-log = /data/mysql/mysqldata/mysql3306/relaylog/mysql-relay-bin
修改用戶權(quán)限
useradd mysql chown -R mysql:mysql /data/mysql/mysqldata/ chown -R mysql:mysql /data/mysql/mysqlbase/ chmod 755 /data/mysql/mysqlbase/ chmod 755 /data/mysql/mysqldata/
啟動(dòng)數(shù)據(jù)庫(kù)
/data/mysql/mysqlbase/mysql3306/bin/mysqld --defaults-file=/data/mysql/mysqldata/mysql3306/my8.cnf --datadir=/data/mysql/mysqldata/mysql3306/data --user=mysql --initialize-insecure --console /data/mysql/mysqlbase/mysql3306/bin/mysqld_safe --defaults-file=/data/mysql/mysqldata/mysql3306/my8.cnf 2>&1 &
登錄數(shù)據(jù)庫(kù)修改密碼
/data/mysql/mysqlbase/mysql3306/bin/mysql -S /data/mysql/mysqldata/mysql3306/sock/mysql.sock -A SET SQL_LOG_BIN=0; ALTER USER 'root'@'localhost' IDENTIFIED BY 'root'; update mysql.user set host='%' where user='root'; flush privileges; SET SQL_LOG_BIN=1; exit; /data/mysql/mysqlbase/mysql3306/bin/mysql -uroot -proot -S /data/mysql/mysqldata/mysql3306/sock/mysql.sock -A
mgr配置
創(chuàng)建mgr用戶(三個(gè))
SET SQL_LOG_BIN=0; CREATE USER mgruser@'%' IDENTIFIED BY 'mgruser'; GRANT REPLICATION SLAVE ON *.* TO mgruser@'%'; #MySQL8.0默認(rèn)認(rèn)證插件為 caching_sha2_password,需要ssl,在啟動(dòng)mgr的時(shí)候沒有ssl會(huì)報(bào)錯(cuò),修改為mysql_native_password 避免 ALTER USER 'mgruser'@'%' IDENTIFIED WITH mysql_native_password BY 'mgruser'; FLUSH PRIVILEGES; SET SQL_LOG_BIN=1; CHANGE MASTER TO MASTER_USER='mgruser', MASTER_PASSWORD='mgruser' FOR CHANNEL 'group_replication_recovery';
安裝mgr插件(三個(gè))
install PLUGIN group_replication SONAME 'group_replication.so'; show plugins;
添加配置文件
主節(jié)點(diǎn)
vim /data/mysql/mysqldata/mysql3306/my8.cnf #修改server_id,每個(gè)節(jié)點(diǎn)必須不一樣 server-id=1 ###mgr # 8.0 默認(rèn)值XXHASH64,針對(duì)寫事務(wù)進(jìn)行哈希處理 transaction_write_set_extraction=XXHASH64 # 啟動(dòng)加載組復(fù)制插件 #plugin_load_add='group_replication.so' # 集群唯一ID group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" # 是否啟動(dòng)MySQL服務(wù)時(shí)啟動(dòng)組復(fù)制,建議值:off group_replication_start_on_boot=off # 本地IP后面端口33061可自定義,集群通信端口,建議統(tǒng)一端口 group_replication_local_address= "192.168.160.205:33061" # 初始化集群成員列表,可動(dòng)態(tài)修改 group_replication_group_seeds= "192.168.160.205:33061,192.168.160.203:33061,192.168.160.206:33061" # 判斷是否為引導(dǎo)組 group_replication_bootstrap_group=off group_replication_single_primary_mode = ON # 單主模式(默認(rèn),可選多主模式 OFF) # 設(shè)置白名單,這里特別注意,如果是同網(wǎng)段可以不用設(shè)置,如果是不同網(wǎng)段則需要修改否則通信端口不可訪問 loose-group_replication_ip_whitelist='192.168.160.205,192.168.160.203,192.168.160.206'
節(jié)點(diǎn)2
vim /data/mysql/mysqldata/mysql3306/my8.cnf #修改server_id,每個(gè)節(jié)點(diǎn)必須不一樣 server-id=2 ###mgr # 8.0 默認(rèn)值XXHASH64,針對(duì)寫事務(wù)進(jìn)行哈希處理 transaction_write_set_extraction=XXHASH64 # 啟動(dòng)加載組復(fù)制插件 #plugin_load_add='group_replication.so' # 集群唯一ID group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" # 是否啟動(dòng)MySQL服務(wù)時(shí)啟動(dòng)組復(fù)制,建議值:off group_replication_start_on_boot=off # 本地IP后面端口33061可自定義,集群通信端口,建議統(tǒng)一端口 group_replication_local_address= "192.168.160.203:33061" # 初始化集群成員列表,可動(dòng)態(tài)修改 group_replication_group_seeds= "192.168.160.205:33061,192.168.160.203:33061,192.168.160.206:33061" # 判斷是否為引導(dǎo)組 group_replication_bootstrap_group=off group_replication_single_primary_mode = ON # 單主模式(默認(rèn),可選多主模式 OFF) # 設(shè)置白名單,這里特別注意,如果是同網(wǎng)段可以不用設(shè)置,如果是不同網(wǎng)段則需要修改否則通信端口不可訪問 loose-group_replication_ip_whitelist='192.168.160.205,192.168.160.203,192.168.160.206'
節(jié)點(diǎn)3
vim /data/mysql/mysqldata/mysql3306/my8.cnf #修改server_id,每個(gè)節(jié)點(diǎn)必須不一樣 server-id=3 ###mgr # 8.0 默認(rèn)值XXHASH64,針對(duì)寫事務(wù)進(jìn)行哈希處理 transaction_write_set_extraction=XXHASH64 # 啟動(dòng)加載組復(fù)制插件 #plugin_load_add='group_replication.so' # 集群唯一ID group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" # 是否啟動(dòng)MySQL服務(wù)時(shí)啟動(dòng)組復(fù)制,建議值:off group_replication_start_on_boot=off # 本地IP后面端口33061可自定義,集群通信端口,建議統(tǒng)一端口 group_replication_local_address= "192.168.160.206:33061" # 初始化集群成員列表,可動(dòng)態(tài)修改 group_replication_group_seeds= "192.168.160.205:33061,192.168.160.203:33061,192.168.160.206:33061" # 判斷是否為引導(dǎo)組 group_replication_bootstrap_group=off group_replication_single_primary_mode = ON # 單主模式(默認(rèn),可選多主模式 OFF) # 設(shè)置白名單,這里特別注意,如果是同網(wǎng)段可以不用設(shè)置,如果是不同網(wǎng)段則需要修改否則通信端口不可訪問 loose-group_replication_ip_whitelist='192.168.160.205,192.168.160.203,192.168.160.206'
重啟MySQL服務(wù)(三個(gè))
shutdown; exit; /data/mysql/mysqlbase/mysql3306/bin/mysqld_safe --defaults-file=/data/mysql/mysqldata/mysql3306/my8.cnf 2>&1 & /data/mysql/mysqlbase/mysql3306/bin/mysql -uroot -proot -S /data/mysql/mysqldata/mysql3306/sock/mysql.sock -A
主庫(kù)啟動(dòng)mgr
SET GLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_group=OFF;
從庫(kù)加入mgr
START GROUP_REPLICATION;
查看成員狀態(tài)
SELECT * FROM performance_schema.replication_group_members;

mgr常用命令
-- 啟動(dòng)MGR(節(jié)點(diǎn)加入集群)
START GROUP_REPLICATION;
-- 停止MGR(節(jié)點(diǎn)退出集群)
STOP GROUP_REPLICATION;
---------------------------------------------------------------------------------
-- 查看所有節(jié)點(diǎn)的ID、主機(jī)、端口、狀態(tài)(ONLINE/RECOVERING/OFFLINE等)
SELECT * FROM performance_schema.replication_group_members;
-------------------------------------------------------------------------------
-- 區(qū)分主節(jié)點(diǎn)(PRIMARY)和從節(jié)點(diǎn)(SECONDARY)
SELECT member_id, member_host, member_role FROM performance_schema.replication_group_members;
-----------------------------------------------------------------------------
-- 對(duì)比所有節(jié)點(diǎn)已執(zhí)行的GTID集合,確認(rèn)數(shù)據(jù)是否一致
SELECT member_id,member_host,@@global.gtid_executed AS executed_gtid
FROM performance_schema.replication_group_members;
-----------------------------------------------------------------------------
-- 查看節(jié)點(diǎn)發(fā)送/接收字節(jié)數(shù)、事務(wù)數(shù)等
SELECT * FROM performance_schema.replication_group_member_stats;
----------------------------------------------------------------------------
--加入新節(jié)點(diǎn),在新節(jié)點(diǎn)執(zhí)行以下命令
-- 1. 配置集群通信用戶(與集群其他節(jié)點(diǎn)一致)
CHANGE REPLICATION SOURCE TO
SOURCE_USER = 'mgr_repl', -- 復(fù)制用戶名
SOURCE_PASSWORD = 'repl_pass' -- 密碼
FOR CHANNEL 'group_replication_recovery';
-- 2. 啟動(dòng)MGR加入集群
START GROUP_REPLICATION;
---------------------------------------------------------------------------
--單主模式下切換主節(jié)點(diǎn)(集群必須要是正常的)
-- 語(yǔ)法:SELECT group_replication_set_as_primary('目標(biāo)節(jié)點(diǎn)的member_id');
-- 示例:將member_id為'1234-...'的節(jié)點(diǎn)設(shè)為主節(jié)點(diǎn)
SELECT group_replication_set_as_primary('12345678-aaaa-bbbb-cccc-1234567890ab');
--------------------------------------------------------------------------
--切換集群模式
-- 1. 所有節(jié)點(diǎn)停止MGR
STOP GROUP_REPLICATION;
-- 2. 切換為多主模式(所有節(jié)點(diǎn)執(zhí)行)
SET GLOBAL group_replication_single_primary_mode = OFF;
-- 或切換為單主模式
SET GLOBAL group_replication_single_primary_mode = ON;
-- 3. 所有節(jié)點(diǎn)重啟MGR生效
START GROUP_REPLICATION;
--------------------------------------------------------------------------
-- 查看group_replication_recovery通道的連接狀態(tài)(節(jié)點(diǎn)加入時(shí)的數(shù)據(jù)同步)
SELECT * FROM performance_schema.replication_connection_status
WHERE CHANNEL_NAME = 'group_replication_recovery';
-------------------------------------------------------------------------
--重置節(jié)點(diǎn)復(fù)制配置信息
-- 停止MGR
STOP GROUP_REPLICATION;
-- 重置recovery通道的復(fù)制配置
RESET SLAVE ALL FOR CHANNEL 'group_replication_recovery';
-- 重新配置復(fù)制用戶(若需)
CHANGE REPLICATION SOURCE TO
SOURCE_USER = 'mgr_repl',
SOURCE_PASSWORD = 'repl_pass'
FOR CHANNEL 'group_replication_recovery';
-- 重啟MGR
START GROUP_REPLICATION;
---------------------------------------------------------------------------到此這篇關(guān)于MySQL mgr搭建的實(shí)現(xiàn)步驟的文章就介紹到這了,更多相關(guān)MySQL mgr搭建內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql踩坑之limit與sum函數(shù)混合使用問題詳解
這篇文章主要給大家介紹了關(guān)于mysql踩坑之limit與sum函數(shù)混合使用問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
使用innodb_force_recovery解決MySQL崩潰無法重啟問題
這篇文章主要介紹了使用innodb_force_recovery解決MySQL崩潰無法重啟問題,這只一個(gè)成功案例,并不是萬能的解決方法,需要酌情考慮,需要的朋友可以參考下2015-05-05
MySQL asc、desc數(shù)據(jù)排序的實(shí)現(xiàn)
這篇文章主要介紹了MySQL asc、desc數(shù)據(jù)排序的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
MySQL:Unsafe statement written to the binary log using state
這篇文章主要介紹了MySQL:Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEM,需要的朋友可以參考下2016-05-05
MySQL連接異常場(chǎng)景模擬與排查的實(shí)戰(zhàn)指南
在日常開發(fā)與運(yùn)維中,MySQL連接故障是高頻問題,若無法快速定位根源,會(huì)嚴(yán)重影響業(yè)務(wù)穩(wěn)定性,本文通過實(shí)驗(yàn)?zāi)M8種常見MySQL連接異常場(chǎng)景,結(jié)合具體操作步驟與報(bào)錯(cuò)信息,梳理出有報(bào)錯(cuò)和無報(bào)錯(cuò)兩種情況下的排查思路,需要的朋友可以參考下2026-01-01
MySQL中的case?when中對(duì)于NULL值判斷的坑及解決
這篇文章主要介紹了MySQL中的case?when中對(duì)于NULL值判斷的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12

