使用 dbops 快速部署 MySQL 数据库

宁睿  金牌会员 | 2024-10-28 09:52:24 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 873|帖子 873|积分 2629

大家好,这里是 Lucifer三思而后行,专注于提升数据库运维效率。
  
  
前言

昨天群里有位朋友分享了芬达大佬的 MySQL 部署工具:dbops,抱着试一试的心态玩了一把,确实很给力。今天给大家分享一下,完全免费哦!
介绍

dbops 是一套高效的 ansible playbook 集合,目前是一个可以自动化安装和部署生产级别的 MySQL 及周边生态的工具。dbops 正在持续迭代开发中,目前已经支持:


  • MySQL 5.7、8.0、8.4
  • openGauss 5.0
dbops 的理念:


  • 高效

    • 并发推送安装包,并发地部署数据库
    • 全自动化部署,无需人工干预
    • 安装包体积小,节省下载时间

  • 优雅

    • 采用 ansible-lint 做代码优化
    • 使用纯优雅语言编写(python),尽量使用内置模块,避免使用 shell

  • 规范 (Code as Standrad)

    • MySQL 满意企业生产级规范

   Code as Standrad 这个理念由芬达提出,目的是镌汰对部署规范文档的依赖,通过 playbook 编码来固定部署规范。如果你使用 dbops 进行部署,那就相当于满意了交维规范。
  目前支持的数据库小版本的硬限定:


  • MySQL 5.7: >= 5.7.26
  • MySQL 8.0: >= 8.0.28
  • MySQL 8.4.0: >= 8.4.0
  • Percona 5.7: 暂未设限定
  • Percona 8.0: 暂未设限定
  • GreatSQL 8.0: 8.0.32-24、8.0.32-25
  • openGauss: == 5.0.0
   请注意,这些仅仅是硬编码到 pre_tasks/validate_common_config_setting.yml 的硬限定,是由于作者没有测过小于即是这些版本。特别必要时,用户也可以自行修改代码,放开限定。
  支持的系统和数据库架构:
ansible

mysql-ansible


opengauss-ansible

注意,作者在开发时已考虑了某些系统或版本的兼容性,颠末判定后填写了 Y,但实际上并未进行过严酷实测。
下载 dbops

这里建议下载稳固发行版,如果必要测试可以下载开发版进行尝鲜。
   Gitee 下载地点:https://gitee.com/fanderchan/dbops
  Gitee 下载



开发版下载

选择 克隆/下载即可:

我这里是通过服务器联网直接下载的方式:
  1. # 挂载本地 ISO
  2. mount /dev/sr0 /mnt/
  3. # 配置本地 YUM 源
  4. ## 备份系统初始配置文件
  5. mkdir -p /etc/yum.repos.d/bak
  6. mv /etc/yum.repos.d/* /etc/yum.repos.d/bak
  7. ## 一键配置软件源,默认 ISO 安装镜像挂载在 /mnt 目录下
  8. cat<<-EOF>/etc/yum.repos.d/local.repo
  9. [server]
  10. name=server
  11. baseurl=file:///mnt
  12. enabled=1
  13. gpgcheck=0
  14. EOF
  15. ## 查看配置好的软件源
  16. cat /etc/yum.repos.d/local.repo
  17. # 最小化安装需要自行安装 wget 功能
  18. yum install -y wget
  19. # 通过 wget 方式下载稳定发行版
  20. cd ~
  21. dbops_version="1.4.20240729"
  22. wget https://gitee.com/fanderchan/dbops/releases/download/dbops.${dbops_version}/dbops.${dbops_version}-Linux-x86_64.tar.gz
复制代码
无法联网的朋友建议直接下载上传即可。
部署 dbops

为了低沉 Ansible 部署难度和兼容性问题,统一版本以避免因使用不同版本产生 bug,所以作者特意采用了绿色版 Ansible 2.10.5,并集成到了 dbops 中。部署过程中,系统会自动安装 Python3,并搭配使用 Python3 和 Ansible 2.10.5。为加速 dbops 的下载速度,作者精简了绿色版 Ansible 中不常用的功能,使其体积非常小。ansible-portable 目录压缩后仅有 3.6 MB,整个 dbops.tar.gz 压缩包仅有 20 MB!
解压缩 dbops

作者推荐将安装路径设置为 /usr/local:
  1. # 解压
  2. [root@mysql8 ~]# tar zxvf dbops.1.4.20240729-Linux-x86_64.tar.gz -C /usr/local
  3. # 查看解压后的目录
  4. [root@mysql8 ~]# cd /usr/local/dbops/
  5. [root@mysql8 dbops]# ll
  6. total 20
  7. -rw-r--r--. 1 root root 11356 Jul 29 16:41 LICENSE
  8. drwxr-xr-x. 6 root root   148 Jul 29 16:41 mysql_ansible
  9. drwxr-xr-x. 6 root root   120 Jul 29 16:41 opengauss_ansible
  10. drwxr-xr-x. 3 root root    97 Jul 29 16:41 portable-ansible-v0.5.0-py3
  11. -rw-r--r--. 1 root root   915 Jul 29 16:41 README.en.md
  12. -rw-r--r--. 1 root root    58 Jul 29 16:41 README.md
复制代码
部署 ansible

进入目录,执行 shell 脚本:
  1. [root@mysql8 dbops]# cd /usr/local/dbops/portable-ansible-v0.5.0-py3
  2. [root@mysql8 portable-ansible-v0.5.0-py3]# sh setup_portable_ansible.sh
  3. Loaded plugins: fastestmirror
  4. Loading mirror speeds from cached hostfile
  5. Resolving Dependencies
  6. --> Running transaction check
  7. ---> Package python3.x86_64 0:3.6.8-17.el7 will be installed
  8. --> Processing Dependency: python3-libs(x86-64) = 3.6.8-17.el7 for package: python3-3.6.8-17.el7.x86_64
  9. --> Processing Dependency: python3-setuptools for package: python3-3.6.8-17.el7.x86_64
  10. --> Processing Dependency: python3-pip for package: python3-3.6.8-17.el7.x86_64
  11. --> Processing Dependency: libpython3.6m.so.1.0()(64bit) for package: python3-3.6.8-17.el7.x86_64
  12. --> Running transaction check
  13. ---> Package python3-libs.x86_64 0:3.6.8-17.el7 will be installed
  14. --> Processing Dependency: libtirpc.so.1()(64bit) for package: python3-libs-3.6.8-17.el7.x86_64
  15. ---> Package python3-pip.noarch 0:9.0.3-8.el7 will be installed
  16. ---> Package python3-setuptools.noarch 0:39.2.0-10.el7 will be installed
  17. --> Running transaction check
  18. ---> Package libtirpc.x86_64 0:0.2.4-0.16.el7 will be installed
  19. --> Finished Dependency Resolution
  20. Dependencies Resolved
  21. =====================================================================================================================================================================================================
  22. Package                                               Arch                                      Version                                             Repository                                 Size
  23. =====================================================================================================================================================================================================
  24. Installing:
  25. python3                                               x86_64                                    3.6.8-17.el7                                        server                                     70 k
  26. Installing for dependencies:
  27. libtirpc                                              x86_64                                    0.2.4-0.16.el7                                      server                                     89 k
  28. python3-libs                                          x86_64                                    3.6.8-17.el7                                        server                                    6.9 M
  29. python3-pip                                           noarch                                    9.0.3-8.el7                                         server                                    1.6 M
  30. python3-setuptools                                    noarch                                    39.2.0-10.el7                                       server                                    629 k
  31. Transaction Summary
  32. =====================================================================================================================================================================================================
  33. Install  1 Package (+4 Dependent packages)
  34. Total download size: 9.3 M
  35. Installed size: 48 M
  36. Downloading packages:
  37. -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  38. Total                                                                                                                                                                114 MB/s | 9.3 MB  00:00:00     
  39. Running transaction check
  40. Running transaction test
  41. Transaction test succeeded
  42. Running transaction
  43.   Installing : libtirpc-0.2.4-0.16.el7.x86_64                                                                                                                                                    1/5
  44.   Installing : python3-pip-9.0.3-8.el7.noarch                                                                                                                                                    2/5
  45.   Installing : python3-setuptools-39.2.0-10.el7.noarch                                                                                                                                           3/5
  46.   Installing : python3-3.6.8-17.el7.x86_64                                                                                                                                                       4/5
  47.   Installing : python3-libs-3.6.8-17.el7.x86_64                                                                                                                                                  5/5
  48.   Verifying  : libtirpc-0.2.4-0.16.el7.x86_64                                                                                                                                                    1/5
  49.   Verifying  : python3-pip-9.0.3-8.el7.noarch                                                                                                                                                    2/5
  50.   Verifying  : python3-3.6.8-17.el7.x86_64                                                                                                                                                       3/5
  51.   Verifying  : python3-setuptools-39.2.0-10.el7.noarch                                                                                                                                           4/5
  52.   Verifying  : python3-libs-3.6.8-17.el7.x86_64                                                                                                                                                  5/5
  53. Installed:
  54.   python3.x86_64 0:3.6.8-17.el7                                                                                                                                                                     
  55. Dependency Installed:
  56.   libtirpc.x86_64 0:0.2.4-0.16.el7              python3-libs.x86_64 0:3.6.8-17.el7              python3-pip.noarch 0:9.0.3-8.el7              python3-setuptools.noarch 0:39.2.0-10.el7            
  57. Complete!
  58. which: no sshpass in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
  59. Please run 'source ~/.bashrc' to apply the changes in your current shell.
复制代码
生效 .bashrc:
  1. [root@mysql8 portable-ansible-v0.5.0-py3]# source ~/.bashrc
复制代码
确认是否部署乐成:
  1. [root@mysql8 portable-ansible-v0.5.0-py3]# ansible --version
  2. ansible 2.10.5
  3.   config file = None
  4.   configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  5.   ansible python module location = /usr/local/dbops/portable-ansible-v0.5.0-py3/ansible/ansible
  6.   executable location = /usr/local/dbops/portable-ansible-v0.5.0-py3/ansible
  7.   python version = 3.6.8 (default, Oct 13 2020, 16:18:22) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
复制代码
python 版本是 3.x 为正确。ansible 版本为 2.10.5 为正确。
使用 dbops

dbops 支持的部署架构中有些至少必要 3 台机器,比方 MySQL 的 MGR 架构。建议 dbops 独立用一台机器,那么整套实验就至少必要 4 台机器。如果实在没办法,可以把 dbops 部署到第一台 MySQL 复用机器。
本次只演示单机模式部署,dbops 和 MySQL 共用一台服务器主机。
部署单机

修改 hosts.ini,添加必要操作的机器进去:
  1. ## 进入 hosts.ini 所在目录
  2. [root@mysql8 inventory]# pwd
  3. /usr/local/dbops/mysql_ansible/inventory
  4. ## 修改 hosts.ini 中对应的 IP 和 root 密码
  5. [root@mysql8 inventory]# vi hosts.ini
  6. [root@mysql8 inventory]# cat hosts.ini
  7. [dbops_mysql]
  8. 192.168.168.162 ansible_user=root ansible_ssh_pass="'oracle'"
  9. [all:vars]
  10. #ansible_python_interpreter=/usr/bin/python3
复制代码
建议在配置完 host.ini 之后验证一下服务器的连通性:
  1. [root@mysql8 playbooks]# pwd
  2. /usr/local/dbops/mysql_ansible/playbooks
  3. [root@mysql8 playbooks]# ansible all -m ping
  4. 192.168.6.162 | SUCCESS => {
  5.     "ansible_facts": {
  6.         "discovered_interpreter_python": "/usr/bin/python"
  7.     },
  8.     "changed": false,
  9.     "ping": "pong"
  10. }
复制代码
修改公共配置参数文件 common_config.yml:
  1. ## 主要关注 MySQL 版本和端口号,如果不需要修改则跳过
  2. [root@mysql8 playbooks]# pwd
  3. /usr/local/dbops/mysql_ansible/playbooks
  4. [root@mysql8 playbooks]# grep mysql_version: common_config.yml
  5. mysql_version: "8.4.0"
  6. [root@mysql8 playbooks]# grep mysql_port: common_config.yml
  7. mysql_port: 3306
复制代码
上传安装包:
   MySQL 安装包下载地点:MySQL Product Archives
  

选择安装包版本时,必要注意主机的 glibc 版本以及 CPU 架构:
  1. ## glibc 版本
  2. [root@mysql8 ~]# ldd --version
  3. ldd (GNU libc) 2.17
  4. Copyright (C) 2012 Free Software Foundation, Inc.
  5. This is free software; see the source for copying conditions.  There is NO
  6. warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  7. Written by Roland McGrath and Ulrich Drepper.
  8. ## CPU 架构
  9. [root@mysql8 ~]# uname -m
  10. x86_64
复制代码
下载完成后上传至指定目录:
  1. [root@mysql8 downloads]# pwd
  2. /usr/local/dbops/mysql_ansible/downloads
  3. [root@mysql8 downloads]# ll
  4. total 59872
  5. -rw-r--r--. 1 root root 61305888 Aug 23 16:03 mysql-8.4.0-linux-glibc2.17-x86_64-minimal.tar.xz
复制代码
执行 playbook 部署,安装过程不必要联网:
  1. [root@mysql8 playbooks]# pwd
  2. /usr/local/dbops/mysql_ansible/playbooks
  3. [root@mysql8 playbooks]# ansible-playbook single_node.yml
  4. PLAY [Deploy single-node MySQL server using binary installation] ************************************************************************************************************************************
  5. TASK [Gathering Facts] ******************************************************************************************************************************************************************************
  6. ok: [192.168.6.162]
  7. TASK [Check if password meets complexity requirements] **********************************************************************************************************************************************
  8. ok: [192.168.6.162] => (item=None)
  9. ok: [192.168.6.162] => (item=None)
  10. ok: [192.168.6.162] => (item=None)
  11. ok: [192.168.6.162] => (item=None)
  12. ok: [192.168.6.162] => (item=None)
  13. ok: [192.168.6.162] => (item=None)
  14. ok: [192.168.6.162]
  15. TASK [Print custom error message] *******************************************************************************************************************************************************************
  16. skipping: [192.168.6.162]
  17. TASK [Validate fcs_ setting are 0 or 1] *************************************************************************************************************************************************************
  18. skipping: [192.168.6.162] => (item=fcs_skip_db_mount_verification)
  19. skipping: [192.168.6.162] => (item=fcs_skip_check_ntpd_or_chrony_running)
  20. skipping: [192.168.6.162] => (item=fcs_auto_download_mysql)
  21. skipping: [192.168.6.162] => (item=fcs_create_mysql_fast_login)
  22. skipping: [192.168.6.162] => (item=fcs_backup_script_create_backup_user)
  23. skipping: [192.168.6.162] => (item=fcs_mysql_use_jemalloc)
  24. skipping: [192.168.6.162] => (item=fcs_use_greatsql_ha)
  25. TASK [Validate mysql_port is within range] **********************************************************************************************************************************************************
  26. skipping: [192.168.6.162]
  27. TASK [Validate mysql_version is within range] *******************************************************************************************************************************************************
  28. skipping: [192.168.6.162]
  29. TASK [Validate mysql_version is within range] *******************************************************************************************************************************************************
  30. skipping: [192.168.6.162]
  31. TASK [Validate db_type is a valid option] ***********************************************************************************************************************************************************
  32. skipping: [192.168.6.162]
  33. TASK [Validate server_specs is a valid option] ******************************************************************************************************************************************************
  34. skipping: [192.168.6.162]
  35. TASK [Check if mysql-8.4.0-linux-glibc2.17-x86_64-minimal.tar.xz exists in ../downloads/ (local)] ***************************************************************************************************
  36. changed: [192.168.6.162]
  37. TASK [Set the OS type variable] *********************************************************************************************************************************************************************
  38. ok: [192.168.6.162]
  39. TASK [Print the OS type] ****************************************************************************************************************************************************************************
  40. ok: [192.168.6.162] => {
  41.     "msg": "The OS type of host 192.168.6.162 is CentOS7"
  42. }
  43. TASK [Assert if OS type is supported] ***************************************************************************************************************************************************************
  44. ok: [192.168.6.162] => {
  45.     "changed": false,
  46.     "msg": "All assertions passed"
  47. }
  48. TASK [Check for Python 3] ***************************************************************************************************************************************************************************
  49. ok: [192.168.6.162]
  50. TASK [Check for Python 2] ***************************************************************************************************************************************************************************
  51. ok: [192.168.6.162]
  52. TASK [Set Python interpreter] ***********************************************************************************************************************************************************************
  53. ok: [192.168.6.162]
  54. TASK [Print the Python interpreter] *****************************************************************************************************************************************************************
  55. ok: [192.168.6.162] => {
  56.     "msg": "The Python interpreter of host 192.168.6.162 is /usr/bin/python2"
  57. }
  58. TASK [Set server_specs_processor_count and server_specs_memtotal_gb based on server_specs] **********************************************************************************************************
  59. skipping: [192.168.6.162]
  60. TASK [Gen random MySQL server_id] *******************************************************************************************************************************************************************
  61. ok: [192.168.6.162]
  62. TASK [Collect mysql_server_id to a list on localhost] ***********************************************************************************************************************************************
  63. ok: [192.168.6.162]
  64. TASK [Check for duplicate mysql_server_id] **********************************************************************************************************************************************************
  65. ok: [192.168.6.162] => {
  66.     "changed": false,
  67.     "msg": "All assertions passed"
  68. }
  69. TASK [Generate random UUID if mgr_use_random_uuid is set to 1] **************************************************************************************************************************************
  70. changed: [192.168.6.162]
  71. TASK [set_fact] *************************************************************************************************************************************************************************************
  72. ok: [192.168.6.162]
  73. TASK [Display the list of target hosts and additional information] **********************************************************************************************************************************
  74. ok: [192.168.6.162] => {
  75.     "msg": [
  76.         "Hosts to be affected by Deploy single-node MySQL server using binary installation: 192.168.6.162",
  77.         "DB type: mysql",
  78.         "MySQL port: 3306",
  79.         "MySQL version: 8.4.0",
  80.         "Server specs: auto",
  81.         "Roles to be executed: ../roles/pre_check_and_set, ../roles/mysql_server"
  82.     ]
  83. }
  84. TASK [Prompt user for confirmation] *****************************************************************************************************************************************************************
  85. [Prompt user for confirmation]
  86. This will perform Deploy single-node MySQL server using binary installation on the displayed hosts. Please type 'confirm' to continue or press Ctrl+C to cancel.:
  87. ok: [192.168.6.162]
  88. TASK [Check if user confirmed] **********************************************************************************************************************************************************************
  89. skipping: [192.168.6.162]
  90. TASK [Include role] *********************************************************************************************************************************************************************************
  91. TASK [../roles/pre_check_and_set : Check yum and install libselinux-python3] ************************************************************************************************************************
  92. ok: [192.168.6.162]
  93. TASK [../roles/pre_check_and_set : Install ncurses-compat-libs if necessary] ************************************************************************************************************************
  94. skipping: [192.168.6.162]
  95. TASK [../roles/pre_check_and_set : Intall tar for openEuler20] **************************************************************************************************************************************
  96. ok: [192.168.6.162]
  97. TASK [../roles/pre_check_and_set : Set SeLinux disabled] ********************************************************************************************************************************************
  98. [WARNING]: SELinux state change will take effect next reboot
  99. ok: [192.168.6.162]
  100. TASK [../roles/pre_check_and_set : Stop and Disabled Firewalld] *************************************************************************************************************************************
  101. ok: [192.168.6.162]
  102. TASK [../roles/pre_check_and_set : Gather service facts] ********************************************************************************************************************************************
  103. skipping: [192.168.6.162]
  104. TASK [../roles/pre_check_and_set : Assert NTP or Chrony is running and only one is enabled] *********************************************************************************************************
  105. skipping: [192.168.6.162]
  106. TASK [../roles/pre_check_and_set : Check whether NUMA is turned off] ********************************************************************************************************************************
  107. fatal: [192.168.6.162]: FAILED! => {"changed": false, "cmd": ["grep", "-q", "numa=off", "/proc/cmdline"], "delta": "0:00:00.004868", "end": "2024-08-23 16:07:01.721770", "msg": "non-zero return code", "rc": 1, "start": "2024-08-23 16:07:01.716902", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}
  108. ...ignoring
  109. TASK [../roles/pre_check_and_set : Show warning if NUMA is not turned off] **************************************************************************************************************************
  110. ok: [192.168.6.162] => {
  111.     "msg": "Warning: NUMA is not turned off."
  112. }
  113. TASK [../roles/pre_check_and_set : Update sysctl configuration file] ********************************************************************************************************************************
  114. ok: [192.168.6.162]
  115. TASK [../roles/pre_check_and_set : Reload sysctl] ***************************************************************************************************************************************************
  116. changed: [192.168.6.162]
  117. TASK [../roles/pre_check_and_set : Extract parent directories of mysql_data_dir_base] ***************************************************************************************************************
  118. skipping: [192.168.6.162]
  119. TASK [../roles/pre_check_and_set : Remove root '/' from parent directories list] ********************************************************************************************************************
  120. skipping: [192.168.6.162]
  121. TASK [../roles/pre_check_and_set : Check if mount points exist for pre_check_and_set__mysql_data_dir_base_parents list] *****************************************************************************
  122. skipping: [192.168.6.162]
  123. TASK [../roles/pre_check_and_set : Find the first matching mount point for mysql_data_dir_base and its parents] *************************************************************************************
  124. skipping: [192.168.6.162] => (item={'block_used': 35061, 'uuid': '3d53107e-ce12-4c21-a78d-82f97fef2750', 'size_total': 1063256064, 'block_total': 259584, 'mount': '/boot', 'block_available': 224523, 'size_available': 919646208, 'fstype': 'xfs', 'inode_total': 524288, 'options': 'rw,seclabel,relatime,attr2,inode64,noquota', 'device': '/dev/sda1', 'inode_used': 326, 'block_size': 4096, 'inode_available': 523962})
  125. skipping: [192.168.6.162] => (item={'block_used': 4980714, 'uuid': '2020-11-02-15-15-23-00', 'size_total': 10200502272, 'block_total': 4980714, 'mount': '/mnt', 'block_available': 0, 'size_available': 0, 'fstype': 'iso9660', 'inode_total': 0, 'options': 'ro,relatime', 'device': '/dev/sr0', 'inode_used': 0, 'block_size': 2048, 'inode_available': 0})
  126. skipping: [192.168.6.162] => (item={'block_used': 379986, 'uuid': '3342f530-81a3-43d8-8405-5f4ecb2d6389', 'size_total': 97658605568, 'block_total': 23842433, 'mount': '/', 'block_available': 23462447, 'size_available': 96102182912, 'fstype': 'xfs', 'inode_total': 47708160, 'options': 'rw,seclabel,relatime,attr2,inode64,noquota', 'device': '/dev/mapper/centos-root', 'inode_used': 34255, 'block_size': 4096, 'inode_available': 47673905})
  127. TASK [../roles/pre_check_and_set : Debug output for mount point] ************************************************************************************************************************************
  128. skipping: [192.168.6.162]
  129. TASK [../roles/pre_check_and_set : Assert mount point is using xfs filesystem] **********************************************************************************************************************
  130. skipping: [192.168.6.162]
  131. TASK [../roles/pre_check_and_set : If it is a physical machine, double network card binding is required] ********************************************************************************************
  132. ok: [192.168.6.162] => {
  133.     "msg": "ens192"
  134. }
  135. TASK [../roles/pre_check_and_set : If it is a physical machine, double network card binding is required] ********************************************************************************************
  136. skipping: [192.168.6.162]
  137. TASK [../roles/pre_check_and_set : Add network interface alias to a temporary file] *****************************************************************************************************************
  138. changed: [192.168.6.162]
  139. TASK [../roles/pre_check_and_set : Fetch copy] ******************************************************************************************************************************************************
  140. changed: [192.168.6.162]
  141. TASK [../roles/pre_check_and_set : Append file /tmp/net_aliases.txt (delegate to 127.0.0.1)] ********************************************************************************************************
  142. ok: [192.168.6.162]
  143. TASK [../roles/pre_check_and_set : Check if shell output is 1] **************************************************************************************************************************************
  144. ok: [192.168.6.162] => {
  145.     "changed": false,
  146.     "msg": "All assertions passed"
  147. }
  148. TASK [../roles/pre_check_and_set : Delete /tmp/net_aliases.txt] *************************************************************************************************************************************
  149. changed: [192.168.6.162]
  150. TASK [../roles/pre_check_and_set : Delete /tmp/ssh/ (delegate to 127.0.0.1)] ************************************************************************************************************************
  151. changed: [192.168.6.162]
  152. TASK [../roles/mysql_server : Check if flag exists or not] ******************************************************************************************************************************************
  153. ok: [192.168.6.162]
  154. TASK [../roles/mysql_server : Fail if flag exists] **************************************************************************************************************************************************
  155. skipping: [192.168.6.162]
  156. TASK [../roles/mysql_server : Check port not in use —— mysql port 3306] *****************************************************************************************************************************
  157. ok: [192.168.6.162]
  158. TASK [../roles/mysql_server : Ensure group "mysql" exists] ******************************************************************************************************************************************
  159. ok: [192.168.6.162]
  160. TASK [../roles/mysql_server : Create mysql user] ****************************************************************************************************************************************************
  161. changed: [192.168.6.162]
  162. TASK [../roles/mysql_server : Create mysql directories] *********************************************************************************************************************************************
  163. ok: [192.168.6.162] => (item=/database/mysql/etc)
  164. ok: [192.168.6.162] => (item=/database/mysql/data)
  165. ok: [192.168.6.162] => (item=/database/mysql/tmp)
  166. ok: [192.168.6.162] => (item=/database/mysql/run)
  167. ok: [192.168.6.162] => (item=/database/mysql/log/binlog)
  168. ok: [192.168.6.162] => (item=/database/mysql/log/redolog)
  169. ok: [192.168.6.162] => (item=/database/mysql/log/relaylog)
  170. ok: [192.168.6.162] => (item=/database/mysql/etc/3306)
  171. ok: [192.168.6.162] => (item=/database/mysql/data/3306)
  172. ok: [192.168.6.162] => (item=/database/mysql/tmp/3306)
  173. ok: [192.168.6.162] => (item=/database/mysql/log/binlog/3306)
  174. ok: [192.168.6.162] => (item=/database/mysql/log/redolog/3306)
  175. ok: [192.168.6.162] => (item=/database/mysql/log/relaylog/3306)
  176. ok: [192.168.6.162] => (item=/database/mysql/base/8.4.0)
  177. TASK [../roles/mysql_server : Config /etc/my.cnf for mysql-5.7.x] ***********************************************************************************************************************************
  178. skipping: [192.168.6.162]
  179. TASK [../roles/mysql_server : Config /etc/my.cnf for mysql-8.0.x] ***********************************************************************************************************************************
  180. skipping: [192.168.6.162]
  181. TASK [../roles/mysql_server : Config /etc/my.cnf for mysql-8.4.x] ***********************************************************************************************************************************
  182. changed: [192.168.6.162]
  183. TASK [../roles/mysql_server : Config /etc/my.cnf for percona-5.7.x] *********************************************************************************************************************************
  184. skipping: [192.168.6.162]
  185. TASK [../roles/mysql_server : Config /etc/my.cnf for percona-8.0.x] *********************************************************************************************************************************
  186. skipping: [192.168.6.162]
  187. TASK [../roles/mysql_server : Config /etc/my.cnf for greatsql-5.7.x] ********************************************************************************************************************************
  188. skipping: [192.168.6.162]
  189. TASK [../roles/mysql_server : Config /etc/my.cnf for greatsql-8.0.x] ********************************************************************************************************************************
  190. skipping: [192.168.6.162]
  191. TASK [../roles/mysql_server : Install libaio and numactl] *******************************************************************************************************************************************
  192. ok: [192.168.6.162] => (item={'name': 'libaio'})
  193. ok: [192.168.6.162] => (item={'name': 'numactl'})
  194. TASK [../roles/mysql_server : Install jemalloc using yum] *******************************************************************************************************************************************
  195. skipping: [192.168.6.162]
  196. TASK [../roles/mysql_server : Set jemalloc rpm file name based on OS] *******************************************************************************************************************************
  197. skipping: [192.168.6.162]
  198. TASK [../roles/mysql_server : Copy jemalloc rpm to target server] ***********************************************************************************************************************************
  199. skipping: [192.168.6.162]
  200. TASK [../roles/mysql_server : Install jemalloc from local file] *************************************************************************************************************************************
  201. skipping: [192.168.6.162]
  202. TASK [../roles/mysql_server : Check if jemalloc installation failed] ********************************************************************************************************************************
  203. skipping: [192.168.6.162]
  204. TASK [../roles/mysql_server : Check if MySQL package exists locally(local)] *************************************************************************************************************************
  205. ok: [192.168.6.162]
  206. TASK [../roles/mysql_server : Fail if MySQL package not found and auto download is disabled(local)] *************************************************************************************************
  207. skipping: [192.168.6.162]
  208. TASK [../roles/mysql_server : Download MySQL binary tarball if not found locally and auto download is enabled(local)] *******************************************************************************
  209. skipping: [192.168.6.162]
  210. TASK [../roles/mysql_server : Download GreatSQL binary tarball if not found locally and auto download is enabled(local)] ****************************************************************************
  211. skipping: [192.168.6.162]
  212. TASK [../roles/mysql_server : Transfer MySQL install package to remote host] ************************************************************************************************************************
  213. changed: [192.168.6.162]
  214. TASK [../roles/mysql_server : Unarchive MySQL install package to /database/mysql/base/8.4.0] ********************************************************************************************************
  215. changed: [192.168.6.162]
  216. TASK [../roles/mysql_server : Touch unarchive_mysql_package_finished file] **************************************************************************************************************************
  217. changed: [192.168.6.162]
  218. TASK [../roles/mysql_server : Change owner to mysql user] *******************************************************************************************************************************************
  219. changed: [192.168.6.162]
  220. TASK [../roles/mysql_server : Make link /database/mysql/mysql-xx.yy.gz to /usr/local/mysql] *********************************************************************************************************
  221. changed: [192.168.6.162]
  222. TASK [../roles/mysql_server : Export mysql share object (*.os)] *************************************************************************************************************************************
  223. changed: [192.168.6.162]
  224. TASK [../roles/mysql_server : Load share object] ****************************************************************************************************************************************************
  225. ok: [192.168.6.162]
  226. TASK [../roles/mysql_server : Export path env variable] *********************************************************************************************************************************************
  227. changed: [192.168.6.162]
  228. TASK [../roles/mysql_server : Export path env to /root/.bashrc] *************************************************************************************************************************************
  229. changed: [192.168.6.162]
  230. TASK [../roles/mysql_server : Export path env to /home/mysql/.bashrc] *******************************************************************************************************************************
  231. changed: [192.168.6.162]
  232. TASK [../roles/mysql_server : Remove /usr/include/mysql] ********************************************************************************************************************************************
  233. ok: [192.168.6.162]
  234. TASK [../roles/mysql_server : Export include file to /usr/include/mysql] ****************************************************************************************************************************
  235. changed: [192.168.6.162]
  236. TASK [../roles/mysql_server : Create symbolic links for libssl.so and libcrypto.so] *****************************************************************************************************************
  237. skipping: [192.168.6.162] => (item={'src': 'libssl.so.10', 'dest': 'libssl.so'})
  238. skipping: [192.168.6.162] => (item={'src': 'libcrypto.so.10', 'dest': 'libcrypto.so'})
  239. TASK [../roles/mysql_server : Initialize-insecure for mysql-5.7.x] **********************************************************************************************************************************
  240. skipping: [192.168.6.162]
  241. TASK [../roles/mysql_server : Initialize-insecure for mysql-8.0.x or mysql-8.4.x] *******************************************************************************************************************
  242. changed: [192.168.6.162]
  243. TASK [../roles/mysql_server : Create systemd config file] *******************************************************************************************************************************************
  244. changed: [192.168.6.162]
  245. TASK [../roles/mysql_server : Start mysql(sytemctl)] ************************************************************************************************************************************************
  246. changed: [192.168.6.162]
  247. TASK [../roles/mysql_server : Config mysql.service start up on boot] ********************************************************************************************************************************
  248. changed: [192.168.6.162]
  249. TASK [../roles/mysql_server : Mysql status] *********************************************************************************************************************************************************
  250. ok: [192.168.6.162]
  251. TASK [../roles/mysql_server : Transfer sql statement to remote] *************************************************************************************************************************************
  252. changed: [192.168.6.162]
  253. TASK [../roles/mysql_server : Make mysql secure] ****************************************************************************************************************************************************
  254. changed: [192.168.6.162]
  255. TASK [../roles/mysql_server : Remove temp file /tmp/make_mysql_secure.sql] **************************************************************************************************************************
  256. changed: [192.168.6.162]
  257. TASK [../roles/mysql_server : Ensure expect is installed] *******************************************************************************************************************************************
  258. changed: [192.168.6.162]
  259. TASK [../roles/mysql_server : Transfer expect script to remote host] ********************************************************************************************************************************
  260. changed: [192.168.6.162]
  261. TASK [../roles/mysql_server : Execute expect script to set MySQL login-path] ************************************************************************************************************************
  262. [WARNING]: Module remote_tmp /home/mysql/.ansible/tmp did not exist and was created with a mode of 0700, this may cause issues when running as another user. To avoid this, create the remote_tmp
  263. dir with the correct permissions manually
  264. ok: [192.168.6.162]
  265. TASK [../roles/mysql_server : Set up alias in .bashrc named —— db3306] ******************************************************************************************************************************
  266. changed: [192.168.6.162]
  267. TASK [../roles/mysql_server : Remove expect script from remote host] ********************************************************************************************************************************
  268. changed: [192.168.6.162]
  269. TASK [../roles/mysql_server : Touch single_finish.flag] *********************************************************************************************************************************************
  270. changed: [192.168.6.162]
  271. PLAY RECAP ******************************************************************************************************************************************************************************************
  272. 192.168.6.162              : ok=66   changed=31   unreachable=0    failed=0    skipped=36   rescued=0    ignored=1   
  273. Playbook run took 0 days, 0 hours, 1 minutes, 42 seconds
复制代码
整个过程十分丝滑,大概必要 1~2 分钟就完成了,中心会有一步必要确认信息,输入 confirm 回车即可!
毗连测试

使用 mysql 用户毗连 MySQL,默认密码为 Dbops@8888:
  1. [root@mysql8 playbooks]# su - mysql
  2. Last login: Fri Aug 23 15:54:50 CST 2024 on pts/0
  3. [mysql@mysql8 ~]$ mysql -uadmin -h127.0.0.1 -P3306 -pDbops@8888 -e "select @@version"
  4. mysql: [Warning] Using a password on the command line interface can be insecure.
  5. +-----------+
  6. | @@version |
  7. +-----------+
  8. | 8.4.0     |
  9. +-----------+
复制代码
使用快速登录毗连,这里实在是做了 alias 别名:
  1. ## 查看 alias 别名
  2. [mysql@mysql8 ~]$ alias | grep db3306
  3. alias db3306='mysql --login-path=db3306'
  4. ## 连接 MySQL 数据库
  5. [mysql@mysql8 ~]$ db3306
  6. Welcome to the MySQL monitor.  Commands end with ; or \g.
  7. Your MySQL connection id is 11
  8. Server version: 8.4.0 MySQL Community Server - GPL
  9. Copyright (c) 2000, 2024, Oracle and/or its affiliates.
  10. Oracle is a registered trademark of Oracle Corporation and/or its
  11. affiliates. Other names may be trademarks of their respective
  12. owners.
  13. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  14. mysql> show databases;
  15. +--------------------+
  16. | Database           |
  17. +--------------------+
  18. | information_schema |
  19. | mysql              |
  20. | performance_schema |
  21. | sys                |
  22. +--------------------+
  23. 4 rows in set (0.01 sec)
复制代码
对于任何 playbook,执行前都只必要做三件事即可


  • 正确地配置 inventory/hosts.ini 主机信息
  • 正确地配置 playbook/common_config.yml 的通用参数部门信息
  • 正确地配置 playbook/vars/var_xxx.yml 的专有参数部门信息
可以发现,如果熟悉了整个流程之后,部署将变得十分简单,特别是多台并行部署行,可以在几分钟内部署几十上百套数据库,总之 Niubility

往期出色文章推荐

   Oracle RAC 启动顺序,你真的了解吗?
达梦数据库一键安装脚本(免费)一篇文章让你彻底掌握 Python

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

宁睿

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表