第一步:建立statefulSet

1. 找到应用-有状态,使用镜像创建

2. 开始创建:填写应用名称、选择集群、命名空间、副本数量、类型等基本信息

    注意:副本数量,仅指容器存在节点的数量,由于mysql在做主从备份的时候,需要server_id和server_uuid不一致,但是如果使用阿里云的K8S容器服务,由于多个副本仅仅是通过一个镜像进行建立,所以会出现server_id、server_uuid一致的状态,且手动修改后,也无效。建议:如果进行主从备份,则重复此步骤,分别重复建立应用:mysql8014-master和mysql8014-slave(mysql8014-slave1~N)这样能保证两个或多个容器之间的独立性,以及server_id、server_uuid的不一致。
_

3. 配置镜像相关信息:选择镜像、镜像版本、分配资源、添加环境变量、存储等
_

_
_

4. 创建服务,并进行创建。
_

5. 结果:
_

_

第二步:navicat连接数据库
1. 按需编辑连接名,并填入主机IP,以及上面创建的服务中的分配的端口,填入用户名与密码,进行测试连接,成功则OK。
_

备注:1. navicat需要更新到12.0以上版本才能对mysql8.0及以上版本提供支持,。
备注:2. 如果出现10061等连接失败的问题,查看阿里云服务器的安全组是否开放。
_
_

第三步:建立主从备份(提供多种方案)

            ——方案1:仅适用于阿里云的容器服务(对自建的K8S集群有指导意义)—

使用镜像在阿里云控制台建立了mysql8014-master和mysql8014-slave主、从两个容器后:

-- 分别使用navicat进行登陆,或者直接在服务器登陆mysql,连接master和slave两个数据库,
-- 查看各库的server_id、server_uuid。(正常情况下:server_id默认都为1,server_uuid则为两个不一样的字符串)
show variables like 'server_id';
show variables like 'server_uuid';

-- 在slave,执行:
set global server_id=2; #将master和slave分别设置不同的server_id

-- 在master执行:(建立新用户,并赋权,此处的方法有别于网上的直接grant……,因为会存在grant后一直提示sql脚本错误的情况)
CREATE USER 'username';
ALTER USER 'username'@'%' IDENTIFIED WITH mysql_native_password BY 'your own password';
ALTER USER 'username'@'%' IDENTIFIED BY 'your own password';
GRANT REPLICATION SLAVE ON . TO 'username'@'%';
flush privileges; #使生效

-- 在master执行:(查看master节点的状态)
show master status;# 查出的fileposition 分别对应下面脚本中的log.000001和1

-- 在slave换master,进行连接
CHANGE MASTER TO master_host = '主库IP',
master_user = 'username',
master_password = 'your own password',
master_port = '主库mysql服务的端口,注意,此处如果使用K8S集群,则应使用手动为master创建的服务端口(节点端口)',
master_log_file = 'log.000001',
master_log_pos = 1;
START SLAVE;# 启用同步

-- 在slave执行
show slave status;#此时 Slave_IO_Running: Yes Slave_SQL_Running: Yes都为yes才对。然后在master建立新的数据库,进行测试

               ———————————方案2:仅适用于非集群状态下的主从备份————————————  

关于非集群下的多服务器mysql主从备份,可参照:https://blog.51cto.com/13266497/2150272查看并进行实践(很经典的一篇主从备份方案)。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐