På CentOS / RHEL kan du enkelt köra mysql_secure_installation kommando för att ställa in ett root-lösenord. Men på Ubuntu 20.04 LTS, den här metoden fungerar inte, eftersom MySQL använder ett annat autentiseringsplugg för rot användare.
Den här artikeln visar hur du ställer in ett MySQL-root-lösenord på CentOS 8 och Ubuntu 20.04 LTS Linux-distributioner med Ansible-moduler.
Förutsättningar
Om du vill prova exemplen i den här artikeln,
1) Du måste ha Ansible installerat på din dator.
2) Du måste ha minst en CentOS / RHEL 8-värd eller en Ubuntu 20.04 LTS-värd konfigurerad för Ansible-automatisering.
Det finns många artiklar på LinuxHint dedikerade till att installera Ansible och konfigurera värdar för Ansible-automatisering. Du kan kolla in dessa om det behövs.
Ställa in en projektkatalog
Innan vi går vidare, kommer vi att skapa en ny Ansible-projektkatalog, bara för att hålla sakerna lite organiserade.
För att skapa projektkatalogen mysql-root-pass / och alla nödvändiga underkataloger (i din nuvarande arbetskatalog), kör följande kommando:
$ mkdir -pv mysql-root-pass / playbooks, host_vars, group_vars
När projektkatalogen har skapats navigerar du till projektkatalogen enligt följande:
$ cd mysql-root-pass /
Skapa en värdar inventeringsfil, enligt följande:
$ nano värdar
Lägg till värdens IP- eller DNS-namn på din CentOS / RHEL 8 eller Ubuntu 20.04 LTS-värdar i inventeringsfilen (en värd per rad), som visas på skärmdumpen nedan.
När du är klar sparar du filen genom att trycka på
Här har jag skapat två grupper, centos8, och ubuntu20. De centos8 gruppen har DNS-namnet på min CentOS 8-värd, vm3.nodekite.com; och den ubuntu20 gruppen har DNS-namnet på min Ubuntu 20.04 LTS-värd, vm7.nodekite.com.
Skapa en Ansible-konfigurationsfil ansible.cfg i din projektkatalog, enligt följande:
$ nano ansible.cfg
Skriv följande rader i ansible.cfg fil:
[standard]inventering = värdar
host_key_checking = Falskt
När du är klar sparar du ansible.cfg fil genom att trycka på
Försök att pinga alla värdarna du har lagt till i din värdar inventeringsfil, enligt följande:
$ ansible all -u ansible -m ping
Som du kan se är min CentOS 8-värd (vm3.nodekite.com) och Ubuntu 20.04 LTS-värd (vm7.nodekite.com) är tillgängliga.
Installera MySQL och ställa in root-lösenord på CentOS / RHEL 8
Detta avsnitt visar hur du installerar MySQL-databasservern och ställer in ett root-lösenord på CentOS 8 med Ansible. Samma procedur bör fungera på RHEL 8.
Skapa den nya Ansible-spelboken install_mysql_centos8.yaml i spelböcker / katalog, enligt följande:
$ nano playbooks / install_mysql_centos8.yaml
Skriv följande rader i install_mysql_centos8.yaml fil:
- värdar: centos8användare: ansible
bli sann
uppgifter:
- namn: Uppdatera DNF-paketets lagringscache
dnf:
update_cache: True
- namn: Installera MySQL-servern på CentOS 8
dnf:
namn: mysql-server
tillstånd: närvarande
- namn: Installera MySQL-klient på CentOS 8
dnf:
namn: mysql
tillstånd: närvarande
- namn: Se till att mysqld-tjänsten körs
service:
namn: mysqld
tillstånd: startade
aktiverat: True
- namn: Installera python3-PyMySQL-biblioteket
dnf:
namn: python3-PyMySQL
tillstånd: närvarande
När du är klar trycker du på
Raden nedan ber Ansible att köra spelboken install_mysql_centos8.yaml på varje värd i centos8 grupp.
Här har jag definierat fem uppgifter.
Den första uppgiften uppdaterar DNF-paketförvarets cache för CentOS 8 med Ansible dnf modul.
Den andra uppgiften installerar MySQL-serverpaketet mysql-server med Ansible dnf modul.
Den tredje uppgiften installerar MySQL-klientpaketet mysql med Ansible dnf modul.
Den fjärde uppgiften säkerställer att mysqld tjänsten körs och att den har lagts till i systemets start så att den automatiskt startar vid start.
Den femte uppgiften installerar Python 3 MySQL-biblioteket pymysql. Detta krävs för åtkomst till MySQL från Ansible.
Springa det install_mysql_centos8.yaml spelbok, enligt följande:
$ ansible-playbook playbooks / install_mysql_centos8.yaml
Som du kan se, spelboken install_mysql_centos8.yaml sprang framgångsrikt.
På min CentOS 8-värd kan jag komma åt MySQL som rot användare utan något lösenord, som du kan se på skärmdumpen nedan:
$ sudo mysql -u root
Nu när MySQL-servern är installerad är det dags att ställa in ett root-lösenord för MySQL-servern.
Skapa den nya gruppvariabelfilen centos8 (i grupp_vars / katalog) för centos8 grupp, enligt följande:
$ nano group_vars / centos8
Lägg till en ny variabel mysql_pass med rotlösenordet (i mitt fall, hemlighet) du vill ställa in, som visas på skärmdumpen nedan.
När du är klar trycker du på
Skapa en ny spelbok set_root_pass_centos8.yaml med följande kommando:
$ nano playbooks / set_root_pass_centos8.yaml
Skriv följande rader i set_root_pass_centos8.yaml fil:
- värdar: centos8användare: ansible
bli sann
uppgifter:
- namn: Ange MySQL-root-lösenord
mysql_user:
login_host: 'localhost'
login_user: 'root'
inloggningslösenord: "
namn: 'root'
lösenord: 'mysql_pass'
tillstånd: närvarande
När du är klar trycker du på
Denna spelbok använder mysql_user Ansible-modul för att ställa in ett MySQL-root-lösenord.
De login_host, inloggningsanvändare, och inloggningslösenord alternativ för mysql_user Ansible-modul används för att ställa in det aktuella MySQL-inloggningsvärdnamnet, användarnamnet respektive lösenordet. Som standard är MySQL-inloggningsvärdnamnet (login_host) är lokal värd, inloggnings användarnamnet (inloggningsanvändare) är rot, och inloggningen Lösenord (inloggningslösenord) är tom (”) på CentOS 8.
De Lösenord alternativet för mysql_user Ansible-modul används för att ställa in ett nytt MySQL-rotlösenord här. MySQL-rotlösenordet kommer att vara värdet på mysql_pass gruppvariabel som ställts in tidigare.
Kör spelboken set_root_pass_centos8.yaml med följande kommando:
$ ansible-playbook playbooks / set_root_pass_centos8.yaml
Spelboken kördes framgångsrikt, vilket framgår av skärmdumpen nedan:
Som du kan se kan jag inte längre logga in på MySQL-servern utan ett root-lösenord.
För att logga in på MySQL-servern som rot användare med ett lösenord, kör följande kommando på din CentOS 8-värd:
$ sudo mysql -u root -p
Skriv in root-lösenordet du har ställt in med Ansible och tryck på
Du bör vara inloggad på MySQL-servern som rot användare.
Installera MySQL och ställa in root-lösenord på Ubuntu 20.04 LTS
Detta avsnitt visar hur du installerar MySQL-databasservern och ställer in ett root-lösenord på Ubuntu 20.04 LTS med Ansible.
Skapa en ny Ansible-spelbok install_mysql_ubuntu20.yaml i spelböcker / katalog, enligt följande:
$ nano playbooks / install_mysql_ubuntu20.yaml
Skriv följande rader i install_mysql_ubuntu20.yaml fil:
- värdar: ubuntu20användare: ansible
bli sann
uppgifter:
- namn: Uppdatera APT-paketets lagringscache
benägen:
update_cache: True
- namn: Installera MySQL-servern på Ubuntu 20.04 LTS
benägen:
namn: mysql-server
tillstånd: närvarande
- namn: Installera MySQL-klient på Ubuntu 20.04 LTS
benägen:
namn: mysql-client
tillstånd: närvarande
- namn: Se till att mysql-tjänsten körs
service:
namn: mysql
tillstånd: startade
aktiverat: True
- namn: Installera python3-pymysql-biblioteket
benägen:
namn: python3-pymysql
tillstånd: närvarande
När du är klar trycker du på
Följande rad säger till Ansible att köra spelboken install_mysql_ubuntu20.yaml på varje värd i ubuntu20 grupp:
Här har jag definierat fem uppgifter.
Den första uppgiften uppdaterar APT-paketets förvarscache för Ubuntu 20.04 LTS med Ansible benägen modul.
Den andra uppgiften installerar MySQL-serverpaketet mysql-server med Ansible benägen modul.
Den tredje uppgiften installerar MySQL-klientpaketet mysql med Ansible benägen modul.
Den fjärde uppgiften ser till att mysql tjänsten körs och att den har lagts till i systemets start så att den automatiskt startar vid start.
Den femte uppgiften installerar Python 3 MySQL-biblioteket pymysql. Detta krävs för att komma åt MySQL från Ansible.
Springa det install_mysql_ubuntu20.yaml spelbok, enligt följande:
$ ansible-playbook playbooks / install_mysql_ubuntu20.yaml
Som du kan se, spelboken install_mysql_ubuntu20.yaml sprang framgångsrikt.
På min Ubuntu 20.04 LTS-värd, jag kan komma åt MySQL som rot användare utan något lösenord, som du kan se på skärmdumpen nedan.
$ sudo mysql -u root
Nu när MySQL-servern är installerad är det dags att ställa in ett root-lösenord för MySQL-servern.
Skapa en ny gruppvariabelfil ubuntu20 (i grupp_vars / katalog) för ubuntu20 grupp, enligt följande:
$ nano group_vars / ubuntu20
Lägg till en ny variabel, mysql_pass, med rotlösenordet (i mitt fall, verysecret) som du vill ställa in, som visas på skärmdumpen nedan.
När du är klar trycker du på
Skapa en ny spelbok set_root_pass_ubuntu20.yaml med följande kommando:
$ nano playbooks / set_root_pass_ubuntu20.yaml
Skriv följande rader i set_root_pass_ubuntu20.yaml fil:
- värdar: ubuntu20användare: ansible
bli sann
uppgifter:
- namn: Ändra autentiseringsplugin för MySQL root-användare till mysql_native_password
shell: mysql -u root -e 'UPPDATERA mysql.användar-SET plugin = "mysql_native_password"
VAR användaren = "root" OCH värd = "localhost" '
- namn: Flush Privileges
skal: mysql -u root -e 'FLUSH PRIVILEGES'
- namn: Ange MySQL-root-lösenord
mysql_user:
login_host: 'localhost'
login_user: 'root'
inloggningslösenord: "
namn: 'root'
lösenord: 'mysql_pass'
tillstånd: närvarande
När du är klar trycker du på
Här har jag definierat tre uppgifter.
Den första uppgiften ändrar autentiseringsplugin för MySQL rot användare från auth_socket till mysql_native_password.
Den andra uppgiften laddar om alla privilegier.
Den tredje uppgiften använder mysql_user Ansible-modul för att ställa in ett MySQL-root-lösenord.
I den tredje uppgiften, login_host, inloggningsanvändare, och inloggningslösenord alternativ för mysql_user Ansible-modul används för att ställa in det aktuella MySQL-inloggningsvärdnamnet, användarnamnet respektive lösenordet. Som standard är MySQL-inloggningsvärdnamnet (login_host) är lokal värd, inloggnings användarnamnet (inloggningsanvändare) är rot, och inloggningen Lösenord (inloggningslösenord) är tom (”) på systemet.
Här, den Lösenord alternativet för mysql_user Ansible-modulen används för att ställa in ett nytt MySQL-root-lösenord. MySQL-rotlösenordet kommer att vara värdet på mysql_pass gruppvariabeln, som jag ställde in tidigare, i group_vars / ubuntu20 fil.
Kör spelboken set_root_pass_ubuntu20.yaml med följande kommando:
$ ansible-playbook playbooks / set_root_pass_ubuntu20.yaml
Spelboken körde framgångsrikt, som du kan se på skärmdumpen nedan:
Som du kan se kan jag inte längre logga in på MySQL-servern utan ett root-lösenord.
$ sudo mysql -u root
För att logga in på MySQL-servern som rotanvändare med det inställda lösenordet, kör följande kommando på din Ubuntu 20.04 LTS-värd:
$ sudo mysql -u root -p
Skriv in rotlösenordet du har ställt in med Ansible och tryck på
Du bör vara inloggad på MySQL-servern som rotanvändare.
Slutsats
Den här artikeln visade dig hur du installerar MySQL-servern och ställer in ett MySQL-root-lösenord på CentOS 8 och Ubuntu 20.04 LTS Linux-distributioner med Ansible. Denna artikel använde mysql_user Ansible-modul för att ställa in MySQL-root-lösenordet. Du kan använda den här modulen för att ändra MySQL-root-lösenordet, skapa nya MySQL-användare och därför många fler användarhanteringsfunktioner.
För mer information om mysql_user modul, kontrollera den officiella dokumentationen för mysql_user-modulen.