ansible一键安装mysql8.0
ansbile安装:
# ansible在CentOS7中需要安装epel仓库
yum install -y epel-release
yum install -y ansible
安装有好几种方法,yum安装是最简单的,安装ansible不是重点。
我的版本如下:
[root@szwpldb1081 mysqltools]# ansible --version
ansible 2.7.
config file = /etc/ansible/ansible.cfg
configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/local/python-3.7./lib/python3./site-packages/ansible
executable location = /usr/local/python/bin/ansible
python version = 3.7. (default, Dec , ::) [GCC 4.8. (Red Hat 4.8.-39.0.)]
我的目录树如下:
[root@szwpldb1081 mysql]# tree
.
├── common
│ ├── config_systemd.yaml
│ ├── create_my_cnf.yaml
│ ├── create_user.yaml
│ ├── export_path.yaml
│ ├── init_mysql_data_dir.yaml
│ ├── install_mysql.yaml
│ └── mysql_dependencies.yaml
├── install_group_replication.yaml
├── install_master_slaves.yaml
├── install_multi_source_replication.yaml
├── install_single.yaml
├── templates
│ ├── 5.7
│ │ └── my.cnf.jinja
│ ├── 8.0
│ │ ├── my.cnf
│ │ └── my.cnf.jinja
│ ├── init_mysql_data_dir.sh
│ ├── ld.so.conf
│ ├── mysqld.service
│ ├── mysqldump_backup.sh
│ ├── untar_mysql_pkg.sh
│ ├── users.sql
│ └── users.sql.jinja
├── upgrad_single_mysql.yaml
└── vars
├── group_replication.yaml
├── master_slaves.yaml
├── multi_source_replication.yaml
└── mysql.yaml
以安装单机版为例, install_single.yaml 如下:
[root@szwpldb1081 mysql]# cat install_single.yaml
---
- hosts: uat
remote_user: root
become_user: root
become: yes
vars_files:
- ../../config.yaml
- ./vars/mysql.yaml
tasks:
- name: create mysql user
import_tasks: common/create_user.yaml - name: install dependencies
import_tasks: common/mysql_dependencies.yaml - name: "create /etc/my-{{mysql_port}}.cnf"
import_tasks: common/create_my_cnf.yaml - name: "install {{mysql_binary_pkg}}"
import_tasks: common/install_mysql.yaml - name: "init data dir"
import_tasks: common/init_mysql_data_dir.yaml - name: "config path"
import_tasks: common/export_path.yaml - name: "config systemd and start mysqld"
import_tasks: common/config_systemd.yaml
create_user.yaml
[root@szwpldb1081 mysql]# cat common/create_user.yaml
---
- name: create mysql group
group:
name: "{{mysql_group}}"
state: present
gid: "{{mysql_gid}}" - name: create user "{{mysql_user}}"
user:
name: "{{mysql_user}}"
state: present
uid: "{{mysql_uid}}"
group: mysql
mysql_dependencies.yaml
[root@szwpldb1081 mysql]# cat common/mysql_dependencies.yaml
---
- name: install libaio
yum:
name: libaio-devel
state: present - name: install numactl
yum:
name: numactl-devel
state: present - name: install perl-Data-Dumper
yum:
name: perl-Data-Dumper
state: present
install_mysql.yaml
[root@szwpldb1081 mysql]# cat common/install_mysql.yaml
---
- name: "transfer {{mysql_binary_pkg}} to target host(s)."
copy:
src: "../../../sps/mysql/{{mysql_binary_pkg}}"
dest: "/tmp/mysql/"
owner: "{{mysql_user}}" - name: "generate untar script /tmp/untar_mysql_pkg.sh"
template:
src: "../templates/untar_mysql_pkg.sh"
dest: "/tmp/mysql/untar_mysql_pkg.sh" - name: "untar {{mysql_binary_pkg}} "
shell: "bash /tmp/mysql/untar_mysql_pkg.sh > /tmp/untar_mysql_pkg.log" - name: "rm /tmp/untar_mysql_pkg.sh"
file:
path: "/tmp/mysql/untar_mysql_pkg.sh"
state: absent - name: "create libmysqlclient_r.so"
file:
src: "{{mysql_base_dir}}/lib/libmysqlclient.so"
dest: "{{mysql_base_dir}}/lib/libmysqlclient_r.so"
state: link - name: "update file privileges"
file:
path: "{{mysql_base_dir}}"
owner: "{{mysql_user}}"
group: "{{mysql_group}}"
recurse: yes - name: "config ldconfig"
template:
src: "../templates/ld.so.conf"
dest: "/etc/ld.so.conf.d/{{mysql_version}}.conf" - name: "load so"
shell: ldconfig - name: "conifg header file"
file:
src: "{{mysql_base_dir}}/include"
dest: "/usr/include/{{mysql_version}}"
state: link
init_mysql_data_dir.yaml
[root@szwpldb1081 mysql]# cat common/init_mysql_data_dir.yaml
---
- name: "transfer users.sql to target host(s)."
template:
src: "../templates/users.sql"
dest: "/tmp/mysql/users.sql" - name: "transfer init_mysql_data_dir.sh to target host(s)."
template:
src: "../templates/init_mysql_data_dir.sh"
dest: /tmp/mysql/init_mysql_data_dir.sh - name: "init data dir"
shell: bash /tmp/mysql/init_mysql_data_dir.sh - name: "rm mysql_pkg_scripts"
file:
path: "/tmp/mysql/"
state: absent
export_path.yaml
[root@szwpldb1081 mysql]# cat common/export_path.yaml
---
- name: /etc/profile
lineinfile:
path: /etc/profile
line: "export PATH={{mysql_base_dir}}/bin/:$PATH"
insertafter: EOF
state: present - name: ~/.bash_profile
lineinfile:
path: "/home/{{mysql_user}}/.bash_profile"
line: "export PATH={{mysql_base_dir}}/bin/:$PATH"
insertafter: EOF
state: present - name: ~/.bashrc
lineinfile:
path: "/home/{{mysql_user}}/.bashrc"
line: "export PATH={{mysql_base_dir}}/bin/:$PATH"
insertafter: EOF
state: present
config_systemd.yaml
[root@szwpldb1081 mysql]# cat common/config_systemd.yaml
---
- name: "config mysqld-{{mysql_port}}.service"
template:
src: "../templates/mysqld.service"
dest: "/usr/lib/systemd/system/mysqld-{{mysql_port}}.service" - name: "conifg mysqld-{{mysql_port}} auto start"
systemd:
name: "mysqld-{{mysql_port}}"
enabled: yes
daemon_reload: yes - name: "start mysqld-{{mysql_port}}"
systemd:
name: "mysqld-{{mysql_port}}"
state: started
daemon_reload: yes
定义一些变量配置参数 config.yaml :
[root@szwpldb1081 mysql]# cat ../../config.yaml
max_memory_size_mb: "{{ 1024 * 512 }}" # 512G内存
mysql_port:
mysql_binary_pkg: "mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz"
mysql.yaml
[root@szwpldb1081 mysql]# cat ./vars/mysql.yaml
#mysql configure
mysql_user: "mysql"
mysql_group: "mysql"
mysql_uid: "{{mysql_port}}"
mysql_gid: "{{mysql_port}}"
mysql_packages_dir: "/usr/local/mysqltools/sps/mysql/"
mysql_base_dir: "/usr/local/{{ mysql_binary_pkg | replace('.tar.gz','') | replace('.tar.xz','') }}"
mysql_data_dir: "/database/mysql/node1"
mysql_version: "{{ mysql_binary_pkg | replace('.tar.gz','') | replace('.tar.xz','') }}"
mysql_root_pwd: 'xxxx'
mysql_monitor_user: 'xxx'
mysql_monitor_pwd: 'xxxx'
mysql_binlog_format: "row"
mysql_xport: "{{ mysql_port + 100 }}"
mysql_mgrport: "{{ mysql_port + 101 }}"
mysql_admin_port: "{{ mysql_port + 102 }}"
create_my_cnf.yaml
[root@szwpldb1081 mysql]# cat common/create_my_cnf.yaml
---
- name: "/etc/my-{{mysql_port}}.cnf for mysql-8.0.x "
when: mysql_binary_pkg.find('8.0') != -
template:
src: ../templates/8.0/my.cnf
dest: "/etc/my.cnf"
owner: "{{mysql_user}}"
group: "{{mysql_group}}"
backup: yes - name: "/etc/my-{{mysql_port}}.cnf for mysql-5.7.x "
when: mysql_binary_pkg.find('5.7') != -
template:
src: ../templates/5.7/my.cnf
dest: "/etc/my.cnf"
owner: "{{mysql_user}}"
group: "{{mysql_group}}"
backup: yes
文件目录设置的比较多,主要是为了配置方便灵活,可以适当的增加,看每个人自己实际的情况来操作就好。
[root@szwpldb1081 mysql]# cat /etc/ansible/ansible.cfg
[defaults]
host_key_checking = False #不检测host key
stdout_callback = debug
ANSIBLE_STDOUT_CALLBACK=debug
修改ansible配置文件hosts主机里面的主机,然后与 install_single.yaml:里面的host对应上:
[root@szwpldb1081 ~]# cat /etc/ansible/hosts
[uat]
x.x.x.x ansible_host=x.x.x.x ansible_user=root ansible_ssh_pass=xxxxx ansible_su_pass=xxxxx
执行过程报错:
TASK [init data dir] *********************************************************************************************************************
fatal: [172.18.1.192]: FAILED! => {
"changed": true,
"cmd": "bash /tmp/mysql/init_mysql_data_dir.sh",
"delta": "0:00:14.202501",
"end": "2020-05-01 12:36:32.514086",
"rc": ,
"start": "2020-05-01 12:36:18.311585"
} MSG: non-zero return code to retry, use: --limit @/usr/local/mysqltools/ansible/mysql/install_single.retry PLAY RECAP *******************************************************************************************************************************
172.18.1.192 : ok= changed= unreachable= failed=
手动执行提示:
hing off the --initialize-insecure option.
--01T12::17.339226+: [Note] [MY-] [Server] Creating the system tables.
--01T12::17.506281+: [Note] [MY-] [Server] Filling in the system tables, part .
--01T12::17.517417+: [Note] [MY-] [Server] Filling in the system tables, part .
--01T12::17.776951+: [Note] [MY-] [Server] Filling in the mysql.help table.
--01T12::17.858580+: [Note] [MY-] [Server] Creating the system users for internal usage.
--01T12::17.886104+: [Note] [MY-] [Server] Creating the sys schema.
--01T12::18.387866+: [Note] [MY-] [Server] Bootstrapping complete
--01T12::18.486722+: [ERROR] [MY-] [Server] You are not allowed to create a user with GRANT.
--01T12::18.489065+: [Note] [MY-] [Server] Execution of init_file '/tmp/mysql/users.sql' ended.
--01T12::18.489096+: [ERROR] [MY-] [Server] The newly created data directory /database/mysql/node1/ by --initialize is unusable. You can remove it.
脚本如下:
[root@SZWPLDB1091 ~]# cat /tmp/mysql/init_mysql_data_dir.sh
#!/bin/bash cd /usr/local/mysql-8.0.-linux-glibc2.-x86_64 if [ -d /database/mysql/node1 ]
then
echo "`date` | datadir has been inited" >> /tmp/mtls8.log
exit ;
else
mkdir -p /database/mysql/
mkdir -p /database/mysql//binlogs
mkdir -p /database/mysql//undolog
mkdir -p /database/mysql//relaylogs
mkdir -p /database/mysql//tmpdir
chown mysql:mysql -R /database/mysql
chmod /root/.mylogin.cnf
chmod -R /database/mysql
./bin/mysqld --defaults-file=/etc/my.cnf --user=mysql --initialize-insecure --init-file=/tmp/mysql/users.sql
fi
最后排查发现是 --init-file=/tmp/mysql/users.sql 有问题,修改以后然后执行:
[root@szwpldb1081 mysql]# ansible-playbook install_single.yaml PLAY [uat] ******************************************************************************************************************************* TASK [Gathering Facts] *******************************************************************************************************************
ok: [172.18.1.192] TASK [create mysql group] ****************************************************************************************************************
ok: [172.18.1.192] TASK [create user "mysql"] ***************************************************************************************************************
ok: [172.18.1.192] TASK [install libaio] ********************************************************************************************************************
ok: [172.18.1.192] TASK [install numactl] *******************************************************************************************************************
ok: [172.18.1.192] TASK [install perl-Data-Dumper] **********************************************************************************************************
ok: [172.18.1.192] TASK [/etc/my-.cnf for mysql-8.0.x] *************************************************************************************************
changed: [172.18.1.192] TASK [/etc/my-.cnf for mysql-5.7.x] *************************************************************************************************
skipping: [172.18.1.192] TASK [transfer mysql-8.0.-linux-glibc2.-x86_64.tar.xz to target host(s).] ************************************************************
ok: [172.18.1.192] TASK [generate untar script /tmp/untar_mysql_pkg.sh] *************************************************************************************
changed: [172.18.1.192] TASK [untar mysql-8.0.-linux-glibc2.-x86_64.tar.xz] **********************************************************************************
changed: [172.18.1.192] TASK [rm /tmp/untar_mysql_pkg.sh] ********************************************************************************************************
changed: [172.18.1.192] TASK [create libmysqlclient_r.so] ********************************************************************************************************
ok: [172.18.1.192] TASK [update file privileges] ************************************************************************************************************
ok: [172.18.1.192] TASK [config ldconfig] *******************************************************************************************************************
ok: [172.18.1.192] TASK [load so] ***************************************************************************************************************************
changed: [172.18.1.192] TASK [conifg header file] ****************************************************************************************************************
ok: [172.18.1.192] TASK [transfer users.sql to target host(s).] *********************************************************************************************
changed: [172.18.1.192] TASK [transfer init_mysql_data_dir.sh to target host(s).] ********************************************************************************
ok: [172.18.1.192] TASK [init data dir] *********************************************************************************************************************
changed: [172.18.1.192] TASK [rm mysql_pkg_scripts] **************************************************************************************************************
changed: [172.18.1.192] TASK [/etc/profile] **********************************************************************************************************************
changed: [172.18.1.192] TASK [~/.bash_profile] *******************************************************************************************************************
changed: [172.18.1.192] TASK [~/.bashrc] *************************************************************************************************************************
changed: [172.18.1.192] TASK [config mysqld-.service] *******************************************************************************************************
changed: [172.18.1.192] TASK [conifg mysqld- auto start] ****************************************************************************************************
changed: [172.18.1.192] TASK [start mysqld-] ****************************************************************************************************************
changed: [172.18.1.192] TASK [create backup dir] *****************************************************************************************************************
changed: [172.18.1.192] TASK [create backup script dir] **********************************************************************************************************
changed: [172.18.1.192] TASK [transfer backup script to target host (mysqldump)] *********************************************************************************
changed: [172.18.1.192] TASK [config backup job (mysqldump)] *****************************************************************************************************
changed: [172.18.1.192] PLAY RECAP *******************************************************************************************************************************
172.18.1.192 : ok= changed= unreachable= failed=
至此单机mysql一键安装算是完毕,借鉴了https://galaxy.ansible.com/home,看什么时候能自己整合一个平台,把ansible集成到界面,鼠标点记下,就完成一台机器安装,就好了。
ansible一键安装mysql8.0的更多相关文章
- ansible一键安装GreatSQL并构建MGR集群
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 利用ansible一键安装GreatSQL并完成MGR部署. 本次介绍如何利用ansible一键安装GreatSQL并完成 ...
- CentOS7.4 源码安装MySQL8.0
MySQL 8 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能! 以下为本人2018.4.23日安装过程的记录.整个过程大 ...
- centos 7下安装mysql-8.0
本篇文章主要介绍在centos7 环境下安装mysql8.0并设置为开机自启. 安装步骤 1.配置yum源 首先在 https://dev.mysql.com/downloads/repo/yum/ ...
- 安装mysql8.0.12
安装mysql8.0.12 https://blog.csdn.net/zwj1030711290/article/details/80039780 问题1:忘记记录日志打印的密码就把窗口给关了 解决 ...
- Linux 6.8 源码安装MySQL8.0
搭建环境说明: 系统版本:Red Hat Enterprise Linux Server release 6.8 (Santiago) 内核版本:Linux 2.6.32-642.el6.x86_64 ...
- Centos7安装MySQL8.0 - 操作手册
MySQL 8 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能! 一. Mysql8.0版本相比之前版本的一些特性 1) ...
- 安装mysql8.0.12以及修改密码和Navicat的连接
mysql8.0+与安装其他版本不同一.安装mysql8.0.121.到官网https://www.mysql.com/ 下载mysql-8.0.12-winx64.zip(不要.mis),直接解压 ...
- 源码编译安装MySQL8.0
源码编译安装MySQL8.0 0.前期准备条件 查看linux的版本 [root@mysql etc]# cat /etc/redhat-release CentOS Linux release 7. ...
- Win10安装mysql-8.0.11-winx64详细步骤
安装 mysql-8.0.11-winx64 https://blog.csdn.net/qq_20788055/article/details/80372577
随机推荐
- Java 程序该怎么优化?(技巧篇)
搬砖者:为什么程序总是那么慢?它现在到底在干什么?时间都花到哪里去了? 面试官:简单谈谈 Java 程序性能优化? 1. 字符串处理优化,乃优化之源. 研发过程中,String 的 API 用的应该是 ...
- Level Up - ICPC Southeastern Europe Contest 2019(简单DP)
题意:Steve玩魔兽世界要做任务升两级,任务在你不同的等级给的经验不同,输入任务数量和升第一级和升第二级需要的经验,接着输入每个任务第一级完成给的经验和花费的时间.第二级级完成给的经验和花费的时间. ...
- C++编译/编辑器对OIer的必要功能
(没有引战的意思,如果有不同意见可以评论区发言,只是写出我目前的情况) 作为一个C++ OIer肯定是用过Dev的,因为学校推荐啊我也没有办法.都知道Dev又丑又没有代码补全,但是却是最最最适合OIe ...
- PowerShell入门简介
文章更新于:2020-03-03 一.PowerShell简介 说实话,我总感觉 PowerShell 是 cmd 的加强版,但是看官方介绍,功能甚是强大,用处有待我们发掘. 二.PowerShell ...
- js中相关的windows方法的使用和location的先关方法的使用
下面是关于windows的相关方法的简单介绍. setInterval():它有一个返回值,主要是提供给clearInterval使用. setTimeout():它有一个返回值,主要是提供给clea ...
- .NET MVC中登录过滤器拦截的两种方法
今天给大家介绍两种ASP中过滤器拦截的两种方法. 一种是EF 的HtppModule,另一种则是灵活很多针对MVC的特性类 Attribute 具体什么是特性类可以参考着篇文章:https://www ...
- Flask 入门 (十一)
上篇文章讲的是一对多,这篇文章应该说多对多了 但是多对多无法用两张表来实现,因为外键......,你懂,哈哈哈!,所以中间需要加一张表来实现 承接上文,修改main.py中的代码如下: #encodi ...
- javascript 入门 之select2功能大全
1.代码较为简单,不作太多讲解,新建一个javascript工程,在index.htl中编写如下代码,根据<link>和<script>标签配制好js和css库便可! < ...
- python常用算数运算符、比较运算符、位运算符与逻辑运算符
编辑时间: 2019-09-04,22:58:49 算数运算符 '+'.'-'.'*'.'/' :加.减.乘.除 '**':指数运算, ‘//’:整除, ‘%‘:求余数 num_1 = 15; num ...
- Struts2-学习笔记系列(12)-set集合
3.1编写类型转换器 只需实现 converFromString方法 public class UserConvert extends StrutsTypeConverter { @Override ...