当前位置: 首页 > ops >正文

管理变量和事实

#让助手在 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.yml​1 --- 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.yml​1 ---                  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​
核心知识点:变量的 “分工规则”
  1. group_vars(部门文件柜)

    • 文件名必须和主机组名一致(如 nodes.yml 对应 [nodes] 组)。

    • 组内所有主机默认用这里的变量,相当于 “部门统一规定”。

  2. host_vars(个人文件柜)

    • 文件名必须和主机名一致(如 node1.yml 对应 node1)。

    • 个人变量会 “覆盖” 部门变量,相当于 “个人特殊情况优先”。

  3. 为什么要这么做?

    • 当主机很多时(比如 100 台),不用在 inventory 里逐个写变量,只需给组写一次公共变量,个别主机单独写个人变量,既整齐又好维护。

    • 比如给 100 台主机部署网页,98 台用默认标题,2 台用特殊标题,只需改 2 个个人变量文件,不用动组变量。

总结:

这些命令演示了 Ansible 中 “变量的最佳实践”—— 用 group_varshost_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 Server​Copyright (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 Server​Copyright (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)​​
http://www.xdnf.cn/news/17668.html

相关文章:

  • 【Unity3D】Spine黑线(预乘问题)、贴图边缘裁剪问题
  • @系统管理 - Ansible 补丁管理方案(Windows Linux)
  • 飞算JavaAI的“盾牌”计划:手撕Spring Security + JWT认证链
  • CNN卷积神经网络预测手写数字的Pytorch实现
  • C++ 优选算法 力扣 209.长度最小的子数组 滑动窗口 (同向双指针)优化 每日一题 详细题解
  • [系统架构设计师]架构设计专业知识(二)
  • python与JavaScript的区别
  • 三方相机问题分析六:【没用相机,诡异的手电筒不可使用】下拉状态栏,手电筒置灰,无法打开,提提示相机正在使用
  • 模型驱动的自动驾驶AI系统全生命周期安全保障
  • 论文Review 激光SLAM VoxelMap | RAL 2022 港大MARS出品!| 经典平面特征体素激光SLAM
  • .NET 应用程序 Linux下守护进程脚本编写
  • 基于.Net Framework4.5 Web API 引用Swagger
  • JavaWeb核心:HttpServletRequest与HttpServletResponse详解
  • mac环境下安装git并配置密钥等
  • 从行业场景到视觉呈现:3ds Max 与 C4D 效果图的本质分野
  • Pycharm现有conda环境有对应env,但是添加后没反应
  • 学习嵌入式的第十九天——Linux——文件编程
  • Spring Boot 使用 @NotBlank + @Validated 优雅校验参数
  • 疯狂星期四文案网第38天运营日记
  • TorchDynamo - API
  • 互联网大厂Java求职面试实录:Spring Boot到微服务与AI的技术问答
  • 【Unity开发】Unity核心学习(一)
  • 如何在 Ubuntu 24.04 LTS Noble Linux 上安装 FileZilla Server
  • MyBatis 中 XML 与 DAO 接口的位置关系及扫描机制详解
  • react与vue的对比,来实现标签内部类似v-for循环,v-if等功能
  • 万字详解C++11列表初始化与移动语义
  • 如何把ubuntu 22.04下安装的mysql 8 的 数据目录迁移到另一个磁盘目录
  • 基于深度学习的苹果品质智能检测算法研究
  • Kubernetes(K8S)中,kubectl describe node与kubectl top pod命令显示POD资源的核心区别
  • .net\c#web、小程序、安卓开发之基于asp.net家用汽车销售管理系统的设计与实现