“Yeah It’s on. ”
linux软件-Ansible实现数据库自动化部署
实验环境:
| IP | 主机名 | 备注 |
|---|---|---|
| 192.168.171.121 | ansibleMaster | 服务端 |
| 192.168.171.122 | ansibleOne | 客户端 |
| 192.168.171.123 | ansibleTwo | 客户端 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
├── ansible.cfg
├── hosts
├── mysql_role.yml
└── roles
└── mysql
├── files
│ ├── init_mysql.sh
│ ├── my.cnf
│ └── mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz
└── tasks
├── copyFile.yml
├── createGroup.yml
├── createUser.yml
├── fetchFile.yml
├── initMysql.yml
├── linkfile.yml
├── main.yml
└── mkdirDataFile.yml
mysql_role.yml
1
2
3
4
- hosts: mysql
remote_user: root
roles:
- role: mysql
init_mysql.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/bin/bash
# 运行初始化命令并将输出重定向到临时文件
/usr/local/mysql/bin/mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --initialize > /tmp/mysql_init.log 2>&1
# 从临时文件中提取临时密码
TEMP_PASSWORD=$(grep -oP 'temporary password is generated for root@localhost: \K[^ ]+' /tmp/mysql_init.log)
cp -a /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysql
chkconfig --add mysql
service mysql start
ln -s /usr/local/mysql/bin/mysql /usr/bin
echo "数据库初始化完成"
#生成随机密码
NEW_PASSWORD=$(openssl rand -base64 12)
#获取本机ip
LOCAL_IP=$(hostname -I | awk '{print $1}')
# 登录MySQL并修改密码
mysql -uroot -p"$TEMP_PASSWORD" -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '$NEW_PASSWORD';" --connect-expired-password
# 检查命令是否成功
if [ $? -eq 0 ]; then
# 将新密码和本机IP地址保存到文件中
echo "IP地址: $LOCAL_IP" > /tmp/$LOCAL_IP.txt
echo "临时密码: $TEMP_PASSWORD" >> /tmp/$LOCAL_IP.txt
echo "新密码: $NEW_PASSWORD" >> /tmp/$LOCAL_IP.txt
else
echo "密码修改失败"
fi
my.cnf
1
2
3
4
5
6
7
8
9
10
[mysqld]
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
socket = /usr/local/mysql/mysql.sock
character-set-server=utf8mb4
port = 3306
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[client]
socket = /usr/local/mysql/mysql.sock
default-character-set=utf8mb4
copyFile.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
- name: 复制tar包
copy:
src: mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz
dest: /opt/
- name: 解压
shell: tar xJf /opt/mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz -C /usr/local/
- name: 复制配置文件
copy:
src: /etc/ansible/roles/mysql/files/my.cnf
dest: /etc/
- name: 复制初始化文件
copy:
src: /etc/ansible/roles/mysql/files/init_mysql.sh
dest: /opt/
createGroup.yml
1
2
- name: create group
group: name=mysql gid=306
createUser.yml
1
2
3
4
5
6
7
8
9
10
- name: create user
user: name=mysql uid=306 group=mysql system=yes shell=/sbin/nologin
- name: 授权文件
file:
path: /usr/local/mysql-8.0.26-linux-glibc2.12-x86_64/
state: directory
recurse: yes
owner: mysql
group: mysql
fetchFile.yml
1
2
3
4
5
6
7
8
9
10
11
- name: 复制密码文件到服务器端
fetch:
src: /tmp/.txt
dest: /opt/mysqlpasswd/
flat: yes
- name: 删除变量
shell: unset NEW_PASSWORD
- name: 删除密码文件
file:
path: /tmp/.txt
state: absent
initMysql.yml
1
2
3
4
5
6
7
8
9
10
11
12
- name: 添加执行权限1
file:
path: /opt/init_mysql.sh
mode: '0755'
- name: 添加执行权限2
file:
path: /etc/my.cnf
mode: '0755'
- name: 运行初始化脚本
shell: sh /opt/init_mysql.sh
linkfile.yml
1
2
3
4
5
- name: 创建符号链接
file:
src: /usr/local/mysql-8.0.26-linux-glibc2.12-x86_64
dest: /usr/local/mysql
state: link
main.yml
1
2
3
4
5
6
7
- include: copyFile.yml
- include: linkfile.yml
- include: mkdirDataFile.yml
- include: createGroup.yml
- include: createUser.yml
- include: initMysql.yml
- include: fetchFile.yml
mkdirDataFile.yml
1
2
3
4
5
- name: 创建data文件夹存储文件
file:
path: /usr/local/mysql/data
state: directory
mode: '0755'
实现功能:
传输mysql安装包到客户端,初始化数据库,生成随机密码修改数据库密码,擦除客户端记录。
