828华为云征文|华为云 Flexus 云服务器 X 实例:在openEuler系统下搭建MySQL主从复制
- 前言
- 一、Flexus云服务器X实例介绍
- 二、MySQL数据库介绍
- 三、本次实践介绍
- 四、远程连接华为云Flexus云服务器X实例
- 五、检查Flexus云服务器X实例系统环境
- 六、MySQL主节点的创建及配置
- 七、MySQL从节点的创建及配置
- 八、配置主从同步
- 九、验证主从同步
- 十、使用体验与总结
前言
本文将介绍如何在华为云Flexus云服务器X实例上,基于openEuler系统部署MySQL主从复制。MySQL作为一款高性能且稳定的开源关系型数据库管理系统,是众多项目的首选。结合华为云Flexus云服务器X实例的强大算力与灵活配置,这一部署过程将变得尤为顺畅。通过本教程,将全面展现华为云在技术支持与服务方面的卓越表现。在数字化转型的路上,华为云无疑是强有力的伙伴。
一、Flexus云服务器X实例介绍
1.1 Flexus云服务器X实例简介
- 官网地址: 华为云Flexus云服务器X实例
华为云
Flexus云服务器X实例
是新一代面向中小企业和开发者的柔性算力云服务器。它能够智能感知业务负载的变化,自动调整资源配置。这款服务器特别适用于中低负载的应用场景,例如电商直播、企业网站建设、开发测试环境、游戏服务器以及音视频服务等。X实例的设计理念旨在为用户提供更加灵活和高效的计算资源管理方式。通过智能调整,它可以更好地满足不同业务的需求,提高资源利用率。
1.2 Flexus云服务器X实例特点
-
提供丰富的公共镜像
:Flexus云服务器X实例提供多种公共镜像供用户选择,方便快速部署各种应用和服务。 -
可灵活自定义vCPU内存配比
:用户可以根据自己的需要灵活调整虚拟CPU和内存的配比,以满足不同场景的需求。 -
智能感知业务动态升降配
:Flexus云服务器X实例能够智能感知业务的负载情况,并根据需要自动升降配,以满足业务的需求,提高系统的稳定性和性能。 -
负载范围更高
:相对于Flexus应用服务器L实例,Flexus云服务器X实例能够处理更高的负载,适用于更复杂和繁忙的场景。
1.3 Flexus云服务器X实例使用场景
Flexus云服务器X实例针对不同的使用场景展现出其独特的优势:
-
电商直播:利用X实例搭建电商交易平台,可以有效应对电商市场的瞬息万变,从容处理业务压力波动,确保交易过程顺畅无阻。
-
企业建站:面向博客、论坛和企业门户等应用场景,X实例帮助企业高效传播价值信息,促进信息共享与交流,支持构建多功能传播和交互平台。
-
个人开发测试:开发者在开发和测试过程中所需的环境资源可以通过X实例便捷获取,不仅提高了搭建效率,而且降低了成本。
-
游戏服务器:适用于搭建游戏后台服务器,强大的计算能力可以轻松应对大量玩家同时在线的情况,同时支持平滑扩容,快速应对玩家数量增长的需求,以及提供出色的网络加速能力以提升用户体验。
二、MySQL数据库介绍
2.1 MySQL简介
MySQL 是一款流行的开源关系型数据库管理系统,以其高性能和稳定性而闻名。它支持跨平台运行,可以在多种操作系统上部署。MySQL 提供了丰富的 SQL 功能和强大的数据处理能力,适用于从个人项目到大型企业应用的各种场景。此外,它还拥有活跃的社区支持,为用户提供了广泛的帮助资源。
2.2 MySQL主要特点
开源性
:MySQL 是基于 GPL(GNU General Public License)协议发布的开源软件,这意味着用户可以自由地使用、修改和分发 MySQL 软件。跨平台支持
:MySQL 可以运行在多种操作系统上,如 Windows、Linux、Unix、macOS 等。高可靠性
:MySQL 提供了多种机制来保证数据的一致性和完整性,包括事务处理、行级锁定等。高性能
:MySQL 以其快速的数据处理能力著称,尤其是在读取密集的应用场景中表现优异。它支持多种存储引擎,如 InnoDB 和 - MyISAM,每种引擎都有自己的特性来满足不同的性能需求。安全性
:MySQL 提供了多种安全措施,包括用户身份验证、权限控制、SSL 加密通信等,确保数据的安全性。易于使用和管理
:MySQL 拥有直观的管理工具和命令行工具,简化了数据库的管理和维护工作。丰富的 SQL 功能
:MySQL 支持标准的 SQL 查询语言,允许用户灵活地查询和操作数据。社区支持
:由于 MySQL 的广泛使用,它拥有庞大的开发者和用户社区,可以提供大量的文档、教程和支持。
2.3 MySQL主从复制简介
MySQL
的主从复制是一种数据复制技术,通过该技术可以将一个 MySQL 服务器(主服务器)的数据变更自动同步到一个或多个其他 MySQL 服务器(从服务器)。当在主服务器上执行数据更改(如插入、更新、删除)时,这些更改会被记录下来,并传输到从服务器,在那里这些更改会被重放,从而保持数据的一致性。主从复制不仅可以提高数据的可用性和冗余度,还可以用于负载均衡,将读取请求分散到多个从服务器上,从而提高系统的整体性能。此外,它还是灾难恢复策略的重要组成部分,有助于防止数据丢失。
三、本次实践介绍
3.1 本次实践简介
1.本次实践为个人测试学习环境,旨在快速部署应用,生产环境请谨慎;
2.本次实践环境为华为云Flexus云服务器X实例,使用的操作系统为openEuler 22.03 LTS;
3.本次实践在Docker环境下部署MySQL 主从复制。
3.2 本次环境规划
服务器类别 | 公共镜像选择 | 内网IP地址 | Docker版本 | 操作系统版本 | MySQL |
---|---|---|---|---|---|
华为云Flexus云服务器X实例 | openEuler | 192.168.0.169 | 26.1.3 | openEuler 22.03 LTS | 8.0 |
四、远程连接华为云Flexus云服务器X实例
4.1 购买Flexus云服务器X实例
进入华为云官网:https://activity.huaweicloud.com/,登录自己的华为云账号,进入华为云首页。
- 镜像选择:本次实践使用openEuler作为公共镜像,请根据实际需求自定义选择合适的操作系统镜像。
- 镜像切换说明:参考的公共镜像原为Huawei Cloud EulerOS,但本次实践中已切换至openEuler。
- 基础配置参考:购买时可参考以下基础配置进行选择。
1.计费模式:包年/包月,这里选择此模式;
2.区域:华北—北京四,可用区:随机即可;
3.实例规格:关闭性能模式,选择自定义,4vCPUs | 12GiB;
4.镜像:公共镜像,Huawei Cloud EulerOS,版本,Huawei Cloud EulerOS 2.0 Standard 64 bit(10GiB);
5.应用加速:这里选择不加速;
6.存储:系统盘,通用型SSD100G;
7.网络:选择默认即可;
8.安全组:选择默认即可;
9.弹性公网IP:选择“现在购买”,全动态BGP,带宽3Mbit/s;
10.云服务器名称:可自定义设置,这里选择默认的名称;
11.登录凭证:自定义设置密码;
12.云备份:暂不购买;
其余配置默认即可。
- 确认配置及购买:在确认配置页面仔细检查Flexus云服务器X实例的各项设置,确保无误后点击“立即购买”,完成付款流程即可成功购买。
4.2 查看Flexus云服务器X实例状态
进入华为云Flexus云服务的控制台,选择Flexus云服务器X实例,可以看到已经正在运行的Flexus云服务器X实例。
4.3 使用Xshell远程连接
- 复制Flexus云服务器X实例的弹性公网IP地址
- 主要填写Flexus云服务器X实例的弹性公网IP地址,输入其登录用户和密码,连接即可。
五、检查Flexus云服务器X实例系统环境
5.1 检查操作系统版本
检查Flexus云服务器X实例的操作系统版本,本次实践选择的版本为
openEuler 22.03 LTS
[root@flexusx-51a1 ~]# cat /etc/os-release
NAME="openEuler"
VERSION="22.03 LTS"
ID="openEuler"
VERSION_ID="22.03"
PRETTY_NAME="openEuler 22.03 LTS"
ANSI_COLOR="0;31"
5.2 检查内核版本
检查当前操作系统的内核版本,当前内核版本为
5.10.0-60.109.0.136.oe2203.x86_64
。
[root@flexusx-51a1 ~]# uname -r
5.10.0-60.109.0.136.oe2203.x86_64
5.3 检查Docker版本
部署该项目需要提前安装Docker环境,检查Docker版本,当前安装的Docker版本为
26.1.3
。
[root@flexusx-51a1 ~]# docker -v
Docker version 26.1.3, build b72abbb
5.4 检查Docker服务状态
检查Docker服务状态,确保Docker服务正常。
[root@flexusx-51a1 ~]# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2024-09-04 21:23:44 CST; 15min ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 10018 (dockerd)
Tasks: 10
Memory: 196.3M
CGroup: /system.slice/docker.service
└─ 10018 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
5.5 检查Docker compose版本
检查docker compose版本,当前默认安装版本为v2.27.0`。
[root@flexusx-51a1 ~]# docker compose version
Docker Compose version v2.27.0
六、MySQL主节点的创建及配置
6.1 下载MySQL镜像
执行以下命令,拉取MySQL镜像,使用的容器镜像名称为:mysql:8.0。
[root@flexusx-51a1 ~]# docker pull mysql:8.0
8.0: Pulling from library/mysql
Digest: sha256:59ffecdae8d42a45fb9429d81524273e0e237f82f8335234bc4c65dfa3588975
Status: Image is up to date for mysql:8.0
docker.io/library/mysql:8.0
6.2 创建挂载目录
- 创建以下mysql_master容器的挂载目录
mkdir -p /data/mysql01/{log,data,conf}
- 设置目录权限
chmod -R 777 /data/mysql01/
6.3 创建mysql_master容器
我们创建首先需要创建一个mysql_master容器,可参考以下命令。当前宿主机映射的服务端口为7006,可根据需要自行修改,注意防止宿主机端口冲突。
docker run -d \
--restart always \
-p 7006:3306 --name mysql_master \
-v /data/mysql01/log:/var/log/mysql \
-v /data/mysql01//data:/var/lib/mysql \
-v /data/mysql01/conf:/etc/mysql/conf.d/ \
-e MYSQL_ROOT_PASSWORD=admin \
mysql:8.0
- 相关解释:
配置项 | 描述 |
---|---|
docker run -d | 以后台模式(daemon)运行容器。 |
--restart always | 设置容器在宿主机启动时自动重启,即使 Docker 服务之前并没有运行。 |
-p 7006:3306 | 将容器的 3306 端口映射到宿主机的 7006 端口,使外部可以通过 7006 访问 MySQL 服务。 |
--name mysql_master | 为容器指定名称 mysql_master ,便于后续管理和识别。 |
-v /data/mysql01/log:/var/log/mysql | 将宿主机的 /data/mysql01/log 目录挂载到容器的 /var/log/mysql 目录,用于存储 MySQL 的日志文件。 |
-v /data/mysql01/data:/var/lib/mysql | 将宿主机的 /data/mysql01/data 目录挂载到容器的 /var/lib/mysql 目录,用于存储 MySQL 数据库文件。 |
-v /data/mysql01/conf:/etc/mysql/conf.d/ | 将宿主机的 /data/mysql01/conf 目录挂载到容器的 /etc/mysql/conf.d/ 目录,用于存储 MySQL 的额外配置文件。 |
-e MYSQL_ROOT_PASSWORD=admin | 设置 MySQL 的 root 用户密码为 admin 。 |
mysql:8.0 | 指定使用官方的 MySQL 8.0 镜像启动容器。 |
6.4 检查mysql_master容器状态
检查mysql_master容器状态,确保容器正常启动。
[root@flexusx-51a1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dab22422ea43 mysql:8.0 "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 33060/tcp, 0.0.0.0:7006->3306/tcp, :::7006->3306/tcp mysql_master
6.5 新建my.cnf配置文件
在宿主机
/data/mysql01/conf
目录下,新建my.cnf
配置文件。
vim /data/mysql01/conf/my.cnf
[mysqld]
# MySQL 进程的 PID 文件位置
pid-file= /var/run/mysqld/mysqld.pid
# MySQL socket 文件的位置
socket= /var/run/mysqld/mysqld.sock
# MySQL 数据目录的位置
datadir= /var/lib/mysql
# 允许安全文件导入操作的目录,设置为 NULL 表示任何目录都可以
secure-file-priv= NULL
# 设置 server_id,必须在同一局域网内唯一
server_id=101
# 指定不需要同步的数据库名称
binlog-ignore-db=mysql
# 开启二进制日志功能
log-bin=binlog
# 设置二进制日志中单个事务的最大内存使用量
binlog_cache_size=1M
# 设置二进制日志的格式(mixed, statement, row)
binlog_format=mixed
# 设置二进制日志的过期天数,默认为0表示不自动清理
expire_logs_days=7
# 设置主从复制过程中跳过的错误类型,避免因某些错误导致复制中断
# 例如:1062 错误表示主键重复
slave_skip_errors=1062
# 设置 MySQL 的默认时区为东八区
default-time_zone='+8:00'
修改my.cnf配置文件完毕后,需要重启
mysql_master
容器。
docker restart mysql_master
6.6 创建用户并授权
- 进入
mysql_master
容器内
docker exec -it mysql_master /bin/bash
- 进入MySQL数据库内
mysql -uroot -p
- 执行以下sql语句,创建admin用户并设置密码。
mysql> create user 'admin'@'%' identified WITH mysql_native_password by 'Admin@123';
Query OK, 0 rows affected (0.01 sec)
- 授予admin用户权限
mysql> grant replication slave, replication client on *.* to 'admin'@'%';
Query OK, 0 rows affected (0.00 sec)
- 刷新权限
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
6.7 查看主库状态
查看当前的主库状态,可以看到当前的Position为879。
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000004 | 157 | | mysql | |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
七、MySQL从节点的创建及配置
7.1 创建挂载目录
- 创建以下mysql_slave容器的挂载目录
mkdir -p /data/mysql02/{log,data,conf}
- 设置目录权限工作
chmod -R 777 /data/mysql02/
7.2 创建mysql_slave容器
执行以下命令来创建 mysql_slave 容器,作为从节点。当前宿主机映射的服务端口为 7006,可根据需要进行修改,注意避免宿主机上的端口冲突。
docker run -d \
--restart always \
-p 8006:3306 --name mysql_slave \
-v /data/mysql02/log:/var/log/mysql \
-v /data/mysql02//data:/var/lib/mysql \
-v /data/mysql02/conf:/etc/mysql/conf.d/ \
-e MYSQL_ROOT_PASSWORD=admin \
mysql:8.0
7.3 查看mysql_slave容器状态
查看mysql_slave容器状态,确保容器正常运行。
[root@flexusx-51a1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a7e523463916 mysql:8.0 "docker-entrypoint.s…" 8 seconds ago Up 7 seconds 33060/tcp, 0.0.0.0:8006->3306/tcp, :::8006->3306/tcp mysql_slave
eacc9f30d6e5 mysql:8.0 "docker-entrypoint.s…" About a minute ago Up About a minute 33060/tcp, 0.0.0.0:7006->3306/tcp, :::7006->3306/tcp mysql_master
7.4 新建my.cnf配置文件
在宿主机
/data/mysql02/conf
目录下,新建my.cnf
配置文件。
vim /data/mysql02/conf/my.cnf
[mysqld]
# MySQL 进程的 PID 文件位置
pid-file= /var/run/mysqld/mysqld.pid
# MySQL socket 文件的位置
socket= /var/run/mysqld/mysqld.sock
# MySQL 数据目录的位置
datadir= /var/lib/mysql
# 允许安全文件导入操作的目录,设置为 NULL 表示任何目录都可以
secure-file-priv= NULL
# 设置 server_id,必须在同一局域网内唯一
server_id=102
# 指定不需要同步的数据库名称
binlog-ignore-db=mysql
# 开启二进制日志功能,设置二进制日志名称,默认为 `binlog`
log-bin=binlog
# 设置二进制日志中单个事务的最大内存使用量
binlog_cache_size=1M
# 设置二进制日志的格式(mixed, statement, row)
binlog_format=mixed
# 设置二进制日志的过期天数,默认为 0 表示不自动清理
expire_logs_days=7
# 设置主从复制过程中跳过的错误类型,避免因某些错误导致复制中断
# 例如:1062 错误表示主键重复
slave_skip_errors=1062
# 配置中继日志
relay_log=mysql-relay-bin
# 设置 slave 将复制事件写入自己的二进制日志
log_slave_updates=1
# 设置 slave 为只读模式(具有 super 权限的用户除外)
read_only=1
# 设置默认时区为东八区
default-time_zone='+8:00'
# 忽略指定的数据库,不进行同步
binlog-ignore-db=information_schema
修改完毕后,重启mysql_slave容器。
docker restart mysql_slave
八、配置主从同步
8.1 主从同步设置
执行以下命令,进入mysql_slave容器内。
[root@flexusx-51a1 ~]# docker exec -it mysql_slave /bin/bash
bash-5.1#
- 进入到从节点数据库
mysql -uroot -padmin
执行以下sql语句,将
master_host
值替换自己云服务器的内网IP地址,master_log_pos为我们在主节点查询的Position值。
CHANGE MASTER TO
MASTER_HOST='192.168.0.169',
MASTER_USER='admin',
MASTER_PASSWORD='Admin@123',
MASTER_PORT=7006,
MASTER_LOG_FILE='binlog.000004',
MASTER_LOG_POS=157,
MASTER_CONNECT_RETRY=30;
参数说明:
master_host
:主数据库的IP地址;master_port
:主数据库的运行端口;master_user
:在主数据库创建的用于同步数据的用户账号;master_password
:在主数据库创建的用于同步数据的用户密码;master_log_file
:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;master_log_pos
:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;master_connect_retry
:连接失败重试的时间间隔,单位为秒。
8.2 查询当前主从状态
执行以下sql语句,在从节点查询当前的主从状态。
show slave status \G;
执行以下sql语句,开启主从同步,此时Slave_IO_Running与Slave_SQL_Running为 Yes状态。
start slave;
九、验证主从同步
9.1 MySQL主节点创建测试数据
- 进入MySQL主节点
[root@flexusx-51a1 ~]# docker exec -it mysql_master /bin/bash
bash-5.1# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 20
Server version: 8.0.39 MySQL Community Server - GPL
Copyright (c) 2000, 2024, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
- 创建schoo数据库
mysql> create database school;
Query OK, 1 row affected (0.00 sec)
- 创建一张空数据表
use school;
CREATE TABLE IF NOT EXISTS `student`(
`id` INT UNSIGNED AUTO_INCREMENT,
`name` VARCHAR(100) NOT NULL,
`gender` TINYINT NOT NULL,
`age` INT UNSIGNED,
`class` INT UNSIGNED,
`score` INT UNSIGNED,
PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
- 向数据表student写入数据
insert into student ( name, gender, age, class, score ) values ( "James", "0", "15", "1", "58" );
insert into student ( name, gender, age, class, score ) values ( "Michael", "0", "16", "2", "88" );
insert into student ( name, gender, age, class, score ) values ( "Sophia", "1", "17", "3", "78" );
insert into student ( name, gender, age, class, score ) values ( "William", "1", "18", "2", "98" );
insert into student ( name, gender, age, class, score ) values ( "Emily", "1", "17", "1", "38" );
- 查看数据表内容
mysql> select * from student;
+----+---------+--------+------+-------+-------+
| id | name | gender | age | class | score |
+----+---------+--------+------+-------+-------+
| 1 | James | 0 | 15 | 1 | 58 |
| 2 | Michael | 0 | 16 | 2 | 88 |
| 3 | Sophia | 1 | 17 | 3 | 78 |
| 4 | William | 1 | 18 | 2 | 98 |
| 5 | Emily | 1 | 17 | 1 | 38 |
+----+---------+--------+------+-------+-------+
5 rows in set (0.00 sec)
9.2 MySQL主节点查看同步数据
- 进入MySQL从节点
docker exec -it mysql_master /bin/bash
bash-5.1# mysql -uroot -padmin
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 40
Server version: 8.0.39 MySQL Community Server - GPL
Copyright (c) 2000, 2024, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
查看数据表,可以看到已经正常通同步。
mysql> use school;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from student;
+----+---------+--------+------+-------+-------+
| id | name | gender | age | class | score |
+----+---------+--------+------+-------+-------+
| 1 | James | 0 | 15 | 1 | 58 |
| 2 | Michael | 0 | 16 | 2 | 88 |
| 3 | Sophia | 1 | 17 | 3 | 78 |
| 4 | William | 1 | 18 | 2 | 98 |
| 5 | Emily | 1 | 17 | 1 | 38 |
+----+---------+--------+------+-------+-------+
5 rows in set (0.00 sec)
mysql>
十、使用体验与总结
在本次实践中,我们成功地在
华为云Flexus云服务器X实例
上的openEuler操作系统中部署了MySQL主从复制架构。这一过程不仅展示了华为云服务器卓越的性能和稳定性,还体现了其在数据库管理方面的强大能力。通过华为云提供的丰富资源和技术支持,整个部署流程变得简单且高效。尤其值得一提的是,华为云Flexus云服务器X实例的高灵活性和可靠性,为MySQL数据库的高效运行提供了坚实的基础。这对于中小企业来说,意味着能够以较低的成本获得稳定的数据管理解决方案。华为云Flexus云服务器X实例在实现复杂数据库架构方面表现优异,为企业级应用提供了可靠的支撑。
把握华为云828 B2B企业节的契机,体验Flexus X实例带来的超值优惠,感受技术与创新的完美结合。无论是在高性能计算还是智能监控领域,华为云都凭借其卓越的性能和服务细节展现了行业领先的实力。选择华为云,不仅能获得强有力的技术支持,更是向数字化转型迈出的关键一步。让我们共同在华为云平台上开启全新的成功之旅,携手迈进更加智能化的未来!
标签:主从复制,mysql,华为,实例,master,828,MySQL,服务器,Flexus From: https://blog.csdn.net/jks212454/article/details/142372599