当前位置:首页 > 技术 > 正文内容

MySQL高可用架构与自动化运维实践

访客 技术 2026年6月23日 1

一、MySQL主从及双主复制配置

1.1 主从架构部署 在主节点(192.168.119.146)上配置二进制日志并启用唯一标识:

# /etc/my.cnf 添加以下内容
[mysqld]
server-id=146
log-bin=/data/mysql/binlog/mysql-bin

创建日志目录并重启服务:

mkdir -p /data/mysql/binlog
touch /data/mysql/binlog/mysql-bin
chown -R mysql:mysql /data/mysql/
systemctl restart mariadb

查看当前日志位置并创建复制用户:

SHOW MASTER LOGS;
CREATE USER repl_user@'192.168.119.%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO repl_user@'192.168.119.%';

在从节点(192.168.119.145)配置:

# /etc/mysql/my.cnf
[mysqld]
server-id=145
read-only

启动复制进程:

CHANGE MASTER TO
  MASTER_HOST='192.168.119.146',
  MASTER_USER='repl_user',
  MASTER_PASSWORD='123456',
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=328;

START SLAVE;

验证同步状态,确认两个线程均运行正常。

1.2 双主复制实现 两台服务器均需开启二进制日志并设置不同ID:

# 节点1 (192.168.119.145)
server-id=145
log-bin=/data/mysql/binlog/mysql-bin

# 节点2 (192.168.119.146)
server-id=146
log-bin=/data/mysql/binlog/mysql-bin

在节点1上配置指向节点2的复制关系:

CHANGE MASTER TO
  MASTER_HOST='192.168.119.146',
  MASTER_USER='repl_user',
  MASTER_PASSWORD='123456',
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=328;

START SLAVE;

在节点2上反向配置:

CHANGE MASTER TO
  MASTER_HOST='192.168.119.145',
  MASTER_USER='repl_user',
  MASTER_PASSWORD='123456',
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=328;

START SLAVE;

通过跨节点创建数据库验证双向同步功能。

二、基于XtraBackup的备份恢复体系

2.1 环境准备 安装Percona XtraBackup工具包,并配置MySQL开启二进制日志:

yum install -y percona-xtrabackup-80
vim /etc/my.cnf
[mysqld]
log-bin=/data/mysql/binlog/mysql-bin

2.2 备份流程 执行全量备份:

xtrabackup --backup --target-dir=/backup/full

进行增量备份(基于前一次备份):

xtrabackup --backup --incremental-basedir=/backup/full --target-dir=/backup/inc1
xtrabackup --backup --incremental-basedir=/backup/inc1 --target-dir=/backup/inc2

刷新日志并提取最新二进制日志:

FLUSH LOGS;
SHOW MASTER STATUS; -- 记录文件名和位置
mysqlbinlog /data/mysql/binlog/mysql-bin.000007 > /backup/inc.sql

2.3 恢复操作 在目标服务器上合并所有备份数据:

xtrabackup --prepare --apply-log-only --target-dir=/backup/full
xtrabackup --prepare --apply-log-only --target-dir=/backup/full --incremental-dir=/backup/inc1
xtrabackup --prepare --target-dir=/backup/full --incremental-dir=/backup/inc2

还原到数据库目录:

xtrabackup --copy-back --target-dir=/backup/full
chown -R mysql:mysql /var/lib/mysql
systemctl start mysqld

最后通过导入二进制日志文件恢复至最新状态。

三、MyCAT实现读写分离

3.1 安装与配置 部署MyCAT中间件并修改默认端口和认证信息:

<!-- server.xml -->
<property name="serverPort">3306</property>
<user name="root" password="wuhao">

<!-- schema.xml -->
<dataHost name="localhost1" balance="1" writeType="0">
  <writeHost host="master" url="192.168.119.146:3306" user="root" password="123456">
    <readHost host="slave" url="192.168.119.138:3306" user="root" password="123456"/>
  </writeHost>
</dataHost>

3.2 功能验证 连接测试:

mysql -uroot -pwuhao -h 192.168.119.148

通过监控通用日志观察读写流量分布。当从库宕机时,读请求自动切换至主库;主库故障后,写操作无法继续。

四、Ansible核心模块应用

4.1 执行控制 配置控制节点与被管理主机之间的SSH密钥信任,修改ansible.cfg设置远程用户为root。

4.2 常用模块示例

  • command/shell:执行命令,支持特殊字符使用shell模块
  • script:在远程执行本地脚本
  • copy:将文件从控制端复制到目标主机
  • get_url:下载远程文件
  • fetch:从远程获取单个文件
  • file:创建目录或链接
  • stat:检查文件状态
  • unarchive:解压压缩包
  • archive:打包生成归档文件
  • hostname:修改主机名
  • cron:管理定时任务
  • yum/apt:软件包管理
  • service:控制服务启停
  • user/group:用户组管理
  • lineinfile/replace:文本行替换
  • selinux:策略管理
  • reboot:重启系统
  • mount:挂载文件系统
  • setup:收集系统信息
  • debug:输出调试信息

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。