saltstack部署MySQL主从

2023-11-15

1. 目录结构

[root@master mysql]# pwd
/srv/salt/prod/mysql

[root@master prod]# tree mysql/
mysql/
├── files
│   ├── master.cnf
│   ├── my.cnf.j2
│   ├── mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz
│   ├── mysql.server
│   ├── mysql.service
│   ├── mysql.sh
│   └── slave.cnf
├── main.sls
├── master.sls
└── slave.sls

[root@master bbs]# pwd
/srv/salt/prod/bbs

[root@master prod]# tree bbs/
bbs/
├── files
│   └── start_slave.sh
├── grant-mysql.sls
├── master_mysql.sls
└── slave-mysql.sls

2. 编写状态文件

2.1 main.sls文件内容


{% if grains['osmajorrelease'] == 8 %}  //如果是8版本的系统就安装这个包
ncurses-compat-libs:
  pkg.installed
{% endif %}

{% if grains['osmajorrelease'] == 7 %}  //如果是7版本的系统就安装这个包
libaio-devel:
  pkg.installed
{% endif %}

unzip_pkg:  //解压mysql的包
  archive.extracted:
    - name: /usr/local
    - source: salt://mysql/files/mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz

user-mysql:   // 创建MySQL属主
  user.present:
    - name: mysql
    - shell: /sbin/nologin
    - createhome: false
    - system: true

/usr/local/mysql:    //创建软链接
  file.symlink:
    - target: /usr/local/mysql-5.7.34-linux-glibc2.12-x86_64

mysql-create:   //设置mysql的属主和属组
  file.directory:
    - name: /usr/local/mysql
    - user: mysql
    - group: mysql
    - mode: 755
    - recurse:
      - user
      - group

varable:    // 环境变量的脚本,让系统能找到MySQL命令
  file.managed:
    - name: /etc/profile.d/mysql.sh
    - source: salt://mysql/files/mysql.sh
    - user: root
    - group: root
    - mode: 644

mysql.server:   //提供service文件使用systemctl控制MySQL
  file.managed:
    - name: /usr/local/mysql/support-files/mysql.server
    - source: salt://mysql/files/mysql.server
    - user: root
    - group: root
    - mode: 755


create-directory:    //创建数据库目录
  file.directory:
    - name: /opt/data
    - user: mysql
    - group: mysql
    - mode: 755
    - makedirs: true
    - recurse:
      - user
      - group

/etc/my.cnf.d:    //创建目录
  file.directory:
    - user: mysql
    - group: mysql
    - mode: 755
    - makedirs: true
    - recurse:
      - user
      - group

mysql.service:    //将service文件传到对端
  file.managed:
    - name: /usr/lib/systemd/system/mysql.service
    - source: salt://mysql/files/mysql.service

initialization-mysql:   //初始化数据库
  cmd.run:
    - name: "/usr/local/mysql/bin/mysqld --initialize-insecure --user mysql --datadir /opt/data/" 
    - require:
      - archive: unzip_pkg
      - user: user-mysql
      - file: create-directory
    - unless: test $(ls -l /opt/data | wc -l) -gt 1    //为了让初始化数据库具有幂等性,如果/opt/data下没有文件的话就初始化数据库

/etc/my.cnf:   //提供MySQL的配置文件
  file.managed:
    - source: salt://mysql/files/my.cnf.j2
    - user: root
    - group: root
    - mode: 644
    - template: jinja
    

start-mysql:   //启动MySQL服务
  service.running:
    - name: mysql
    - enable: true
    - reload: true
    - watch:
      - file: /etc/my.cnf     // 如果/etc/my.cnf文件内容发生改变就重新加载服务或重启服务

2.2 master.sls的文件内容

/etc/my.cnf.d/master.cnf:   //提供master的端的配置文件
  file.managed:
    - source: salt://mysql/files/master.cnf
    - user: root
    - group: root
    - mode: 644
    
restart_mysql:    //重启MySQL服务
  service.running:
    - name: mysql
    - enable: true
    - reload: true
    - watch: 
      - file: /etc/my.cnf.d/master.cnf

2.3 slave.sls文件内容

include:  //包含mysql目录下的main.sls文件
  - mysql.main

/etc/my.cnf.d/slave.cnf:  //提供从服务器上的配置文件
  file.managed:
    - source: salt://mysql/files/slave.cnf
    - user: root
    - group: root
    - mode: 644
    

restart-mysql-slave:  //重启MySQL服务
  service.running:
    - name: mysql
    - reload: true
    - watch:
      - file: /etc/my.cnf
      - file: /etc/my.cnf.d/slave.cnf

2.4 grant-mysql.sls文件内容

master-grant:
  cmd.run:  //给从库授权
    - name: /usr/local/mysql/bin/mysql -e "grant replication slave,super on *.* to 'repl'@'192.168.182.131' identified by '123';flush privileges;"

2.5 master_mysql.sls文件内容

include:  //包含mysql目录下面的main.sls、master和bbs目录下的grant-mysql.sls文件
  - mysql.main
  - mysql.master
  - bbs.grant-mysql

2.6 slave.sls文件内容

[root@master bbs]# cat slave-mysql.sls 
include:
  - mysql.slave

salt://bbs/files/start_slave.sh:   //到对端执行start_slave.sh脚本
  cmd.script

3. 配置文件

3.1 master.cnf文件内容

[mysqld]
server-id = 10
log-bin = mysql-bin

3.2 my.cnf.j2文件内容

[mysqld]
basedir = /usr/local/mysql
datadir = /opt/data
socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/data/mysql.pid
user = mysql
skip-name-resolve

!includedir /etc/my.cnf.d

3.3 mysql.server文件内容

// 此文件的内容就是当你解压mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz包时会自动生成,此文件在解压目录下的support-files目录下
只需要修改两行内容:
basedir=/usr/local/mysql
datadir=/opt/data

3.4 mysql.service文件内容

[Unit]
Description=mysql server daemon
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/mysql/support-files/mysql.server start
ExecStop=/usr/local/mysql/support-files/mysql.server stop
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

3.5 mysql.sh文件内容

export PATH=/usr/local/mysql/bin:$PATH

3.6 slave.cnf文件内容

[mysqld]
server-id = 20
relay-log = mysql_relay

3.7 start_slave.sh文件内容

#!/bin/bash

master_ip=192.168.182.142
mysql=/usr/local/mysql/bin/mysql
repl_user=repl
repl_pass=123
log_file=$($mysql -u$repl_user -p$repl_pass -h$master_ip -e 'show master status;' 2>/dev/null | grep -v File | awk '{print $1}')

log_pos=$($mysql -u$repl_user -p$repl_pass -h$master_ip -e 'show master status;' 2>/dev/null | grep -v Position | awk '{print $2}')

$mysql -e "change master to master_host='$master_ip',master_user='$repl_user',master_password='$repl_pass',master_log_file='$log_file',master_log_pos=$log_pos;start slave;show slave status\G"

4. 执行顺序

先执行master_mysql.sls文件,再执行slave-mysql.sls

如果觉得看的觉得有点累也可以去码云复制代码

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

saltstack部署MySQL主从 的相关文章

  • 从 Xlib 转换为 xcb

    我目前正在将我的一个应用程序从 Xlib 移植到 libxcb 但在查找有关我有时使用的 XInput2 扩展的信息时遇到了一些麻烦 libxcb 中有 XInput2 实现吗 如果是的话 在哪里可以找到文档 目前我在使用此功能时遇到问题
  • PHP 和 MySQL - 高效处理多个一对多关系

    我正在寻求一些有关使用 MySQL 和 PHP 检索和显示数据的最佳方法的建议 我有 3 个表 所有一对多关系如下 Each SCHEDULE有很多覆盖每个覆盖都有很多地点 我想检索这些数据 以便它可以全部显示在单个 PHP 页面上 例如列
  • 配置tomat的server.xml文件并自动生成mod_jk.conf

    我在用apache 2 2 15 and tomcat6 6 0 24 on CentOS 6 4并希望使用 tomcat 服务器的功能 通过添加以下内容自动生成 mod jk conf 文件
  • 如何在 Linux 中使用 C 语言使用共享内存

    我的一个项目有点问题 我一直在试图找到一个有据可查的使用共享内存的例子fork 但没有成功 基本上情况是 当用户启动程序时 我需要在共享内存中存储两个值 当前路径这是一个char and a 文件名这也是char 根据命令参数 启动一个新进
  • MySQL 排序顺序 - 排序规则?

    我在对 MySQL 中的 char 字段进行排序时遇到困难 问题是重音字符与非重音字符混淆 例如 Abc bd Acc 我认为这可能与整理有关 所以我将表格的排序规则更改为utf8 ut8 bin 看完之后这个帖子 https stacko
  • C修改printf()输出到文件

    有没有办法修改printf为了将字符串输出到文件而不是控制台 我尝试在互联网上查找一些内容 发现了类似的电话dup dup2 and fflush这可能与此有关 EDIT 也许我不清楚 问题是这是C考试问题 问题如下 解释一个通常将字符串输
  • 使用 python 脚本更改 shell 中的工作目录

    我想实现一个用户态命令 它将采用其参数之一 路径 并将目录更改为该目录 程序完成后 我希望 shell 位于该目录中 所以我想实施cd命令 但需要外部程序 可以在 python 脚本中完成还是我必须编写 bash 包装器 Example t
  • 非常大的字段会对 MySQL 数据库产生负面影响吗?

    我目前正在使用 Django 构建一个网站 并希望托管用户生物样式页面 该页面可能长达几 KB 这些字段不一定需要搜索 但在查找用户名时确实需要提供 将这些数据存储在数据库中会产生负面影响吗 如果我使用带有数据库链接的静态文本文件 我的服务
  • 用 pandas DataFrame 替换 mysql 数据库表中的行

    Python 版本 2 7 6 熊猫版本 0 17 1 MySQLdb 版本 1 2 5 在我的数据库中 PRODUCT 我有一张桌子 XML FEED 表 XML FEED 很大 数百万条记录 我有一个 pandas DataFrame
  • 如何查找哪个 Yocto 项目配方填充图像根文件系统上的特定文件

    我经常与 Yocto 项目合作 一个常见的挑战是确定文件为何 或来自什么配方 包含在 rootfs 中 这有望从构建系统的环境 日志和元数据中得出 理想情况下 一组命令将允许将文件链接回源 即配方 我通常的策略是对元数据执行搜索 例如gre
  • MySQL/PDO::quote() 尽管使用 PDO::PARAM_INT 参数,但仍在整数周围加上引号

    无论我传递给什么值 数据类型对 它都会出现 pdo gt quote value type 它总是将其引用为字符串 echo pdo gt quote foo PDO PARAM STR foo as expected echo pdo g
  • 使用 gdb 调试 Linux 内核模块

    我想知道 API 在内核模块 中返回什么 从几种形式可以知道 这并不是那么简单 我们需要加载符号表来调试内核模块 所以我所做的就是 1 尝试找到内核模块的 text bss和 data段地址 2 在 gdb 中使用 add symbol f
  • Linux/POSIX:为什么 fork() 不分叉*所有*线程

    众所周知 POSIX下创建新进程的默认方式是使用fork 在 Linux 下 这在内部映射到clone 我想知道的是 众所周知 当一个人打电话时fork 子进程是用单个线程创建的 调用的线程fork cf https linux die n
  • cdc_acm:无法设置 dtr/rts - 无法与 USB cdc 设备通信

    我试图使用 pic24fj128gb206 枚举 usb cdc 设备 设备似乎已正确枚举 但是当我将设备连接到 Linux PC 时 我从内核收到以下警告消息 cdc acm 1 8 1 6 7 1 0 failed to set dtr
  • 如何在 Mac OSX Mavericks 中正确运行字符串工具?

    如何在 Mac OSX Mavericks 中正确运行字符串工具 我尝试按照我在网上找到的示例来运行它 strings a UserParser class 但我收到此错误 错误 Applications Xcode app Content
  • 如何让 Node.js 作为后台进程运行并且永不死掉?

    我通过 putty SSH 连接到 linux 服务器 我尝试将其作为后台进程运行 如下所示 node server js 然而 2 5 小时后 终端变得不活动 进程终止 即使终端断开连接 我是否也可以使进程保持活动状态 Edit 1 事实
  • MySQL 追加字符串

    How can I append a string to the end of an existing table value Let s say I have the table below And let s say that Mari
  • Mysql插入表后不显示右单引号(’)

    我有一个名为 测试 的表 我插入了一行 其中包含unicode字符右单引号 0x2019在名称字段中 SQL insert into Testing values Sno Name Address insert into Testing v
  • ansible unarchive 模块如何查找 tar 二进制文件?

    我正在尝试执行一个 ansible 剧本 该剧本的任务是利用unarchive模块 因为我是在 OSX 上执行此操作 所以我需要使用它gnu tar 而不是bsd tar通常与 OSX 一起提供 因为BSD tar 不受官方支持 https
  • post php mysql 的拆分关键字

    我有一个表存储帖子 ID 它的标签如下 Post id Tags 1 keyword1 keyword2 keyword3 我想循环遍历该表中的每一行并执行以下操作 将关键字1 关键字2 关键字3放入新表中 word id word val

随机推荐

  • python遍历文件夹下的所有子文件夹,并将指定的文件复制到指定目录

    python遍历文件夹下的所有子文件夹 并将指定的文件复制到指定目录 需求 复制单个文件夹 遍历所有子文件夹中的文件 并复制 代码封装 需求 在1文件夹中有1 2两个文件夹 将这两个文件夹中的文件复制到 after copy中 复制单个文件
  • Deathnote

    Deathnote 1 主机发现 arp scan l 2 扫描端口 nmap Pn sV P A 192 168 80 132 开放了80 22端口 3 访问80端口 修改host文件访问80端口时进行了跳转到deathnote vuln
  • Allegro 17.4设置中文界面

    一 Allegro 17 4 中文界面效果 二 Allegro 17 4 中文界面设置方法 2 1 需要打上此时 20210820 最新的S019的升级补丁 2 2 设置环境变量 变量名 intl enabled 变量值 1 要去除中文显示
  • LeetCode刷题-1

    数组 1 两数之和 题目描述 题目样例 Java方法 暴力枚举 思路及算法 代码 执行结果 复杂度 Java方法 哈希表 思路及算法 代码 执行结果 复杂度 题目描述 给定一个整数数组 nums 和一个整数目标值 target 请你在该数组
  • StarCraft开发:用肮脏的技巧解决难题

    http www csdn net article 2013 02 28 2814299 the starcraft path finding hack 摘要 在之前的文章中 Warcraft之父讲述了自己是如何以及为何重启StarCraf
  • Linux中的fork()函数

    Linux中的fork 函数 在Linux中 fork 函数是创建进程的基础 它是一个系统调用 用于创建一个新的进程作为当前进程的副本 新进程将拥有与原进程相同的代码 数据和堆栈 但是拥有不同的进程ID PID 并且它是原进程的子进程 函数
  • 【debug】(0, slice(None, None, None))‘ is an invalid key

    简单介绍 我获取了一个dataframe里的符合条件的多个index 想通过index对dataframe进行筛选 在筛选的时候反馈错误 原始代码为 input index df select df select item input in
  • 【word】如何设置交叉引用标注参考文献

    文章目录 1 定义参考文献编号格式 2 设置交叉引用 插入正文位置 3 修改连续多个参考文献的格式 4 更新正文标注 1 定义参考文献编号格式 开始 gt 编号 gt 定义新编号格式 2 设置交叉引用 插入正文位置 设置好固定的参考文献格式
  • 【vscode,python】pip成功的包却不能导入(import)问题

    第一次遇到这个问题 在网上找了些资料 网上的教程大致上都是需要去修改settings json这个文件 我问了我朋友 然后轻松地解决了这个问题 方法一 关掉编译软件重新打开即可解决问题 方法二 我认为造成这个问题的原因是在另一个新的路径上新
  • 真实GPS转腾讯/高德地图坐标系,百度地图与腾讯/高德地图坐标系转换

    1 获取真实坐标GPS wgs84转为gcj编码方式 positiontransform array manual 定义常量 var GPS PI 3 14159265358979324 x pi 3 14159265358979324 3
  • 对称矩阵的压缩存储、基于压缩矩阵的矩阵乘法

    def disp A 输出方阵A n len A for i in range n for j in range n print d A i j end print def compression A a 压缩矩阵A到a中 A是一个对称矩阵
  • 面试总结(五):搜索引擎

    问题导读 1 搜索引擎有哪些特点 优势 2 搜索引擎使用到哪些场景中 3 如何将原文档传给分次组件 4 如何将得到的词 Term 传给索引组件 Indexer 搜索引擎概述全文搜索就是对文本数据的一种搜索方式 文本数据的都多 可以分为顺序搜
  • 基于verilog语言的SPI协议实现

    前言 关于SPI协议的基础知识这里就不在叙述了 感兴趣的小伙伴可以自行百度 本文基于verilog语言 实现SPI的四种通信模式 封装成通用模块 更新时间 2023年7月11日 更新原因 之前的版本存在bug 通用性不够 模块端口如下 sp
  • java设计模式--[创建模式]--简单工厂[simple factory]

    一 簡單工廠 其實它不是一個設計模式 反而比較像是一種編程習慣 由于經常被使用 有些人把這個習慣誤認為是 工廠模式 在談論工廠模式前 先將簡單工廠熟悉一下 二 簡單工廠的UML類圖如下 三 在此用一個事例說明簡單工廠的用法 在一個酒店里可以
  • 爬虫使用Selenium生成Cookie

    在爬虫的世界中 有时候我们需要模拟登录来获取特定网站的数据 而使用Selenium登录并生成Cookie是一种常见且有效的方法 本文将为你介绍如何使用Selenium进行登录 并生成Cookie以便后续的爬取操作 让我们一起探索吧 一 Se
  • 关系数据库——关系操作和关系完整性

    文章目录 一 关系操作 1 基本的关系操作 2 关系数据语言的分类 关系代数语言 关系演算语言 具有关系代数和关系演算双重特点的语言 二 关系的完整性 1 实体完整性 Entity Integrity 实体完整性规则 2 参照完整性 Ref
  • JavaScript实现三子棋

    目录 要做的事 1 初始化棋盘 2 落子操作 3 判断获胜 4 轮流落子 5 重置棋盘 6 棋盘判满 7 源代码 8 效果展示 要做的事 1 初始化棋盘 首先棋盘是一个3 3的二维数组 而我们的二维数组又是分别由一个一个的一维数组组成的 如
  • PTA 7-11 学生CPP成绩计算 总结

    生成上述类并编写主函数 根据输入的学生基本信息 建立一个学生对象 计算其cpp总评成绩 并输出其学号 姓名 总评成绩 输入格式 测试输入包含若干测试用例 每个测试用例占一行 学生姓名 学号 年龄 cpp成绩 cpp考勤 当读入0时输入结束
  • matlab的diag函数

    1 diag函数 基础用法 生成对角矩阵 diag 1 2 3 4 5 ans 1 0 0 0 0 0 2 0 0 0 0 0 3 0 0 0 0 0 4 0 0 0 0 0 5 2 进阶用法 作用 平移对角线 diag a a为正 表示向
  • saltstack部署MySQL主从

    saltstack部署MySQL主从 1 目录结构 2 编写状态文件 2 1 main sls文件内容 2 2 master sls的文件内容 2 3 slave sls文件内容 2 4 grant mysql sls文件内容 2 5 ma