管理变量和事实
#让助手在 node1 上显示“便签”里的内容[lyk@controller web 11:36:01]$ ansible node1 -m debug -a "msg={{ package }}" -e "package=httpd"node1 | SUCCESS => {"msg": "httpd"#让助手用“便签”里的软件名,在 node1 上安装软件[lyk@controller web 11:37:01]$ ansible node1 -m yum -a "name={{ package }} state=present" -e "package=httpd"
作用:
-e "package=httpd"
是给助手递一张 “临时便签”,上面写着 “package 是 httpd”。意义:临时变量适合一次性操作,不用修改任何文件,直接告诉助手参数。比如临时安装一个软件,用完就忘,不需要保存这个参数。
Play scope(剧本级变量):给助手 “固定的任务清单”
[lyk@controller ~ 11:41:02]$ vim ~/.vimrc 1 set ai ts=2 number2 set cursorcolumn cursorline3 set paste [lyk@controller ~ 11:41:42]$ vim playbook.y---- name: test vars statement in playhosts: node1vars:- user: joe- home: /home/joetasks:- name: add user {{ user }}user:name: "{{ user }}"home: "{{ home }}"state: present- name: debug userdebug:msg: |username is {{ user }}home is {{ home }}[lyk@controller ~ 11:42:53]$ ansible-playbook playbook.yml
格式2
---- name: test vars statement in playhosts: node1vars:- user: joe- home: /home/joetasks:- name: add user {{ user }}user:name: "{{ user }}"home: "{{ home }}"state: present- name: debug userdebug:msg: |username is {{ user }}home is {{ home }}
vars_files 声明
如果变量比较多,我么可以使用变量文件进行分类,然后分列别应用到playbook中
[lyk@controller web 12:53:20]$ vim playbook.yml---- name: test vars statement in playhosts: node1vars_files:- vars/user1.yamltasks:- name: add user {{ user }}user:name: "{{ user }}"home: "{{ home }}"state: present- name: debug userdebug:msg: >username is {{ user}}home is {{ home }}[lyk@controller web 12:53:52]$ mkdir vars[lyk@controller web 12:55:27]$ vim vars/user1.yamluser: user1home: /home/user1[lyk@controller web 12:58:40]$ ansible-playbook playbook.yml
Host scope
核心概念:
主机清单(inventory):相当于你的 “通讯录”,里面记录了所有要管理的主机(比如 node1、node2 就像通讯录里的联系人)。
变量:相当于给联系人加的 “备注”(比如给 node1 备注 “用户名是 user1”,给 node2 备注 “用户名是 user2”)。
主机组:相当于给通讯录分组(比如把 node1、node2、node3、node4 分到 “nodes 组”,方便群发消息)。
#给 node1 加备注[lyk@controller web 13:01:02]$ vim inventory 1 controller2 node1 user=user1 home=/home/user1 #(给 node1 备注“用户名是 user1,家目录是 /home/user1”)3 node24 node35 node4#写 playbook(相当于 “给 node1 发一条带备注的消息”):[lyk@controller web 12:52:16]$ vim playbook.yml1 --- 2 - name: test vars statement in play3 hosts: node1 # 给通讯录中的 node1 发消息4 tasks: 5 - name: add user {{ user }} # 用 node1 的“用户名备注”6 user: 7 name: "{{ user }}" # 引用备注里的 user8 home: "{{ home }}" # 引用备注里的 home9 state: present10 11 - name: debug user12 debug:13 msg: >14 username is {{ user}}15 home is {{ home }}[lyk@controller web 13:03:48]$ ansible-playbook playbook.yml #给多个主机加 “备注”(多主机变量)[lyk@controller web 13:03:58]$ vim inventory #再次编辑添加user2[lyk@controller web 13:05:05]$ cat inventorycontrollernode1 user=user1 home=/home/user1node2 user=user2 home=/home/user2 # 给 node2 备注“用户名是 user2”node3node4#修改 playbook 同时针对 node1 和 node2[lyk@controller web 13:03:29]$ vim playbook.yml1 --- 2 - name: test vars statement in play3 hosts: node1,node2 4 tasks: 5 - name: add user {{ user }}6 user: 7 name: "{{ user }}" #要加双引号" ",变量引用规则8 home: "{{ home }}"9 state: present10 11 - name: debug user12 debug: 13 msg: > 14 username is {{ user}}15 home is {{ home }}[lyk@controller web 13:05:10]$ ansible-playbook playbook.yml
[lyk@controller web 13:06:10]$ vim inventory 1 controller2 node1 user=user1 home=/home/user1 node=node13 node2 user=user2 home=/home/user2 node=node2 4 node35 node4[lyk@controller web 13:06:25]$ vim deploy_web.yml ............29 - name: prepare index.html 30 copy: 31 content: "Hello World From {{ node }}\n"32 dest: /var/www/html/index.html33 34 - name: check web server 35 hosts: node3 36 tasks: 37 - name: check web site node1 38 uri: 39 url: http://node1.lyk.cloud40 - name: check web site node2 41 uri: 42 url: http://node2.lyk.cloud43 ... [lyk@controller web 13:12:29]$ ansible-playbook playbook.yml PLAY [test vars statement in play] *********************************************TASK [Gathering Facts] *********************************************************ok: [node2]ok: [node1]TASK [add user user1] **********************************************************ok: [node1]ok: [node2]TASK [debug user] **************************************************************ok: [node1] => {"msg": "username is user1 home is /home/user1\n"}ok: [node2] => {"msg": "username is user2 home is /home/user2\n"}...................[lyk@controller web 13:12:41]$ curl http://node1/Hello World From Node1#报错再执行 ansible-playbook deploy_web.yml,尝试连接,可能是因为 在执行 Playbook 之前,node2 尚未完成部署[lyk@controller web 13:17:51]$ curl http://node2Hello World From node2
[lyk@controller web 13:08:34]$ vim inventory [lyk@controller web 13:41:57]$ ansible nodes -m debug -a var=node#修改node1,node2为nodes[lyk@controller web 13:43:39]$ vim deploy_web.yml 1 --- 2 - name: deploy web server3 hosts: nodes 4 tasks: 5 - name: install the latest version of Apache6 yum: 7 name: httpd8 state: latest................[lyk@controller web 13:49:04]$ ansible-playbook deploy_web.yml [lyk@controller web 13:50:35]$ curl http://node1/Hello World From Node1[lyk@controller web 13:50:56]$ curl http://node2/Hello World From Node2[lyk@controller web 13:50:59]$ curl http://node3/Hello World From Node[lyk@controller web 13:51:02]$ curl http://node4/Hello World From Node
Ansible 中基于组和主机的变量管理及优先级规则
#1. 划分 “部门”(定义主机组)[lyk@controller web 13:59:37]$ vim inventory #vim编辑1 controller2 3 [nodes]4 node15 node26 node37 node4#2. 给 “部门” 统一发标签(组变量) ## 新建存放个人标签的文件夹[lyk@controller web 14:04:20]$ mkdir group_vars host_vars[lyk@controller web 14:06:17]$ vim group_vars/nodes.yml#vim编辑添加node: NODES # 给 node1 /2发专属标签 [lyk@controller web 14:07:16]$ echo "node: NODE1"> host_vars/node1.yml[lyk@controller web 14:08:23]$ echo "node: NODE2"> host_vars/node2.yml--作用:host_vars/主机名.yml 是 “个人专属变量”,只有指定员工(node1、node2)有,优先级比部门标签高。#4. 执行 “发工作证” 操作(运行 playbook)[lyk@controller web 14:08:36]$ ansible-playbook deploy_web.yml --这个 playbook 里有个关键任务:生成首页文件时,会用 {{ node }} 变量(即 “所属部门标签”):#5. 查看结果(工作证内容)[lyk@controller web 14:09:28]$ curl http://node1/Hello World From NODE1[lyk@controller web 14:09:49]$ curl http://node2/Hello World From NODE2[lyk@controller web 14:09:52]$ curl http://node3/Hello World From NODES[lyk@controller web 14:09:55]$ curl http://node4/Hello World From NODES[lyk@controller web 14:09:57]$ grep . *_vars/*group_vars/nodes.yml:node: NODEShost_vars/node1.yml:node: NODE1host_vars/node2.yml:node: NODE2
核心知识点:变量的 “分工规则”
group_vars(部门文件柜):
文件名必须和主机组名一致(如
nodes.yml
对应[nodes]
组)。组内所有主机默认用这里的变量,相当于 “部门统一规定”。
host_vars(个人文件柜):
文件名必须和主机名一致(如
node1.yml
对应 node1)。个人变量会 “覆盖” 部门变量,相当于 “个人特殊情况优先”。
为什么要这么做?
当主机很多时(比如 100 台),不用在 inventory 里逐个写变量,只需给组写一次公共变量,个别主机单独写个人变量,既整齐又好维护。
比如给 100 台主机部署网页,98 台用默认标题,2 台用特殊标题,只需改 2 个个人变量文件,不用动组变量。
总结:
这些命令演示了 Ansible 中 “变量的最佳实践”—— 用 group_vars
和 host_vars
文件夹分类存放变量:
组变量管 “一群主机的共性”,个人变量管 “单台主机的个性”。
规则清晰:个人变量优先于组变量(就像 “个人特殊情况” 比 “部门规定” 优先)。
这样管理变量,比直接写在 inventory 里更整齐,后期改起来也方便 —— 就像公司的文件柜,部门文件和个人文件分开放,找起来一目了然~
主机连接特殊变量
[lyk@controller web 14:10:42]$ vim inventory [lyk@controller web 14:38:38]$ cat inventory controller[nodes]web1node2node3node4[lyk@controller web 14:38:13]$ ansible web1 -a id -e ansible_host=node1web1 | CHANGED | rc=0 >>uid=0(root) gid=0(root) 组=0(root)
数组变量
[lyk@controller web 14:59:35]$ vim playbook.yml 1 ---2 - name: test vars statement in play3 hosts: node14 vars:5 users:6 lyk:7 user_name: lyk8 home_path: /home/lyk9 laowang:10 user_name: laowang11 home_path: /home/laowang12 tasks: 13 - name: add user {{ users.lyk.user_name }}14 user:15 name: '{{ users.lyk.user_name }}'16 home: "{{ users.lyk.home_path }}"17 - name: debug laowang18 debug:19 msg: >20 username is {{ users['laowang']['user_name'] }}21 home_path is {{users['laowang']['home_path'] }}22 ...[lyk@controller web 15:01:01]$ ansible-playbook playbook.yml
register 语句
register 语句捕获任务输出。输出保存在一个临时变量中,稍后在playbook中可用于调试用途或者达成其他目的
#yaml 能够非常好地描述对象[lyk@controller web 15:08:29]$ vim playbook.yml ---- name: Installs a package and prints the resulthosts: node1tasks:- name: Install the packageyum:name: httpdstate: installedregister: install_result- debug: var: install_result[lyk@controller web 15:09:14]$ ansible-playbook playbook.yml [lyk@controller web 15:09:59]$ ansible-playbook playbook.yml -v[lyk@controller web 15:13:36]$ sudo yum install -y yajl[lyk@controller web 15:13:39]$ echo '{"changed": false, "msg": "", "rc": 0, "results": ["httpd-2.4.6-99.el7.centos.1.x86_64 providing httpd is already installed"]}' |json_reformat{"changed": false,"msg": "","rc": 0,"results": ["httpd-2.4.6-99.el7.centos.1.x86_64 providing httpd is already installed"]}
MAGIC 变量
把 Ansible 的 “MAGIC 变量”(魔法变量)理解成 “Ansible 自带的万能信息查询工具”,就像给服务器装了个 “身份牌” 和 “关系网”,能随时查自己是谁、属于哪个群体、同伴都有谁。下面用 “班级管理” 的场景来解释:
#一、先看懂 “班级名单”(inventory 文件)[lyk@controller web 15:13:41]$ vim inventory 1 controller2 3 [nodes:children] 4 webs5 dbs6 7 [webs]8 node19 node210 11 [dbs] 12 node313 node4#二、魔法变量实战:查询 “身份信息” [lyk@controller web 15:00:29]$ vim deploy_web.yml 1 --- 2 - name: deploy web server3 hosts: nodes ###4 tasks: 5 - name: install the latest version of Apache6 yum:7 name: httpd8 state: latest9 10 - name: enable and start Apache11 service:12 name: httpd13 state: started 14 enabled: yes15 16 - name: enable and start Firewalld17 service:18 name: firewalld19 state: started20 enabled: yes21 22 - name: set firewall for http23 firewalld:24 service: http25 permanent: yes26 immediate: yes27 state: enabled28 29 - name: prepare index.html30 copy:31 content: "Hello World From {{ inventory_hostname }}\n" #1. inventory_hostname:我是谁?32 dest: /var/www/html/index.html33 34 ... [lyk@controller web 15:27:23]$ ansible-playbook deploy_web.yml [lyk@controller web 15:28:35]$ curl http://node1Hello World From node1[lyk@controller web 15:28:38]$ curl http://node2Hello World From node2[lyk@controller web 15:28:29]$ curl http://node3Hello World From node3[lyk@controller web 15:28:32]$ curl http://node4Hello World From node4
# node1 所属主机组[lyk@controller web 15:44:37]$ ansible node1 -m debug -a var=group_namesnode1 | SUCCESS => {"group_names": ["nodes", "webs"]}# groups:班级里有哪些小组?每个小组有谁?[lyk@controller web 15:44:43]$ ansible node1 -m debug -a var=groupsnode1 | SUCCESS => {"groups": {"all": ["controller", ......# 比如查groups.all(所有学生)[lyk@controller web 15:45:20]$ ansible node1 -m debug -a var=groups.allnode1 | SUCCESS => {"groups.all": ["controller", "node1", "node2", "node3", "node4"]}[lyk@controller web 15:45:41]$ ansible node1 -m debug -a var=groups.nodesnode1 | SUCCESS => {"groups.nodes": ["node1", "node2", "node3", "node4"]}#查groups.dbs(数据库小组)[lyk@controller web 15:45:55]$ ansible node1 -m debug -a var=groups.dbsnode1 | SUCCESS => {"groups.dbs": ["node3", "node4"]}
[lyk@controller web 15:50:45]$ ansible node1 -m debug -a var=hostvars|less[lyk@controller web 15:50:45]$ ansible node1 -m debug -a var=hostvars[lyk@controller web 15:50:45]$ ansible node1 -m debug -a var=hostvars.node2.group_names[lyk@controller web 15:51:44]$ ansible node1 -m debug -a var=group_names[lyk@controller web 15:54:30]$ ansible node1 -m debug -a var=hostvars.node2.ansible_version
管理 SECRETS
ansible-vault 命令 加密
[lyk@controller web 15:21:28]$ vim inventory [lyk@controller web 15:58:14]$ ansible-vault create user.yamlNew Vault password: Confirm New Vault password: #编辑添加1 Vault password: '123456'2 login_name: lyk3 login_password: 1234564 login_host: 10.1.8.115 login_type: ssh[lyk@controller web 16:07:24]$ cat user.yaml#输入密码才能查看[lyk@controller web 16:07:36]$ ansible-vault view user.yaml Vault password: Vault password: '123456'login_name: lyklogin_password: 123456login_host: 10.1.8.11login_type: ssh#输入密码解密[lyk@controller web 16:08:46]$ ansible-vault decrypt user.yaml Vault password: Decryption successful#cat可以直接查看[lyk@controller web 16:09:27]$ cat user.yamlVault password: '123456'login_name: lyklogin_password: 123456login_host: 10.1.8.11login_type: ssh#再次设置密码[lyk@controller web 16:10:07]$ ansible-vault encrypt user.yaml New Vault password: Confirm New Vault password: Encryption successful#编辑加密文件的命令,作用是 “打开并编辑被 Ansible Vault 加密过的 user.yaml 文件[lyk@controller web 16:11:10]$ ansible-vault edit user.yaml Vault password: [lyk@controller web 16:12:04]$ echo 123456 > password-for-vault[lyk@controller web 16:13:18]$ ansible-vault view user.yaml --vault-password-file password-for-vault Vault password: '123456'login_name: lyklogin_password: 123456login_host: 10.1.8.11login_type: ssh---vault-password-file password-for-vault 参数指定了密码文件,Ansible 会自动从该文件中读取解密密码,所以不需要手动输入[lyk@controller web 16:14:26]$ ansible-vault rekey user.yaml Vault password: New Vault password: Confirm New Vault password: Rekey successful[lyk@controller web 16:24:44]$ echo "123" > password-for-vault[lyk@controller web 16:30:53]$ ansible-vault rekey user.yaml --vault-password-file password-for-vaultNew Vault password: 1234Confirm New Vault password: 1234Rekey successful[lyk@controller web 16:31:25]$ 密码文件 password-for-vault 必须存储 当前有效的旧密码,才能通过验证。echo的作用是 “让密码文件内容与实际旧密码同步”,否则会一直解密失败。[lyk@controller web 16:31:25]$ echo 1234 > password-for-vault[lyk@controller web 16:32:49]$ ansible-vault view user.yaml --vault-password-file password-for-vault Vault password: '123456'login_name: lyklogin_password: 123456login_host: 10.1.8.11login_type: ssh
ansible vault 综合实验
“给敏感信息装个保险柜”——Ansible Vault 的核心作用就是加密 Playbook 中涉及的密码、密钥等敏感信息,避免明文暴露(比如被别人看到密码)
#一、准备 “存放敏感信息的文件夹”(组织变量结构)[lyk@controller web 15:54:45]$ ls host_vars/node1.yml node2.yml# 给node1创建一个专属子文件夹[lyk@controller web 16:41:15]$ mkdir host_vars/node1# 把原来的node1.yml移动到子文件夹里,改名为vars.yml[lyk@controller web 16:41:20]$ mv host_vars/node1.yml host_vars/node1/vars.yml作用:把 node1 的变量拆分成 “普通变量” 和 “敏感变量” 两部分,方便单独加密敏感信息。vars.yml:存放非敏感变量(如数据库名db_name: mydb),不用加密。后面会创建的vaults.yml:存放敏感变量(如密码),需要加密。#二、创建 “需要加密的敏感信息”(vaults.yml)[lyk@controller web 16:41:22]$ vim host_vars/node1/vaults.yml#vim1 user: lyk 2 password: 123 3 host: '%' 4 priv: '*.*:ALL'[lyk@controller web 16:44:54]$ cat host_vars/node1/vaults.ymluser: lykpassword: 123host: '%'priv: '*.*:ALL'[lyk@controller web 16:45:02]$ grep vault_pa /etc/ansible/ansible.cfg#vault_password_file = /path/to/vault_password_file#复制vault_password_file#三、配置 “保险柜的钥匙文件”(ansible.cfg + password-for-vault)[lyk@controller web 16:46:50]$ vim ansible.cfg #添加 / 修改一行:5 vault_password_file = ./password-for-vault-作用:Ansible Vault 加密文件时需要一个 “密钥”(类似保险柜的钥匙),这里告诉 Ansible:“密钥存在当前目录的 password-for-vault 文件里”,不用每次手动输入密钥,适合自动化执行。# 查看密码文件是否存在[lyk@controller web 16:49:05]$ ls password-for-vaultpassword-for-vault#四、给 “敏感信息盒子上锁”(加密 vaults.yml)[lyk@controller web 16:51:51]$ ansible-vault encrypt host_vars/node1/vaults.ymlEncryption successful#五、验证 “能否用钥匙打开盒子”(查看加密内容)[lyk@controller web 16:52:48]$ ansible-vault view host_vars/node1/vaults.ymluser: lykpassword: 123host: '%'priv: '*.*:ALL'[lyk@controller web 16:52:57]$ cat ansible.cfg [defaults]inventory = ./inventory#ask_pass = Trueremote_user = lykvault_password_file = ./password-for-vault#module_name = command[privilege_escalation]become=Truebecome_method=sudobecome_user=rootbecome_ask_pass=False[lyk@controller web 16:53:38]$ cat password-for-vault 1234[lyk@controller web 16:53:59]$ ansible-vault view host_vars/node1/vaults.ymluser: lykpassword: 123host: '%'priv: '*.*:ALL'
Ansible Playbook 自动化配置 MariaDB 数据库服务
可以把这个 Playbook 理解为 “给服务器的一步一步操作指南”,告诉服务器 “该装什么软件、怎么启动服务、设置哪些安全规则”,全程自动执行,不用手动敲命令
#vim定义[lyk@controller web 17:11:37]$ vim deploy_mariadb.yml#1. 开头定义:这是个什么 “指南”?1 --- 2 - name: config mariadb server # 这个指南的名字:配置MariaDB服务器3 hosts: node1 # 给谁用:给名为node1的服务器4 vars:5 # 保留原变量结构,仅优化密码相关配置6 password: "123" # root用户密码7 user: "lyk" # 要创建的普通用户名(比如给应用程序用)8 user_password: "123" # 普通用户的密码 9 host: "localhost" # 普通用户允许从哪里登录(这里限制只能本地登录)10 priv: "{{ db_name }}.*:ALL" # 普通用户的权限:对mydb数据库的所有表有全部权限11 db_name: "mydb" # 要创建的数据库名(比如存应用程序数据)#2. 具体任务:服务器要执行的操作#(1)安装 MariaDB 相关软件12 tasks:13 - name: install mariadb-server14 yum:15 name:16 - mariadb-server17 - python2-PyMySQL18 state: present19 #实际作用:没有软件就没法运行数据库,这一步是 “搭地基”,把数据库运行需要的程序装到服务器上。 #(2)启动并设置 MariaDB 开机自启20 - name: enable and start mariadb21 service:22 name: mariadb23 enabled: yes24 state: started#实际作用:软件安装后默认是 “关机” 状态,这一步让它 “启动运行”,并且设置 “开机自动跑”(不然服务器重启后数据库就停了,应用程序会崩溃)。25 26 # 修复:用mysql_user模块替代shell,支持首次设置和重复执行27 - name: set or update root password (兼容首次和重复执行)#设置或更新root密码28 mysql_user:29 login_host: localhost30 login_port: 330631 login_user: root32 login_password: "{{ password | default('') }}" # 初始无密码时为空,已有密码时使用当前密码33 name: root34 password: "{{ password }}" # 设置/更新为指定密码35 host_all: yes # 对所有主机生效36 state: present37 38 # 删除匿名用户 anonymous@完整主机名39 - name: delete user anonymous@{{ ansible_fqdn }}40 mysql_user:41 login_host: localhost42 login_port: 330643 login_user: root44 login_password: "{{ password }}"45 name: ""46 host: "{{ ansible_fqdn }}"47 state: absent48 49 # 删除匿名用户 anonymous@localhost50 - name: delete user anonymous@localhost51 mysql_user:52 login_host: localhost 53 login_port: 330654 login_user: root55 login_password: "{{ password }}"56 name: ""57 host: "localhost"58 state: absent59 60 # 删除测试数据库61 - name: delete database test62 mysql_db:63 login_host: localhost64 login_port: 330665 login_user: root66 login_password: "{{ password }}"67 name: test68 state: absent69 70 # 修复:使用独立的用户密码,与root密码区分71 - name: create user {{ user }}72 mysql_user:73 login_host: localhost74 login_port: 330675 login_user: root76 login_password: "{{ password }}"77 name: "{{ user }}"78 password: "{{ user_password }}" # 使用独立密码79 host: "{{ host }}"80 priv: "{{ priv }}"81 state: present82 83 # 创建新库84 - name: create database {{ db_name }}85 mysql_db:86 login_host: localhost87 login_port: 330688 login_user: root89 login_password: "{{ password }}"90 name: "{{ db_name }}"91 state: present92 [lyk@controller web 19:21:38]$ ansible-playbook deploy_mariadb.yml
#1. root 用户登录并授权,提权普通用户[root@node1 ~ 19:17:46]# mysql -u root -p123Welcome to the MariaDB monitor. Commands end with ; or \g.Your MariaDB connection id is 13Server version: 5.5.68-MariaDB MariaDB ServerCopyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MariaDB [(none)]> GRANT SELECT ON mysql.user TO 'lyk'@'localhost';Query OK, 0 rows affected (0.00 sec)MariaDB [(none)]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec)MariaDB [(none)]> exitBye[root@node1 ~ 19:18:27]# mysql -u lyk -p123Welcome to the MariaDB monitor. Commands end with ; or \g.Your MariaDB connection id is 14Server version: 5.5.68-MariaDB MariaDB ServerCopyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MariaDB [(none)]> select user,host,password from mysql.user;+------+-----------------+-------------------------------------------+| user | host | password |+------+-----------------+-------------------------------------------+| root | localhost | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 || root | node1.lyk.cloud | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 || root | 127.0.0.1 | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 || root | ::1 | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 || lyk | % | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 || lyk | localhost | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |+------+-----------------+-------------------------------------------+6 rows in set (0.00 sec)MariaDB [(none)]> show databases;+--------------------+| Database |+--------------------+| information_schema || mydb || mysql |+--------------------+3 rows in set (0.00 sec)