ansible一键安装mysql8.0
ansbile安装:
# ansible在CentOS7中需要安装epel仓库yum install
-y epel-releaseyum install
-y ansible
安装有好几种方法,yum安装是最简单的,安装ansible不是重点。
我的版本如下:
[root@szwpldb1081 mysqltools]# ansible --versionansible
2.7.10config file
= /etc/ansible/ansible.cfgconfigured 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/ansibleexecutable location
= /usr/local/python/bin/ansiblepython version
= 3.7.3 (default, Dec 152019, 15:54:59) [GCC 4.8.520150623 (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.yamlmax_memory_size_mb:
"{{ 1024 * 512 }}" # 512G内存mysql_port:
33601mysql_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 keystdout_callback
= debugANSIBLE_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 codeto retry, use:
--limit @/usr/local/mysqltools/ansible/mysql/install_single.retryPLAY 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:005 [Note] [MY-011061] [Server] Creating the system tables.2020-05-01T12:51:17.506281+08:005 [Note] [MY-011061] [Server] Filling in the system tables, part 1.2020-05-01T12:51:17.517417+08:005 [Note] [MY-011061] [Server] Filling in the system tables, part 2.2020-05-01T12:51:17.776951+08:005 [Note] [MY-011061] [Server] Filling in the mysql.help table.2020-05-01T12:51:17.858580+08:005 [Note] [MY-011061] [Server] Creating the system users forinternal usage.2020-05-01T12:51:17.886104+08:005 [Note] [MY-011061] [Server] Creating the sys schema.2020-05-01T12:51:18.387866+08:005 [Note] [MY-010456] [Server] Bootstrapping complete2020-05-01T12:51:18.486722+08:005 [ERROR] [MY-000061] [Server] 1410 You are not allowed to create a user with GRANT.2020-05-01T12:51:18.489065+08:000 [Note] [MY-010138] [Server] Execution of init_file "/tmp/mysql/users.sql" ended.2020-05-01T12:51:18.489096+08:000 [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/bashcd
/usr/local/mysql-8.0.18-linux-glibc2.12-x86_64if [ -d /database/mysql/node1 ]then
echo
"`date` | datadir has been inited" >> /tmp/mtls8.logexit
1;elsemkdir
-p /database/mysql/33601mkdir
-p /database/mysql/33601/binlogsmkdir
-p /database/mysql/33601/undologmkdir
-p /database/mysql/33601/relaylogsmkdir
-p /database/mysql/33601/tmpdirchown mysql:mysql
-R /database/mysqlchmod
600 /root/.mylogin.cnfchmod
777 -R /database/mysql.
/bin/mysqld --defaults-file=/etc/my.cnf --user=mysql --initialize-insecure --init-file=/tmp/mysql/users.sqlfi
最后排查发现是 --init-file=/tmp/mysql/users.sql 有问题,修改以后然后执行:
[root@szwpldb1081 mysql]# ansible-playbook install_single.yamlPLAY [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集成到界面,鼠标点记下,就完成一台机器安装,就好了。
以上是 ansible一键安装mysql8.0 的全部内容, 来源链接: utcz.com/z/533426.html