OpenEuler-22.03-LTS上利用Ansible輕松部署MySQL 5.7

一、需求

  • 使用ansible自動化部署mysql
  • 二進制部署mysql
  • 部署mysql并創建JDBC用戶

二、環境信息

本文涉及的代碼,配置文件地址: 鏈接:百度網盤 請輸入提取碼?提取碼:1g6y

軟件名稱版本備注
Ansible2.9.27All modules — Ansible Documentation
Mysql5.7.44https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.44-linux-glibc2.12-x86_64.tar
openEuler22.03 (LTS-SP3)

三、部署ansible

3.1 安裝ansible

yum install ansible -y

3.2 配置ansible.cfg 配置文件

vim /etc/ansible/ansible.cfg 【一般只要修改下面的幾行內容】...........
inventory  = /etc/ansible/hosts                #打開注釋
host_key_checking = False                     # ssh連接時,不需要輸入yes; 如果為True, 就需要輸入yes
log_path=/var/log/ansible.log                  #日志文件,默認是不開啟的
...........

四、編寫mysql-roles

4.1 目錄結構

[root@openeuler ansible]# tree -L 5
├── group_vars
│   └── all.yml
├── hosts
├── main.yml
└── roles└── mysql├── files│   └── mysqld.service├── tasks│   └── main.yml└── templates└── my.cnf-master.j26 directories, 6 files

  • group_vars/all.yml 定義全局變量,里面定義了mysql部署時root 的賬戶密碼,以及JDBC的賬戶密碼
  • hosts 文件,定義inventory 主機清單,定義了ansible 在哪臺服務器上部署mysql
  • main.yml ,ansible-playbook 的入口文件,根據這個文件執行部署mysql roles
  • roles/mysql 里定義了mysql劇本的具體內容

4.2 編寫劇本

4.2.1 定義全局變量,編寫group_vars/all.yml 文件

創建group_vars目錄

mkdir -p /root/ansible/group_vars

編寫all.yml變量文件,定義mysql 的安裝地址,mysql的root 及jdbc用戶的賬戶密碼,授權地址

vim /root/ansible/group_vars/all.yml---
#mysql
#授權root@'localhost'
mysql_ip: 172.16.10.180
mysql_password: srebro.cn#jdbc數據庫授權
jdbc_user: srebro.cn
jdbc_user_password: xxxxxxx
#授權jdbc登錄地址,授權子網
jdbc_ip: "172.16.10.%"

4.2.2 定義inventory 主機清單

定義inventory 主機清單

4.2.2.1 使用root 用戶的身份
vim /root/ansible/hosts###MYSQL服務器
[mysql]
172.16.10.180 ansible_ssh_host=172.16.10.180 ansible_ssh_user=root ansible_ssh_pass="srebro.cn"

ps: openeuler 22.03 默認不允許root 用戶遠程登錄,如果需要使用root 用戶進行部署,需要修改 /etc/ssh/sshd_config?文件,修改成PermitRootLogin yes,再重啟sshd服務,systemctl restart sshd

4.2.2.2 使用sudo 用戶的身份
  • 需要定義inventory 主機清單,手動指定提權用戶,以及root 用戶密碼;
vim /root/ansible/hosts###MYSQL服務器
[mysql]
172.16.10.180  ansible_ssh_host=172.16.10.180  ansible_ssh_user=srebro ansible_ssh_pass="srebro.cn" ansible_become_pass="srebro.cn"

4.2.3 定義入口文件main.yml

需要注意,因為用戶的不同,需要修改main.yml 入口文件中,以指定提權用戶執行ansible劇本任務

4.2.3.1 使用root 用戶的身份
vim /root/ansible/main.yml---
- name: deploy-mysqlremote_user: rootroles:- mysqlhosts:- mysqlgather_facts: falsetags: mysql

4.2.3.2 使用sudo 用戶的身份
vim /root/ansible/main.yml---
- name: deploy-mysqlremote_user: srebroroles:- mysqlhosts:- mysqlgather_facts: falsetags: mysql

4.2.4 編寫roles

4.2.4.1 創建roles 工作目錄
mkdir -p /root/ansible/roles/mysql{files,tasks,templates}

  • files 目錄,用于存放tasks 任務中,一些文件的下發到客戶端,比如使用到copy模塊
  • tasks 目錄,定義劇本的具體內容
  • templates 目錄,用于存放一些模板文件,通常是.j2 的文件格式結尾,可以根據全局的一些變量,動態的生成模板配置文件,比如我們在tasks 任務中,定義的SERVER_ID?這個變量的值 就可以賦予給j2 文件去渲染出my.cnf 中server_id的值
4.2.4.2 編寫tasks/main.yml 文件

ps:

  • 在openeuler 系統上,二進制部署mysql的時候需要安裝libaio?和?ncurses-compat-libs?依賴包
  • mysql 的工作目錄,我定義在了/home/application/mysql?目錄下 , 需要提前把這個/home/application/目錄單獨掛載,保證有充足的存儲空間
  • 在部署mysql最后,有一個創建jdbc用戶的步驟,這個時候需要用到PyMySQL?這個組件,pip安裝寫即可
vim /root/ansible/roles/mysql/tasks/main.yml---- name: install packageyum:name:- libaio- ncurses-compat-libsstate: presenttags: install-package- name: install PyMySQLshell: python3 -m pip install PyMySQL -i https://mirrors.aliyun.com/pypi/simple/tags: install PyMySQL- name: useradd mysqluser:name: mysqlshell: /sbin/nologincreatehome: nosystem: no- name: mkdir workspacefile:path: /home/application/mysqlstate: directorymode: '0755'owner: mysqlgroup: mysql- name: download mysql-5.7.44-linux-glibc2.12-x86_64.tar.gzunarchive: "src=https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.44-linux-glibc2.12-x86_64.tar dest=/home/application/mysql/ remote_src=yes"tags: download- name: rename workspaceshell: mv /home/application/mysql/mysql-5.7.44-linux-glibc2.12-x86_64 /home/application/mysql/app;- name: mkdir mysql data & chownfile:path: /home/application/mysql/datastate: directorymode: '0775'owner: mysqlgroup: mysqlrecurse: yes- name: mkdir mysql app & chownfile:path: /home/application/mysql/appstate: directorymode: '0775'owner: mysqlgroup: mysqlrecurse: yes- name: add mysql enviromentblockinfile:path: "{{ bashrc_file }}"backup: yescreate: yesmarker: "# {mark} ansible add mysql enviroment"block: |export PATH=$PATH:/home/application/mysql/app/bintags: enviroment- name: get host last ipshell: "/usr/sbin/ip a | grep glo | awk '{print $2}' | head -1 |  cut -f1 -d/ | awk -F '.' '{print $4}'"register: shell_resulttags: my.cnf- name: set last_ip variableset_fact:SERVER_ID: "{{ shell_result.stdout }}"tags: my.cnf- name: copy my.cnf-mastertemplate: "src=my.cnf-master.j2 dest=/etc/my.cnf"tags: my.cnf- name: init mysqlshell: /home/application/mysql/app/bin/mysqld --initialize-insecure  --user=mysql --basedir=/home/application/mysql/app --datadir=/home/application/mysql/datatags: init- name: copy mysqld.servicecopy: "src={{ item.src }} dest={{ item.dest }} owner=root group=root mode=0775"with_items:- { src: "mysqld.service", dest: "/etc/systemd/system/mysqld.service" }tags: mysqld.service- name: add mysqld systemdshell: systemctl daemon-reload;systemctl enable mysqld;systemctl start mysqldtags: systemd- name: set mysql passwdshell: /home/application/mysql/app/bin/mysql -e "alter user 'root'@'localhost' identified by '{{ mysql_password }}';"tags: mysql_passwd- name: create  jdbc usermysql_user:login_user: "root"login_password: "{{ mysql_password }}"login_unix_socket: /tmp/mysql.sockname: "{{ jdbc_user }}"password: "{{ jdbc_user_password }}"host: "{{ jdbc_ip }}"priv: "*.*:all"state: "present"

4.2.4.3 編寫files/mysqld.service 文件

使用systemd 管理mysqld,需要注意配置文件中LimitNOFILE?的值

vim root/ansible/roles/mysql/files/mysqld.service[Unit]
Description=MySQL Server
Documentation=man:mysqld
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/home/application/mysql/app/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 65535
4.2.4.4 編寫templates/my.cnf-master.j2 模板文件

my.cnf 配置文件,因人而異,僅供參考,默認我這里開啟了binlog

[mysql]
socket=/tmp/mysql.sock
default-character-set=utf8[mysqld]
user=mysql
basedir=/home/application/mysql/app
datadir=/home/application/mysql/data
character_set_server=utf8
collation-server=utf8_general_ci#日志時間
log_timestamps=SYSTEMport=3306
socket=/tmp/mysql.sockmax_connections=1000
max_allowed_packet=500M
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION#binlog配置
server_id={{ SERVER_ID }}
log-bin=mysql-bin
max_binlog_size = 100M
binlog_format=row
log_slave_updates
expire_logs_days=7#只能用IP地址檢查客戶端的登錄,不用主機名
skip-name-resolve=1
innodb_adaptive_hash_index=0

五、執行ansible-playbook

5.1 檢測配置文件是否正確

#檢測指定role, 使用 -t  指定role 的tag
ansible-playbook -i hosts main.yml -C -t  mysql

5.2 安裝部署

#檢測指定role, 使用 -t  指定role 的tag
ansible-playbook -i hosts main.yml -t  mysql

六、常見問題

6.1?libncurses.so?問題

mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory

image-20240117161008954

報錯原因: Linux系統中缺少libaio軟件包解決:
yum install libaio
yum install ncurses-compat-libs

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/72406.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/72406.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/72406.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于javaweb的SpringBoot農資商城購物商城系統設計與實現(源碼+文檔+部署講解)

技術范圍:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、小程序、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容:免費功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論…

angular打地鼠

說明:我計劃用angular做一款打地鼠的小游戲, 打地鼠游戲實現文檔 🎮 游戲邏輯 ?游戲場景 采用 3x3 網格布局的 9 個地鼠洞?核心機制 地鼠隨機從洞口彈出點擊有效目標獲得積分30 秒倒計時游戲模式 ?難度系統 簡單模式:生成間…

博客網站(springboot)整合deepseek實現在線調用

🎉🎉🎉🎉🎉🎉 歡迎訪問的個人博客:https://swzbk.site/,加好友,拉你入福利群 🎉🎉🎉🎉🎉🎉 1、de…

Kubernetes 單節點集群搭建

Kubernetes 單節點集群搭建教程 本人嘗試基于Ubuntu搭建一個單節點K8S集群,其中遇到各種問題,最大的問題就是網絡,各種鏡像源下載不下來,特此記錄!注意:文中使用了幾個鏡像,將看來可能失效導致安…

【PTA題目解答】7-3 字符串的全排列(20分)next_permutation

1.題目 給定一個全由小寫字母構成的字符串,求它的全排列,按照字典序從小到大輸出。 輸入格式: 一行,一個字符串,長度不大于8。 輸出格式: 輸出所有全排列,每行一種排列形式,字典序從小到大。 輸入樣例…

專題三0~n-1中缺失的數字

1.題目 給一個數組,單調性是遞增的,需要找到缺失的數字,加上這個數字就變為等差數組了。 2.算法原理 這里用二分來解決,而二段性是根據下標區分,臨界值前的數字于下標相對應,臨界值后的于下標相差1&#x…

【圖像處理】ISP(Image Signal Processor) 圖像處理器的用途和工作原理?

ISP(圖像信號處理器)是數字影像設備的“視覺大腦”,負責將傳感器捕獲的原始電信號轉化為我們看到的高清圖像。以下從用途和工作原理兩方面通俗解析: 一、ISP的核心用途:讓照片“更像眼睛看到的” 提升畫質&#xff1a…

python學習筆記-mysql數據庫操作

現有一個需求,調用高德api獲取全國縣級以上行政區數據并保存為json文件,使用python獲取: import requests import json# 高德API Key api_key "your_api_key"# 調用行政區域查詢API def fetch_districts():url f"https://r…

Redisson 實現分布式鎖源碼淺析

大家好,我是此林。 今天來分享Redisson分布式鎖源碼。還是一樣,我們用 問題驅動 的方式展開講述。 1. redis 中如何使用 lua 腳本? Redis內置了lua解釋器,lua腳本有兩個好處: 1. 減少多次Redis命令的網絡傳輸開銷。…

【軟件】免費的PDF全文翻譯軟件,能保留公式圖表的樣式

轉載請注明出處:小鋒學長生活大爆炸[xfxuezhagn.cn] 如果本文幫助到了你,歡迎[點贊、收藏、關注]哦~ 很多PDF全文翻譯軟件都是收費的,而劃線翻譯看著又很累。這個開源的PDF全文翻譯軟件非常好用,并且能夠保留公式、圖表、目錄和注…

CentOS 7 系統上安裝 SQLite

1. 檢查系統更新 在安裝新軟件之前,建議先更新系統的軟件包列表,以確保使用的是最新的軟件源和補丁。打開終端,執行以下命令: sudo yum update -y -y 選項表示在更新過程中自動回答 “yes”,避免手動確認。 2. 安裝 …

Gin(后端)和 Vue3(前端)中實現 Server-Sent Events(SSE)推送

在 Gin(后端)和 Vue3(前端)中實現 Server-Sent Events(SSE)推送,主要分為以下幾個步驟: 后端(Gin)實現 SSE Gin 框架可以使用 c.SSEvent 方法來推送 SSE 事…

大模型微調中顯存占用和訓練時間的影響因素

BatchSize 顯存占用:與batch_size呈線性關系,可理解為 M t o t a l M f i x e d B a t c h S i z e ? M p e r ? s a m p l e M_{total}M_{fixed}BatchSize*M_{per-sample} Mtotal?Mfixed?BatchSize?Mper?sample?,其中 M f i x e d…

【排序算法對比】快速排序、歸并排序、堆排序

排序算法對比:快速排序、歸并排序、堆排序 1. 快速排序(Quick Sort) 原理 快速排序采用 分治法(Divide and Conquer),通過選取基準值(pivot),將數組劃分為 小于基準值…

PentestGPT 下載

PentestGPT 下載 PentestGPT 介紹 PentestGPT(Penetration Testing GPT)是一個基于大語言模型(LLM)的智能滲透測試助手。它結合了 ChatGPT(或其他 GPT 模型)與滲透測試工具,幫助安全研究人員自…

防火墻虛擬系統實驗

一實驗拓撲 二實驗過程 配置資源 創建虛擬系統 配置管理員 創建安全策略

代碼隨想錄算法訓練營第31天 | 56. 合并區間 738.單調遞增的數字 968.監控二叉樹

56. 合并區間 代碼隨想錄 56. 合并區間 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int[][] merge(int[][] intervals) {Arrays.sort(intervals,(a,b)->{if(a[0] b[0])return a[1] - b[1];return a[0] - b[0];});List<int[]> result new Arra…

Go語言對于MySQL的基本操作

一.下載依賴 終端中輸入&#xff1a; go get -u github.com/go-sql-driver/mysql 導入包 import ("database/sql"_ "github.com/go-sql-driver/mysql" ) 二.案例 package main//go get-u github.com/go-sql-driver/mysql 獲取驅動 import ("databa…

Linux與深入HTTP序列化和反序列化

深入HTTP序列化和反序列化 本篇介紹 在上一節已經完成了客戶端和服務端基本的HTTP通信&#xff0c;但是前面的傳遞并沒有完全體現出HTTP的序列化和反序列化&#xff0c;為了更好得理解其工作流程&#xff0c;在本節會以更加具體的方式分析到HTTP序列化和反序列化 本節會在介紹…

基于Python+SQLite實現(Web)驗室設備管理系統

實驗室設備管理系統 應用背景 為方便實驗室進行設備管理&#xff0c;某大學擬開發實驗室設備管理系統 來管理所有實驗室里的各種設備。系統可實現管理員登錄&#xff0c;查看現有的所有設備&#xff0c; 增加設備等功能。 開發環境 Mac OSPyCharm IDEPython3Flask&#xff…