RDS 与 ECS 自建mysql 建议主从复制读写分离操作

本文介绍如何配置阿里云RDS作为主数据库,ECS自建MySQL作为从数据库实现读写分离。包括RDS与ECS MySQL的主从复制配置步骤,以及ThinkPHP项目的数据库配置。

RDS 与 ECS 自建mysql 建议主从复制读写分离操作

RDS 与 ECS 自建mysql 建议主从复制读写分离操作

一、RDS 作为主数据库,本实例使用的是mysql 8.0

  1. 登录 RDS 控制台,选择目标实例。

  2. 配置从实例读取数据使用的只读账号和授权数据库。

  3. 将从实例的 IP 地址加入主实例的 IP 白名单中

    如果从实例是部署在同一地域的 ECS 上,仅需配置该 ECS 的内网地址即可。
    如果不在一个地域,请输入ESC的外网IP地址
    
  4. 登录主实例,即RDS控制台

  5. 查询主实例的 server-id。在RDS控制台里面执行命令

    show variables like '%server_id%';
    
    系统返回如下信息:
    
    +-------------------------+-----------------+
    | Variable_name           | Value           |
    +-------------------------+-----------------+
    | server_id               | 2657086497      |
    | server_id_bits          | 32              |
    +-------------------------+-----------------+
    
  6. 查询主实例的 GTID_SUBTRACT

    show master status\G
    
    # 返回如下
    File							Position		Binlog_Do_DB		Binlog_Ignore_DB		Executed_Gtid_Set
    mysql-bin.000391	445434																					96ac6c7d-11da-11ec-815e-0c42a1a88092:1-1034889
    

二、ECS 自建 mysql 5.7.34 从数据库,ECS系统 Centos 8.5.2111

  1. 安装 MySQL 从实例。(宝塔安装)

    MySQL 安装包和安装方法请参见 MySQL 官方安装文档

  2. 停止从实例 mysql 服务。

    systemctl stop mysqld
    
  3. 修改从实例 mysql 配置文件。

    1. 打开从实例 MySQL 配置文件。
    vim /etc/my.cnf
    # 或者直接在宝塔软件管理界面进行图形界面配置mysql配置
    
    1. 配置从实例的 server-id 和要同步的数据库。
    # 服务 ID,主从实例 server-id 需不同。只要不和主实例 rds 的相同即可
    server-id               =  123456789              
    log_bin                 =  /var/log/mysql/mysql-bin.log
    expire_logs_days        =  10
    max_binlog_size         =  100M
    # 需要同步的数据库
    replicate-do-db         =  exampledb
    # 不需要同步的数据库
    replicate-ignore-db     =  mysql
    replicate-ignore-db     =  information_schema
    replicate-ignore-db     =  performance_schema
    # GTID 配置 GTID 同步模式,**binlog** 格式为 **row**,以兼容主实例。
    gtid_mode=on
    enforce_gtid_consistency=on
    # 设置 binlog 为 row
    binlog_format=row
    log-slave-updates=1
    
    ####### 配置mysql主从 开始
    #数据库主从核心配置,开启主从复制。读写分离
    log_bin = slave_106_bin
    # 事务型GTID同步必须使用row
    binlog_format=row
    server-id = 106
    
    #同步的数据库
    binlog_do_db  = db_name
    
    #操作日志
    log-bin-index=mysql-bin.index
    relay-log=relay-log
    relay_log_index=relay-log.index
    
    #GTID配置,是否开启GTID功能
    gtid_mode=on
    enforce_gtid_consistency=on
    #同步主库操作日志
    log-slave-updates=1
    
    #跳过所有错误,这个参数至关重要
    slave-skip-errors=all
    #复制要同步的数据库,可以并列写多个
    replicate-do-db = db_name
    ####### 配置mysql主从 结束
    
    
    1. 执行如下命令,查看 binlog 配置结果。
    # 登录mysql执行
    show variables like '%binlog_format%';
    
    # 系统返回如下信息:
    +-------------------------+-----------------+
    | Variable_name           | Value           |
    +-------------------------+-----------------+
    | binlog_format           | ROW             |
    +-------------------------+-----------------+
    
  4. 将主实例数据全量同步到从实例。先手动将主从数据库的数据同步,保持完全一致

    本例以 mysqldump 工具为例。

    # mysqldump -uname -hmasterhost.mysql.rds.aliyuncs.com -p --databases exampledb > exampledb.sql
    # mysqldump -uname -p < exampledb.sql
    
  5. 登录数据库,设置同步选项。

    # 先启动,如果已经启动请忽略此命令
    systemctl start mysqld
    # 建立同步
    change master to master_host = 'rm-*******.mysql.rds.aliyuncs.com', master_port = 3306, master_user = 'master_user', master_password='master_pass',master_auto_position=1;
    # 下面我们需要重新设置GTID以跳过错误的信息,记得在第一步我们
<think>嗯,用户需要准备Linux运维岗位的面试,简历上的技能点很全面。从CentOS到Kubernetes覆盖了操作系统、自动化工具、数据库、监控、云服务等主流技术栈。 用户的核心诉求是预测面试问题并准备答案。作为运维工程师,面试官通常会重点考察几个维度:技术原理的理解深度、故障处理经验、生产环境优化能力,以及技术选型的思考逻辑。 从简历内容看,用户的技术广度足够,但每个点都可能被深挖。比如: - 被问到Shell脚本时,可能会要求现场手写案例 - 问Ansible时必然涉及Playbook结构优化 - 数据库方面MHA故障转移细节是高频考点 - 云服务部分SLBRDS的架构联动常被追问 特别要注意的是,用户提到“熟悉”的技能都要准备具体案例。比如“Nginx优化”如果只能说压缩缓存就单薄了,需要准备连接数优化、内核参数调优等硬核知识点。 面试官还可能设置场景题,比如“当Keepalived脑裂时如何快速定位”。这类问题考察的是故障树分析能力,需要把监控工具(Zabbix)、日志分析、应急预案整套流程说清楚。 最后关于Kubernetes,虽然简历写了“熟悉核心组件”,但切忌深入API-Server机制这种底层实现。更稳妥的是准备Deployment滚动更新、Service流量分发这些应用层操作。</think>以下是针对简历技能的面试预测问题及参考答案: --- ### 一、操作系统Shell脚本 **可能问题** 1. **如何用Shell脚本监控磁盘空间,超过90%时自动清理/var/log下7天前的日志?** ```bash #!/bin/bash threshold=90 current_usage=$(df -h / | awk 'NR==2 {print $5}' | tr -d '%') if [ $current_usage -ge $threshold ]; then find /var/log -type f -mtime +7 -exec rm -f {} \; echo "$(date): 已清理7天前日志" >> /var/log/clean.log fi ``` 2. **Shell中`$?`、`$0`、`$#`分别代表什么?** - `$?`:上一条命令的退出状态码 - `$0`:当前脚本名称 - `$#`:传递给脚本的参数个数 --- ### 二、Ansible自动化部署 **可能问题** 1. **Ansible Playbook中`tasks``handlers`的区别?** - `tasks`:定义主执行步骤,按顺序运行 - `handlers`:由`notify`触发,仅在关联task发生变更时执行一次(常用于服务重启) 2. **如何用Ansible部署Nginx并配置反向代理?** ```yaml - name: 安装Nginx yum: name=nginx state=present - name: 配置反向代理 template: src=proxy.conf.j2 dest=/etc/nginx/conf.d/proxy.conf notify: 重启Nginx # 触发handler handlers: - name: 重启Nginx service: name=nginx state=restarted ``` --- ### 三、Nginx负载均衡 **可能问题** 1. **`location ~* \.(jpg|png)$` `location ^~ /static/` 的优先级哪个更高?** - `^~`前缀匹配优先级高于正则匹配`~*`,因此`/static/`路径会优先匹配 2. **Nginx七层负载均衡如何实现会话保持?** 在`upstream`中添加`ip_hash`或使用`sticky`模块: ```nginx upstream backend { ip_hash; # 基于客户端IP分发 server 192.168.1.10; server 192.168.1.11; } ``` --- ### 四、数据库高可用 **可能问题** 1. **MySQL主从复制延迟大的可能原因及解决思路?** - **原因**:网络延迟、从库I/O压力大、大事务 - **解决**: 1. 启用并行复制`slave_parallel_workers` 2. 拆分大事务 3. 使用MGR替代传统主从 2. **MHA故障转移后如何恢复旧主库?** 步骤: ```bash # 1. 修复旧主库 # 2. 配置为新主库的从库 CHANGE MASTER TO MASTER_HOST='new_master_ip'; # 3. 启动复制 START SLAVE; ``` --- ### 五、容器云服务 **可能问题** 1. **Dockerfile中`COPY``ADD`的区别?** - `COPY`:仅复制本地文件到镜像 - `ADD`:支持URL解压压缩包(如自动解压tar) 2. **Kubernetes中DeploymentStatefulSet的应用场景?** - **Deployment**:无状态应用(如Web服务) - **StatefulSet**:有状态应用(如数据库),保障Pod名称存储持久化 --- ### 六、监控CI/CD **可能问题** 1. **Zabbix Proxy分布式监控有什么优势?** - 减轻Server压力 - 跨地域监控时减少网络延迟 - 本地缓存数据避免网络中断丢失 2. **Jenkins Pipeline如何实现代码回滚?** 关键步骤: ```groovy stage('Rollback') { steps { sh 'git revert HEAD' # 回退提交 sh 'kubectl rollout undo deployment/app' # Kubernetes回滚 } } ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨林之后

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值