MySQL 集群是一種高可用性、高性能的數據庫解決方案,旨在支持分布式應用程序,允許多個 MySQL 實例以集群的方式共同工作,提供數據冗余和故障恢復能力
搭建 Mysql 集群
華為云放行端口 3666 和 3667
1、購買華為云 Flexus X 實例
Flexus云服務器X實例-華為云 (huaweicloud.com)
2、安裝 docker,并檢查安裝版本(此處我已安裝不做演示)
curl-fsSLhttps://get.docker.com | bash
docker-version
3、拉取 Mysql 鏡像
dockerpull mysql:5.7
4、創建所需目錄,在容器外創建用于存儲日志、數據和配置文件的目錄。這些目錄會在容器運行時被掛載,確保數據持久化
? /mysql-master/log:用于存放 MySQL 日志文件
? /mysql-master/data:用于存放 MySQL 數據庫文件
? /mysql-master/conf:用于存放 MySQL 配置文件
mkdir-p/mysql-master/log
mkdir-p/mysql-master/data
mkdir-p/mysql-master/conf
5、運行 MySQL 容器,使用以下命令運行 MySQL 容器。這里將容器的 3306 端口映射到主機的 3666 端口,并掛載了之前創建的目錄
dockerrun -itd-p3666:3306 --namemysql-master -v/mysql-master/log:/var/log/mysql -v/mysql-master/data:/var/lib/mysql -v/mysql-master/conf:/etc/mysql -eMYSQL_ROOT_PASSWORD=password --privileged=true mysql:5.7
6、檢查是否部署成功 docker ps 查看,有 mysql 說明部署成功
docker ps
?如上如果部署失敗 docker ps 會看不到 mysql,需要查看日志,然后根據日志給出的報錯提示修改,多半是文件沒有創建,根據要求創建對應文件即可
docker logs mysql-master
7、mysql 配置主節點文件配置
vim /mysql-master/conf/my.cnf
[mysqld]
server_id=101
binlog-ignore-db=mysql
log-bin=mall-mysql-bin
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
slave_skip_errors=1062
8、從節點上創建用于 MySQL 從節點的日志、數據和配置文件目錄
mkdir-p/mysql-master/log
mkdir-p/mysql-master/data
mkdir-p/mysql-master/conf
dockerrun -itd-p3666:3306 --namemysql-master -v/mysql-master/log:/var/log/mysql -v/mysql-master/data:/var/lib/mysql -v/mysql-master/conf:/etc/mysql -eMYSQL_ROOT_PASSWORD=password --privileged=true mysql:5.7
9、主節點上創建用于 MySQL 從節點的日志、數據和配置文件目錄
mkdir-p/mysql-slave/log
mkdir-p/mysql-slave/data
mkdir-p/mysql-slave/conf
dockerrun -itd-p3667:3306 --namemysql-slave -v/mysql-slave/log:/var/log/mysql -v/mysql-slave/data:/var/lib/mysql -v/mysql-slave/conf:/etc/mysql -eMYSQL_ROOT_PASSWORD=password --privileged=true --linkmysql-master:mysql-master mysql:5.7
?端口映射:將宿主機的 3667端口映射到容器的 3306端口。
?數據掛載:將日志、數據和配置文件目錄掛載到容器內部,保證數據持久化。
?環境變量:設置 MySQL 根用戶的密碼為 password。
?--link:使從節點能夠連接到主節點 mysql-master,并將其映射為主機名 mysql-master
10、查看容器狀態
docker ps
11、mysql 配置主節點和從節點配置
?mysql 配置主節點文件配置
vim/mysql-master/conf/my.cnf
[mysqld]
server_id=101
binlog-ignore-db=mysql
log-bin=mall-mysql-bin
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
slave_skip_errors=1062
character-set-server=utf8
?mysql 配置從節點文件配置
vim/mysql-slave/conf/my.cnf
[mysqld]
server_id=102
binlog-ignore-db=mysql
log-bin=mall-mysql-slave1-bin
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
slave_skip_errors=1062
relay_log=mall-mysql-relay-bin
log_slave_updates=1
read_only=1
character-set-server=utf8
12、進入 mysql 容器,連接到 MySQL 主節點
dockerexec -itmysql-master bash
mysql-uroot-ppassword-h60.204.147.160 -P3666
mysql: 調用 MySQL 客戶端。
-uroot: 指定使用 root用戶連接數據庫。
-ppassword: 指定 root用戶的密碼為 password(-p后面沒有空格)
-h 123.249.27.118: 指定要連接的主節點的 IP 地址。
-P 3666: 指定 MySQL 服務監聽的端口號(這里是 3666)
?主服務器如下進行 mysql 操作創建一個新的 MySQL 用戶(slave),并授予其執行主從復制所需的權限。然后,通過刷新權限,確保這些更改能立即生效,以便用戶能夠開始使用這些權限
13、進入 mysql 容器,連接到 MySQL 從節點
dockerexec -itmysql-master bash
mysql-uroot-ppassword-h60.204.147.160 -P3667
?配置主服務器信息
change master to
master_host='60.204.147.160',
master_user='slave',
master_password='123456',
master_port=3666,
master_log_file='mall-mysql-bin.000001',
master_log_pos=761,
master_connect_retry=30;
startslave ;
?master_host: 指定主服務器的 IP 地址或主機名。在你的例子中,主服務器的 IP 地址是 123.249.27.118。
?master_user: 用于連接主服務器的用戶名。在這里使用的是 slave用戶。
?master_password: 用于連接主服務器的密碼,這里是 123456。
?master_port: 主服務器的端口號,默認情況下 MySQL 使用 3306,這里使用的是 3666。
?master_log_file: 指定主服務器的二進制日志文件名,用于同步數據。這通常是從主服務器執行 SHOW MASTER STATUS;獲取的。
?master_log_pos: 指定在二進制日志文件中的位置,表示從哪個位置開始復制數據。這個值也來自于 SHOW MASTER STATUS;。
?master_connect_retry: 當從服務器無法連接到主服務器時,重試連接的時間間隔(秒)。這里設置為 30 秒
?執行 START SLAVE;命令后,從服務器將開始與主服務器的連接,并開始復制數據
14、從服務器如下進行 mysql 操作創建一個新的 MySQL 用戶(slave),并授予其執行主從復制所需的權限。然后,通過刷新權限,確保這些更改能立即生效,以便用戶能夠開始使用這些權限
15、啟動復制進程
STARTSLAVE ;
16、檢查狀態
Slave_IO_Running
?值為 Yes: 表示從服務器的 I/O 線程正在運行,并且能夠成功連接到主服務器,正在接收來自主服務器的二進制日志事件。
?值為 No: 表示 I/O 線程沒有運行,可能由于無法連接到主服務器或存在其他錯誤。
Slave_SQL_Running
?值為 Yes: 表示從服務器的 SQL 線程正在運行,能夠成功處理接收到的日志事件并將其應用到從數據庫中。
?值為 No: 表示 SQL 線程沒有運行,可能是因為處理日志事件時遇到了錯誤或其他原因
如果這兩個狀態都為 Yes,說明主從復制配置正常,從服務器正在有效地接收和執行來自主服務器的更新
SHOW SLAVE STATUSG;
總結
華為云的 Flexus X 實例,不僅是為了其卓越的性能和穩定性,更因為其性價比極高的服務,在搭建 MySQL 集群的過程中,我體驗到了云計算與 Docker 容器技術的無縫結合,這使得我的數據庫管理和運維變得更加高效,在這個過程中,我深刻體會到持續學習的重要性,如果有志于提升運維技能的小伙伴們,可以考慮一起購買華為云的 Flexus X 實例,共同探討和學習更多關于云計算和容器化的實踐經驗,此外,當前正值華為云 828 大促,性價比極高的云服務為我們提供了絕佳的學習機會!
華為云828 Flexus X實例
-
云計算
+關注
關注
39文章
7833瀏覽量
137478 -
MySQL
+關注
關注
1文章
815瀏覽量
26605 -
Docker
+關注
關注
0文章
472瀏覽量
11864
發布評論請先 登錄
相關推薦
評論