ansbile安装: # ansible在Centos7中需要安装epel仓库 yum install -y epel-release yum install -y ansible 安装有好几种方法,yum安装是最简单的,安装
ansbile安装:
# ansible在Centos7中需要安装epel仓库
yum install -y epel-release
yum install -y ansible
安装有好几种方法,yum安装是最简单的,安装ansible不是重点。
我的版本如下:
[root@szwpldb1081 Mysqltools]# ansible --version
ansible 2.7.10
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.3/lib/python3.7/site-packages/ansible
executable location = /usr/local/python/bin/ansible
python version = 3.7.3 (default, Dec 15 2019, 15:54:59) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39.0.3)]
我的目录树如下:
[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: 33601
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") != -1
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") != -1
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": 1,
"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=18 changed=7 unreachable=0 failed=1
手动执行提示:
hing off the --initialize-insecure option.
2020-05-01T12:51:17.339226+08:00 5 [Note] [MY-011061] [Server] Creating the system tables.
2020-05-01T12:51:17.506281+08:00 5 [Note] [MY-011061] [Server] Filling in the system tables, part 1.
2020-05-01T12:51:17.517417+08:00 5 [Note] [MY-011061] [Server] Filling in the system tables, part 2.
2020-05-01T12:51:17.776951+08:00 5 [Note] [MY-011061] [Server] Filling in the mysql.help table.
2020-05-01T12:51:17.858580+08:00 5 [Note] [MY-011061] [Server] Creating the system users for internal usage.
2020-05-01T12:51:17.886104+08:00 5 [Note] [MY-011061] [Server] Creating the sys schema.
2020-05-01T12:51:18.387866+08:00 5 [Note] [MY-010456] [Server] Bootstrapping complete
2020-05-01T12:51:18.486722+08:00 5 [ERROR] [MY-000061] [Server] 1410 You are not allowed to create a user with GRANT.
2020-05-01T12:51:18.489065+08:00 0 [Note] [MY-010138] [Server] Execution of init_file "/tmp/mysql/users.sql" ended.
2020-05-01T12:51:18.489096+08:00 0 [ERROR] [MY-013455] [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.18-linux-glibc2.12-x86_64
if [ -d /database/mysql/node1 ]
then
echo "`date` | datadir has been inited" >> /tmp/mtls8.log
exit 1;
else
mkdir -p /database/mysql/33601
mkdir -p /database/mysql/33601/binlogs
mkdir -p /database/mysql/33601/undolog
mkdir -p /database/mysql/33601/relaylogs
mkdir -p /database/mysql/33601/tmpdir
chown mysql:mysql -R /database/mysql
chmod 600 /root/.mylogin.cnf
chmod 777 -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-33601.cnf for mysql-8.0.x] *************************************************************************************************
changed: [172.18.1.192]
TASK [/etc/my-33601.cnf for mysql-5.7.x] *************************************************************************************************
skipping: [172.18.1.192]
TASK [transfer mysql-8.0.18-linux-glibc2.12-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.18-linux-glibc2.12-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-33601.service] *******************************************************************************************************
changed: [172.18.1.192]
TASK [conifg mysqld-33601 auto start] ****************************************************************************************************
changed: [172.18.1.192]
TASK [start mysqld-33601] ****************************************************************************************************************
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=30 changed=18 unreachable=0 failed=0
至此单机mysql一键安装算是完毕,借鉴了https://galaxy.ansible.com/home,看什么时候能自己整合一个平台,把ansible集成到界面,鼠标点记下,就完成一台机器安装,就好了。
--结束END--
本文标题: ansible一键安装mysql8.0
本文链接: https://www.lsjlt.com/news/5831.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-14
2024-05-14
2024-05-14
2024-05-14
2024-05-14
2024-05-14
2024-05-14
2024-05-14
2024-05-14
2024-05-14
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0