日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql集群重启报错lock_CentOS7.2 下 MySQL 之 PXC 集群部署【Docker+单机多节点】

發(fā)布時(shí)間:2023/12/10 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql集群重启报错lock_CentOS7.2 下 MySQL 之 PXC 集群部署【Docker+单机多节点】 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

背景

【注意】: 鄙人認(rèn)為本篇適合做入門測(cè)試/學(xué)習(xí)之用,選擇的 "單機(jī)多節(jié)點(diǎn)配置",后面再整理 "多機(jī)配置"文章.

近期正突擊學(xué)習(xí)數(shù)據(jù)庫(kù)知識(shí)

想著對(duì) PXC 集群部署實(shí)際操作一番,提高技能點(diǎn),為后續(xù)的升職加薪做充足的準(zhǔn)備

于是,在此記錄一下,

既能作為采坑筆記,又能幫助到后期有需要的道友,歡迎指摘 …

【注】:Percona XtraDB Cluster(簡(jiǎn)稱 PXC 集群)

PXC的優(yōu)缺點(diǎn)

PXC 最大的優(yōu)勢(shì):強(qiáng)一致性、無同步延遲, 推薦閱讀: 【Docker 部署 Mysql集群】

MySQL 常見集群方案 【Replication vs PXC】

環(huán)境

CentOS版本: CentOS Linux release 7.9.2009 (Core)

MySQL 版本: 5.7.32

PXC 版本 : percona/percona-xtradb-cluster:5.7

其實(shí),一開始,鄙人也是計(jì)劃直接操作多機(jī)部署經(jīng)驗(yàn),基本百度出來的都是這一類的,只好先摸索一番吧 …

前期準(zhǔn)備

1). 開啟四個(gè) PXC 環(huán)境所涉及的端口:

3306:# mysql 實(shí)例端口

4567:# PXC cluster 相互通訊的端口

4444:# 用于 SST(State Snapshot Transfer): 全量傳輸

4568:# 用于 IST(Incremental state Transfer):增量傳輸傳送

以鄙人使用寶塔面板操作為例,注意以上端口的開啟:

2). 部署前建議關(guān)閉 SELINUX、將 MySQL 數(shù)據(jù)庫(kù)服務(wù)停止

安全增強(qiáng)型 Linux(Security-Enhanced Linux)SELinux 主要由美國(guó)國(guó)家安全局開發(fā)

一種方法【薦】,永久關(guān)閉 Selinux:

"vi /etc/selinux/config" 把 "SELINUX" 屬性值設(shè)置成 disabled,然后 reboot 重啟

另一種方法,或者執(zhí)行命令 Linux 臨時(shí)關(guān)閉 Selinux: "setenforce 0"

3). 安裝 "docker"

因?yàn)?#xff0c;PXC 官方提供了 Docker 鏡像,所以我們可以很方便的搭建 PXC 集群

所以,如果沒有安裝 "docker",需要先執(zhí)行命令: yum install docker

搭建 PXC 集群

1). 下載 PXC 鏡像 (可以指定版本)

Docker 倉(cāng)庫(kù)中的 PXC 官方鏡像:https://hub.docker.com/r/percona/percona-xtradb-cluster

因?yàn)槲宜褂玫?MySQL 版本為 5.7.32,此處對(duì)應(yīng)選擇的 PXC 版本就是 5.7

docker pull percona/percona-xtradb-cluster:5.7

[root@localhost download]# docker pull percona/percona-xtradb-cluster:5.7

Trying to pull repository docker.io/percona/percona-xtradb-cluster ...

5.7: Pulling from docker.io/percona/percona-xtradb-cluster

75f829a71a1c: Already exists

cf0efe55f10d: Already exists

e632c0ccd2fb: Already exists

4c86e21499a1: Already exists

32a8cd67d865: Already exists

3672a73f6188: Already exists

6c6c92c55055: Already exists

cd786bd32ef1: Pull complete

8236bd03304c: Pull complete

bd59b303b228: Pull complete

c574c241c2a3: Pull complete

030daf9905bb: Pull complete

Digest: sha256:d95cfa86d2dca1a2c62c05e53050fd569512bf4b78d867b0e5f8f234d7f3999a

Status: Downloaded newer image for docker.io/percona/percona-xtradb-cluster:5.7

[root@localhost download]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

docker.io/percona/percona-xtradb-cluster 5.7 3a0dc027d8ac 2 months ago 442 MB

重命名鏡像名稱 (名稱太長(zhǎng),重命名一下)

docker tag percona/percona-xtradb-cluster:5.7 pxc

刪除原始鏡像

docker rmi percona/percona-xtradb-cluster:5.7

2). 創(chuàng)建 Docker 網(wǎng)絡(luò),

出于安全考慮,給 PXC 集群創(chuàng)建 Docker 內(nèi)部網(wǎng)絡(luò),用于 PXC 集群獨(dú)立使用

docker network create --subnet=172.20.0.0/16 pxc-network-mT

【拓展】:

查看網(wǎng)段: docker network inspect pxc-network-mT

所有網(wǎng)段: docker network ls

刪除網(wǎng)段: docker network rm pxc-network-mT

3). 創(chuàng)建數(shù)據(jù)卷 (用于之后掛載)

使用 Docker 時(shí),業(yè)務(wù)數(shù)據(jù)應(yīng)保存在宿主機(jī)中,采用目錄映射,這樣可以使數(shù)據(jù)與容器獨(dú)立。

但是容器中的 PXC 無法直接使用映射目錄,解決辦法是采用 Docker 卷 來映射

本文以最常用的三個(gè)節(jié)點(diǎn)作為配置,所以就可以創(chuàng)建三個(gè)數(shù)據(jù)卷

[root@localhost ~]# docker volume create vMZ1

vMZ1

[root@localhost ~]# docker volume create vMZ2

vMZ2

[root@localhost ~]# docker volume create vMZ3

vMZ3

【拓展】: 刪除數(shù)據(jù)卷命令為: docker volume rm vMZ1 (最后一項(xiàng)為數(shù)據(jù)卷名稱,可自定義)

查看數(shù)據(jù)卷

[root@localhost download]# docker inspect vMZ1

[

{

"Driver": "local",

"Labels": {},

"Mountpoint": "/var/lib/docker/volumes/vMZ1/_data", # 這里是在宿主機(jī)的保存位置

"Name": "vMZ1",

"Options": {},

"Scope": "local"

}

]

4). 創(chuàng)建節(jié)點(diǎn)(PXC 容器)

注意:在這一步之前,要把 MySQL 數(shù)據(jù)庫(kù)停止服務(wù) !

[root@localhost ~]# service mysqld status

SUCCESS! MySQL running (1992)

[root@localhost ~]# service mysqld stop

Shutting down MySQL.. SUCCESS!

A. 創(chuàng)建第一個(gè)節(jié)點(diǎn)

執(zhí)行命令(對(duì)于參數(shù)釋義,請(qǐng)移步 【附錄 - a】 ):

docker run -di --name=node1 --net=pxc-network-mT -p 9000:3306 -v vMZ1:/var/lib/mysql --privileged -e MYSQL_ROOT_PASSWORD=mT123456 -e CLUSTER_NAME=cluster-mT -e XTRABACKUP_PASSWORD=mT123456 --ip 172.20.0.2 pxc

因?yàn)楹罄m(xù)節(jié)點(diǎn)的添加需要關(guān)聯(lián)到第一個(gè)節(jié)點(diǎn),

所以,此時(shí)需要等待數(shù)據(jù)庫(kù)啟動(dòng)完成 【自動(dòng)執(zhí)行,正常情況下會(huì)發(fā)現(xiàn) mySQL 服務(wù)啟動(dòng)了!】

通過查看日志

docker logs node1

如果出現(xiàn)下面的輸出,證明啟動(dòng)成功;

"2021-01-08T10:00:17.143767Z 0 [Note] InnoDB: Buffer pool(s) load completed at 210108 10:00:17"

【拓展】:

如果發(fā)現(xiàn)啟動(dòng)有誤,建議先將容器停止,不然 mysqld 服務(wù)各種報(bào)錯(cuò)

刪除節(jié)點(diǎn)命令為: docker rm node1

停止節(jié)點(diǎn)運(yùn)行:docker stop node1

查看所有節(jié)點(diǎn):docker ps

此時(shí),可以通過 Navicat 等數(shù)據(jù)庫(kù)連接工具測(cè)試是否能夠連接 【前提:9000 端口開放】

也可以同過命令 :docker ps,查看已創(chuàng)建的節(jié)點(diǎn)

B. 加入第二個(gè)/第三個(gè)…節(jié)點(diǎn)

只有主節(jié)點(diǎn)可以訪問了,才能創(chuàng)建從節(jié)點(diǎn)

加入第二個(gè)節(jié)點(diǎn),執(zhí)行命令:

docker run -di --name=node2 --net=pxc-network-mT -p 9001:3306 -v vMZ2:/var/lib/mysql --privileged -e MYSQL_ROOT_PASSWORD=mT123456 -e CLUSTER_NAME=cluster-mT -e XTRABACKUP_PASSWORD=mT123456 -e CLUSTER_JOIN=node1 --ip 172.20.0.3 pxc

需要注意是: 第二個(gè)節(jié)點(diǎn)開始需要增加 -e CLUSTER_JOIN=node1 參數(shù)

表示與 node1 節(jié)點(diǎn)同步,否則 node2容器會(huì)自動(dòng)關(guān)閉

當(dāng) PXC 集群中存在兩個(gè)節(jié)點(diǎn)以上之后就沒有主節(jié)點(diǎn)的概念了。集群中最后一個(gè)退出的節(jié)點(diǎn)就會(huì)變?yōu)橹鞴?jié)點(diǎn)

加入第三個(gè)節(jié)點(diǎn),執(zhí)行命令:

docker run -di --name=node3 --net=pxc-network-mT -p 9002:3306 -v vMZ3:/var/lib/mysql --privileged -e MYSQL_ROOT_PASSWORD=mT123456 -e CLUSTER_NAME=cluster-mT -e XTRABACKUP_PASSWORD=mT123456 -e CLUSTER_JOIN=node1 --ip 172.20.0.4 pxc

查看掛載情況

[root@localhost ~]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

db0a01e25a4d pxc "/entrypoint.sh my..." 5 seconds ago Up 4 seconds 4567-4568/tcp, 0.0.0.0:9002->3306/tcp node3

501d6b015853 pxc "/entrypoint.sh my..." 6 minutes ago Up 6 minutes 4567-4568/tcp, 0.0.0.0:9001->3306/tcp node2

079cfbecc5b0 pxc "/entrypoint.sh my..." 27 minutes ago Up 27 minutes 4567-4568/tcp, 0.0.0.0:9000->3306/tcp node1

[root@localhost ~]#

進(jìn)入 node1 節(jié)點(diǎn)

docker exec -it node1 /usr/bin/mysql -uroot -pmT123456

查看狀態(tài)

mysql> show status like 'wsrep%';

可以看到 "wsrep_incoming_addresses" 的值就是我們?nèi)齻€(gè)容器的IP地址

" wsrep_incoming_addresses | db0a01e25a4d:3306,501d6b015853:3306,079cfbecc5b0:3306 "

5). 集群同步驗(yàn)證

最直接的方式就是操作數(shù)據(jù)庫(kù),進(jìn)行數(shù)據(jù)比對(duì)

為了操作方便,我直接使用 Navicat 客戶端,分別使用端口 "9000、9001、9002" 連接

然后,在節(jié)點(diǎn) node2 上,創(chuàng)建數(shù)據(jù)庫(kù) test_pxc,以及表 test-pxc

隨便更改數(shù)據(jù),會(huì)發(fā)現(xiàn),其他節(jié)點(diǎn)的數(shù)據(jù)也是同步變化的

初步探索到這吧,后面再做多機(jī)部署的測(cè)試、整理 …

宕機(jī)操作

對(duì)于節(jié)點(diǎn)的停止操作,分第一個(gè)節(jié)點(diǎn)和其他節(jié)點(diǎn),是不同的!

1). 如果 【node1】 節(jié)點(diǎn)不是最后一個(gè)離開集群

如果 【node1】 節(jié)點(diǎn)不是最后一個(gè)離開集群的不能再以主節(jié)點(diǎn)的形式啟動(dòng)了

此時(shí),只運(yùn)行 "docker start node1" 命令,過會(huì)會(huì)發(fā)現(xiàn) 【node1】沒有啟動(dòng)

這時(shí),需要通過 "docker volume inspect vMZ1",進(jìn)入數(shù)據(jù)卷目錄,查看是否存在 grastate.dat文件

將 "safe_to_bootstrap" 參數(shù)值修改為 1,保存退出

然后再進(jìn)入 【node1】節(jié)點(diǎn)中查看數(shù)據(jù)

試著修改一下,看是否和其他節(jié)點(diǎn)數(shù)據(jù)同步

我發(fā)現(xiàn)我這里時(shí)可以同步的

但根據(jù)網(wǎng)友經(jīng)驗(yàn)多數(shù)是不會(huì)同步的

此時(shí),可以 刪除 【node1】容器 : docker stop node1、docker rm node1

然后再以從節(jié)點(diǎn)方式加入集群,注意參數(shù) "-e CLUSTER_JOIN=node3" 的指定(此時(shí)是【node3】未停止)

后面再檢查數(shù)據(jù)是否能同步 !

2). 如果其他以指定主節(jié)點(diǎn)形式的節(jié)點(diǎn)離開集群后

可以通過命令:docker start node2(形如), 進(jìn)入 PXC 集群創(chuàng)建的容器

然后,通過 docker ps 查看是否進(jìn)入成功

附錄

a. 創(chuàng)建節(jié)點(diǎn)參數(shù)解釋

–name=node1 :容器名稱

–net=pxc-network-mT:加入到 pxc-network-mT 的虛擬網(wǎng)絡(luò)

-p 9000:3306:隨機(jī)端口映射,容器內(nèi)部端口9000隨機(jī)映射到主機(jī) mySQL 數(shù)據(jù)庫(kù)的 3306 端口

-v vMZ1:/var/lib/mysql:數(shù)據(jù)卷掛載在 "vMZ1" 數(shù)據(jù)卷。可以理解為虛擬的磁盤,容器在保存數(shù)據(jù)的時(shí)候往 /var/lib/mysql 路徑保存數(shù)據(jù),其實(shí)就是把數(shù)據(jù)包存在數(shù)據(jù)卷上了

–privileged:表示有讀寫權(quán)限

-e MYSQL_ROOT_PASSWORD=mT123456 :Mysql 的 root 密碼 (跟原來數(shù)據(jù)庫(kù)設(shè)定的 root 密碼沒關(guān)系)

-e CLUSTER_NAME=cluster-mT:PXC 集群名稱 (注意不要命為:PXC)

-e XTRABACKUP_PASSWORD=mT123456 :PXC 集群之間數(shù)據(jù)同步的密碼

-e CLUSTER_JOIN=node1 :表示與 node1 節(jié)點(diǎn)同步

pxc:來自哪個(gè)鏡像創(chuàng)建

b. 數(shù)據(jù)卷操作指令

查看當(dāng)前存在的數(shù)據(jù)卷

docker volume ls

創(chuàng)建一個(gè)的數(shù)據(jù)卷 ,name:數(shù)據(jù)卷名稱

docker volume create ${name}

刪除某個(gè)數(shù)據(jù)卷,name:數(shù)據(jù)卷名稱

docker volume rm ${name}

查看某個(gè)數(shù)據(jù)卷,name:數(shù)據(jù)卷名稱

docker volume inspect ${name}

c. 文章

d. 報(bào)錯(cuò)排查及解決

1). ERROR! MySQL server PID file could not be found!

基本就是 節(jié)點(diǎn)啟動(dòng)有警告、錯(cuò)誤信息

建議,先退出節(jié)點(diǎn),排查錯(cuò)誤:基本上退出后,就不用報(bào)這個(gè)錯(cuò)咯 …

2). Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

執(zhí)行命令:

systemctl restart docker.service

3). ERROR! MySQL is not running, but lock file (/var/lock/subsys/mysql) exists

那就刪除這個(gè)文件

第一個(gè)節(jié)點(diǎn)啟動(dòng),報(bào)錯(cuò)

2021-01-07T12:09:53.283195Z 0 [Note] Event Scheduler: Loaded 0 events

2021-01-07T12:09:53.283401Z 0 [Note] mysqld: ready for connections.

Version: '5.7.31-34-57' socket: '/tmp/mysql.sock' port: 3306 Percona XtraDB Cluster (GPL), Release rel34, Revision d76a6e8, WSREP version 31.45, wsrep_31.45

2021-01-07T12:09:53.285952Z 2 [Note] WSREP: Initialized wsrep sidno 2

2021-01-07T12:09:53.285963Z 2 [Note] WSREP: Auto Increment Offset/Increment re-align with cluster membership change (Offset: 1 -> 1) (Increment: 1 -> 1)

2021-01-07T12:09:53.285973Z 2 [Note] WSREP: wsrep_notify_cmd is not defined, skipping notification.

2021-01-07T12:09:53.286017Z 2 [Note] WSREP: Assign initial position for certification: 18, protocol version: 4

2021-01-07T12:09:53.286056Z 0 [Note] WSREP: Service thread queue flushed.

2021-01-07T12:09:53.286093Z 2 [Note] WSREP: GCache history reset: 23f2c29d-50b6-11eb-9f32-1eec49f8ecb5:0 -> 23f2c29d-50b6-11eb-9f32-1eec49f8ecb5:18

2021-01-07T12:09:53.288361Z 2 [Note] WSREP: Synchronized with group, ready for connections

2021-01-07T12:09:53.288374Z 2 [Note] WSREP: Setting wsrep_ready to true

2021-01-07T12:09:53.288377Z 2 [Note] WSREP: wsrep_notify_cmd is not defined, skipping notification.

如果發(fā)現(xiàn)啟動(dòng)有誤,建議先將容器停止,不然 MySQL 服務(wù)各種報(bào)錯(cuò)

[root@localhost ~]# docker stop pn-mT1

pn-mT1

[root@localhost ~]# docker rm pn-mT1

pn-mT1

[root@localhost ~]#

此時(shí),會(huì)注意到 MySQL 服務(wù)自動(dòng)停止

5). transport: x509: certificate has expired or is not yet valid

[root@localhost ~]# yum -y install ntp ntpdate

[root@localhost ~]# ntpdate 0.asia.pool.ntp.org

[root@localhost ~]# hwclock --systohc

[root@localhost ~]# date

2021年 01月 08日 星期五 09:54:23 CST

本文同步分享在 博客“moTzxx”(CSDN)。

如有侵權(quán),請(qǐng)聯(lián)系 support@oschina.cn 刪除。

本文參與“OSC源創(chuàng)計(jì)劃”,歡迎正在閱讀的你也加入,一起分享。

總結(jié)

以上是生活随笔為你收集整理的mysql集群重启报错lock_CentOS7.2 下 MySQL 之 PXC 集群部署【Docker+单机多节点】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。