Ansible部署WordPress+MariaDB遇权限及配置错误求助
使用Ansible部署WordPress+MariaDB时的权限与数据库配置问题
我正尝试用Ansible搭建WordPress+MariaDB运行环境,但在Oracle Linux 9.4和Fedora 40系统上,执行创建数据库及带权限新用户的操作时遇到相似错误。
清单配置
[fedora] 192.168.1.200 ansible_ssh_user=leo hostname=fedorasrv01 [oracle] 192.168.1.202 ansible_ssh_user=leo hostname=oraclesrv01
Ansible剧本内容
- name: Install Mariadb Server - RedHat yum: name: - mariadb-server - python3-pip state: present when: (ansible_facts['os_family'] == "RedHat") - name: Install PyMySQL on RedHat ansible.builtin.pip: name: PyMySQL state: present when: (ansible_facts['os_family'] == "RedHat") - name: "Start MariaDB" service: name: mariadb state: started enabled: yes - name: Creating a database to be used by WordPress - RedHat mysql_db: name: "{{ db_wp_name }}" state: present when: (ansible_facts['os_family'] == "RedHat") - name: Create user with password, all database privileges - RedHat mysql_user: name: "{{ db_wp_username }}" password: "{{ db_wp_password }}" priv: "{{ db_wp_name }}.*:ALL,GRANT" state: present when: (ansible_facts['os_family'] == "RedHat")
初始错误信息
TASK [mysql : Creating a database to be used by WordPress - RedHat] *************************************************************************************************************************************************************************** fatal: [192.168.1.202]: FAILED! => {"changed": false, "msg": "unable to find /root/.my.cnf. Exception message: (1698, \"Access denied for user 'root'@'localhost'\")"} fatal: [192.168.1.200]: FAILED! => {"changed": false, "msg": "unable to find /root/.my.cnf. Exception message: (1045, \"Access denied for user 'root'@'localhost' (using password: NO)\")"}
为解决问题,我在出错步骤前添加了一个辅助任务剧本并执行:
- name: Stop MySQL service: name=mysqld state=stopped - name: set environment variables shell: systemctl set-environment MYSQLD_OPTS="--skip-grant-tables" - name: Start MySQL service: name=mysqld state=started - name: sql query command: mysql -u root --execute="UPDATE mysql.user SET authentication_string = PASSWORD('{{ mysql_root_password }}') WHERE User = 'root' AND Host = 'localhost';" - name: sql query flush command: mysql -u root --execute="FLUSH PRIVILEGES" - name: Stop MySQL service: name=mysqld state=stopped - name: unset environment variables shell: systemctl unset-environment MYSQLD_OPTS - name: Start MySQL service: name=mysqld state=started
但执行后出现新错误:
TASK [mysql : sql query] ********************************************************************************************************************************************************************************************************************** fatal: [192.168.1.200]: FAILED! => {"changed": true, "cmd": ["mysql", "-u", "root", "--execute=UPDATE mysql.user SET authentication_string = PASSWORD('Password123') WHERE User = 'root' AND Host = 'localhost';"], "delta": "0:00:00.087770", "end": "2024-07-02 07:06:47.621171", "msg": "non-zero return code", "rc": 1, "start": "2024-07-02 07:06:47.533401", "stderr": "ERROR 1348 (HY000) at line 1: Column 'authentication_string' is not updatable", "stderr_lines": ["ERROR 1348 (HY000) at line 1: Column 'authentication_string' is not updatable"], "stdout": "", "stdout_lines": []} fatal: [192.168.1.202]: FAILED! => {"changed": true, "cmd": ["mysql", "-u", "root", "--execute=UPDATE mysql.user SET authentication_string = PASSWORD('Password123') WHERE User = 'root' AND Host = 'localhost';"], "delta": "0:00:00.088495", "end": "2024-07-02 07:06:47.591159", "msg": "non-zero return code", "rc": 1, "start": "2024-07-02 07:06:47.502664", "stderr": "ERROR 1348 (HY000) at line 1: Column 'authentication_string' is not updatable", "stderr_lines": ["ERROR 1348 (HY000) at line 1: Column 'authentication_string' is not updatable"], "stdout": "", "stdout_lines": []}
注释掉该辅助剧本后重试,数据库创建操作看似成功,但权限配置仍有问题:
TASK [mysql : Create user with password, all database privileges - RedHat] ********************************* fatal: [192.168.1.202]: FAILED! => {"changed": false, "msg": "(1290, 'The MariaDB server is running with the --skip-grant-tables option so it cannot execute this statement')"} fatal: [192.168.1.200]: FAILED! => {"changed": false, "msg": "(1290, 'The MariaDB server is running with the --skip-grant-tables option so it cannot execute this statement')"}
我尝试过相关解决方案,但执行时出现错误:
mysql: unknown variable 'init-file=/var/lib/mysql/mysql-init'
另外,我尝试查找socket文件,但在RedHat系系统中未找到,不确定是否需要相关配置。
内容的提问来源于stack exchange,提问作者Leonardo Pangaio
相关产品推荐
相关产品推荐

