Instal MySQL pada Linux Ubuntu

 

MySQL adalah suatu sistem manajemen basis data sumber terbuka, yang umumnya diinstal sebagai bagian dari tumpukan LAMP (Linux, Apache, MySQL, PHP/Python/Perl) yang populer. Ini menerapkan model relasional dan menggunakan Structured Query Language dikenal sebagai SQL untuk mengelola datanya.

1 .  Menginstal MySQL

Pada Ubuntu 20.04, dapat menginstal MySQL menggunakan repositori paket APT. Versi MySQL yang tersedia di repositori Ubuntu asal adalah versi 18.19.

Untuk menginstalnya, perbarui indeks paket pada server jika belum melakukanbaru-baru ini:

sudo apt update

Lalu instal paket mysql-server:

sudo apt install mysql-server

Sintax diatas dalam menginstal MySQL, tidak diminta untuk menetapkan kata sandi atau membuat perubahan konfigurasi lain. maka diperlukan untuk melakukan konfigurasi supaya MySQL menjadi aman.

2.  Mengonfigurasi MySQL

Instalasi MySQL pada tahap ini akan menjalankan/meneraplan keamanan DBMS. Skrip ini mengubah beberapa opsi asal yang kurang aman untuk hal-hal seperti log masuk root jarak jauh dan pengguna sampel.

Jalankan skrip keamanan dengan sudo:

sudo mysql_secure_installation

Pada tahap ini akan memandu melalui serangkaian prompt di mana, dapat membuat beberapa perubahan pada opsi keamanan instalasi MySQL. Prompt pertama akan bertanya apakah ingin menyiapkan Validate Password Plugin, yang dapat digunakan untuk menguji kekuatan kata sandi dari pengguna MySQL baru sebelum menganggapnya valid.

Jika memilih untuk mengatur Validate Password Plugin, setiap pengguna MySQL yang diciptakan yang terautentikasi dengan suatu kata sandi akan diharuskan memiliki kata sandi yang memenuhi kebijakan yang dipilih.  Tingkat kebijakan terkuat, yang dapat pilih dengan memasukkan ( seperti sintax dibawah ) akan membutuhkan kata sandi dengan panjang setidaknya delapan karakter dan menyertakan campuran huruf besar, huruf kecil, numerik, dan karakter khusus:

Output
Securing the MySQL server deployment. Connecting to MySQL using a blank password. VALIDATE PASSWORD COMPONENT can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD component? Press y|Y for Yes, any other key for No: Y There are three levels of password validation policy: LOW Length >= 8 MEDIUM Length >= 8, numeric, mixed case, and special characters STRONG Length >= 8, numeric, mixed case, special characters and dictionary file Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:

Terlepas dari apakah memilih mengatur Validate Password Plugin, atau tidak prompt berikutnya akan meminta kata sandi untuk pengguna root MySQL. Masukkan lalu konfirmasikan kata sandi aman yang dipilih:

Output
Please set the password for root here. New password: Re-enter new password:

Perhatikan bahwa walaupun telah mengatur kata sandi untuk pengguna MySQL root, pengguna ini belum dikonfigurasi untuk mengautentikasi dengan kata sandi ketika terhubung ke shell MySQL.

Jika menggunakan Validate Password Plugin, maka akan menerima umpan balik tentang kekuatan kata sandi baru. Lalu akan ditanya apakah ingin melanjutkan dengan kata sandi yang baru, ketik Y untuk melanjutkan :

Output
Estimated strength of the password: 100 Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y

Setelah menekan Y lalu ENTER untuk menerima jawaban asali untuk semua pertanyaan berikutnya. Ini akan menghapus sebagian pengguna anonim dan basis data percobaan, menonaktifkan log masuk root dari jarak jauh, dan memuat aturan-aturan baru ini sehingga MySQL segera menerapkan perubahan yang Anda telah buat.

3.  Membuat User MySQL Khusus dan Memberi Privilese

MySQL menciptakan akun user root yang dapat digunakan untuk mengelola basis data. User ini memiliki privilese penuh atas server MySQL, artinya user ini memiliki kendali penuh atas setiap basis data, tabel, pengguna, dan seterusnya.  Maka dari itu, saran terbaik adalah hindari menggunakan akun ini di luar fungsi administratif. 

Sistem Ubuntu yang menjalankan MySQL 5.7, user MySQL root ditetapkan untuk mengautentikasi dengan menggunakan plugin auth_socket. Plugin ini mengharuskan nama pengguna sistem operasi yang memanggil klien MySQL sesuai dengan nama pengguna MySQL yang disebutkan pada perintah, sehingga harus menggunakan mysql dengan privilese sudo untuk mendapatkan akses ke pengguna MySQL root:

  1. sudo mysql

Catatan: Saat menginstal MySQL mengaktifkan autentikasi kata sandi untuk root, maka perlu menggunakan perintah yang berbeda untuk mengakses shell MySQL. Y

  1. mysql -u root -p

Setelah memiliki akses ke prompt MySQL, dapat menciptakan pengguna baru dengan pernyataan CREATE USER. Dengan mengikuti sintaks umum ini:

  1. CREATE USER 'username'@'host' IDENTIFIED WITH authentication_plugin BY 'password';

Ada beberapa opsi saat memilih plugin autentikasi pengguna. Plugin auth_socket yang disebutkan sebelumnya dapat memudahkan karena menyediakan keamanan yang kuat tanpa mengharuskan pengguna yang valid memasukkan kata sandi untuk mengakses basis data. Tetapi ini juga menghalangi koneksi jarak jauh yang dapat mempersulit keadaan saat program eksternal perlu berinteraksi dengan MySQL.

Sebagai alternatif, abaikan bagian WITH authentication plugin dari sintaks untuk membuat pengguna mengautentikasi dengan plugin MySQL, caching_sha2_password

Jalankan perintah berikut untuk menciptakan pengguna yang mengautentikasi dengan caching_sha2_password. Pastikan mengubah sammy menjadi nama pengguna yang diinginkan dan password menjadi kata sandi yang kuat:

  1. CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';

Catatan: Ada masalah yang diketahui dengan beberapa versi PHP yang menimbulkan masalah dengan caching_sha2_password. Jika berencana menggunakan basis data ini dengan suatu aplikasi PHP — phpMyAdmin, misalnya — mungkin perlu menciptakan pengguna yang akan mengautentikasi dengan plugin mysql_native_password yang lebih tua tetapi masih aman sebagai gantinya:

  1. CREATE USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Jika yakin, selalu dapat membuat pengguna yang mengautentikasi dengan caching_sha2_plugin dan melakukan ALTER di kesempatan berikutnya dengan perintah ini:

  1. ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Setelah menciptakan pengguna baru, maka dapat memberinya privilese yang sesuai. Sintaks umum untuk memberi privilese adalah sebagai berikut:

  1. GRANT PRIVILEGE ON database.table TO 'username'@'host';

Nilai PRIVILEGE dalam sintaks contoh ini menentukan tindakan yang diizinkan untuk dilakukan oleh pengguna pada database dan table yang ditentukan. dapat memberi lebih dari satu privilese kepada pengguna yang sama dalam satu perintah dengan memisahkan setiap privilese dengan koma. juga dapat memberi seorang pengguna beberapa privilese secara global dengan memasukkan tanda bintang (*) sebagai pengganti nama basis data dan tabel. Dalam SQL, tanda bintang adalah karakter khusus yang digunakan untuk merepresentasikan “semua” basis data atau tabel.

Jalankan pernyataan GRANT ini, yang mengganti sammy dengan nama pengguna MySQL Anda sendiri, untuk memberi privilese ini kepada pengguna Anda:

  1. GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

Perhatikan bahwa pernyataan ini juga menyertakan WITH GRANT OPTION. Ini akan memungkinkan pengguna MySQL untuk memberi apa pun yang dimilikinya kepada pengguna lain di sistem.

Peringatan: Beberapa pengguna mungkin ingin memberi pengguna MySQL privilese ALL PRIVILEGES, yang akan memberi privilese superuser yang luas, yang mirip dengan privilese pengguna root, seperti:

  1. GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

Privilese luas semacam itu tidak boleh diberikan dengan mudah, karena siapa pun yang memiliki akses ke pengguna MySQL ini akan memiliki kontrol penuh atas setiap basis data di server.

Selanjutnya jalankan perintah FLUSH PRIVILEGES. Ini akan mengosongkan memori apa pun yang disinggahkan pada cache oleh server sebagai hasil dari pernyataan CREATE USER dan GRANT yang digunakan sebelumnya:

  1. FLUSH PRIVILEGES;

Lalu, keluar dari klien MySQL:

  1. exit

Log in sebagai pengguna MySQL baru, gunakan perintah seperti berikut ini:

  1. mysql -u sammy -p

Bendera -p akan menyebabkan klien MySQL meminta kata sandi pengguna MySQL untuk diautentikasi.

4. Menguji MySQL

Terlepas dari bagaimana menginstal, MySQL seharusnya mulai berfungsi secara otomatis. Untuk menguji ini, periksa statusnya.

  1. systemctl status mysql.service

Akan terlihat keluaran serupa dengan yang berikut:

Output
● mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2020-04-21 12:56:48 UTC; 6min ago Main PID: 10382 (mysqld) Status: "Server is operational" Tasks: 39 (limit: 1137) Memory: 370.0M CGroup: /system.slice/mysql.service └─10382 /usr/sbin/mysqld

Jika MySQL tidak berjalan, ketik sudo systemctl start mysql.

Sebagai pemeriksaan tambahan, dapat mencoba terhubung ke basis data dengan menggunakan mysqladmin, yang merupakan suatu klien yang memungkinkan untuk menjalankan perintah administratif. Misalnya, perintah ini mengatakan untuk terhubung sebagai seorang pengguna MySQL bernama sammy (-u sammy), meminta kata sandi (-p), dan menginformasikan versi. Pastikan mengubah sammy menjadi nama pengguna MySQL khusus, dan masukkan kata sandi pengguna itu saat diminta:

  1. sudo mysqladmin -p -u sammy version

Akan terlihat keluaran serupa dengan ini:

Output
mysqladmin Ver 8.0.19-0ubuntu5 for Linux on x86_64 ((Ubuntu)) Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Server version 8.0.19-0ubuntu5 Protocol version 10 Connection Localhost via UNIX socket UNIX socket /var/run/mysqld/mysqld.sock Uptime: 10 min 44 sec Threads: 2 Questions: 25 Slow queries: 0 Opens: 149 Flush tables: 3 Open tables: 69 Queries per second avg: 0.038

Ini berarti MySQL sudah aktif dan berfungsi.