MySQL adalah sistem manajemen basis data yang umumnya dipasang sebagai bagian dari tumpukan LAMP (Linux, Apache, MySQL, PHP / Python / Perl. Pada tutorial ini akan menjelaskan cara menginstal MySQL di server Ubuntu 18.04.
Untuk mengikuti tutorial ini, Anda memerlukan sebuah server Ubuntu 18.04 yang diatur agar user non-root memiliki hak akses sudo
dan firewall.
Contents
Langkah 1 – Menginstal MySQL
Di Ubuntu 18.04, hanya versi terbaru dari MySQL yang disertakan dalam repositori paket APT secara default. Untuk menginstalnya, perbarui indeks paket pada server Anda dengan apt
:
$ sudo apt update
Kemudian instal paket default:
$ sudo apt install mysql-server
Langkah 2 – Mengkonfigurasi MySQL
Untuk instalasi baru, Anda perlu menjalankan skrip keamanan bawaan dengan mengubah beberapa opsi default yang kurang aman, seperti login root jarak jauh dan sampel user. Pada versi MySQL yang lebih lama, Anda perlu menginisialisasi direktori data secara manual juga, tetapi hal tersebut dilakukan secara otomatis pada versi terkini.
Jalankan skrip keamanan berikut
$ sudo mysql_secure_installation
Kemudian Anda akan melalui serangkaian tahap konfirmasi dimana Anda dapat membuat beberapa perubahan pada opsi keamanan instalasi MySQL. Prompt pertama akan menanyakan apakah Anda ingin mengatur Plugin Validate Password Plugin, yang digunakan untuk menguji kekuatan kata sandi MySQL. Apapun pilihan Anda, prompt berikutnya adalah mengatur kata sandi untuk user root MySQL. Masukkan dan konfirmasikan kata sandi aman pilihan Anda.
Dari sana, ketik Y
dan kemudian ENTER
untuk pada semua pertanyaan berikutnya. Proses ini akan menghapus beberapa user anonim dan database pengujian, menonaktifkan login root jarak jauh, dan memuat aturan baru sehingga MySQL segera menerima pengaturan yang telah Anda buat.
Untuk menginisialisasi direktori data MySQL, gunakan mysql_install_db
untuk versi sebelum 5.7.6, dan mysqld --initialize
untuk 5.7.6 dan yang lebih baru. Namun, jika Anda menginstal MySQL dari distribusi Debian, seperti dijelaskan pada Langkah 1, direktori data diinisialisasi secara otomatis; Anda tidak perlu melakukan apa pun. Jika Anda tetap mencoba menjalankan perintah, Anda akan melihat pesan error berikut:
Output mysqld: Can't create directory '/var/lib/mysql/' (Errcode: 17 - File exists) . . . 2018-04-23T13:48:00.572066Z 0 [ERROR] Aborting
Perhatikan bahwa meskipun Anda telah menetapkan kata sandi untuk root user MySQL, user ini tidak dikonfigurasikan untuk mengautentikasi dengan kata sandi saat menyambungkan ke shell MySQL. Jika Anda suka, Anda dapat menyesuaikan pengaturan ini dengan mengikuti Langkah 3.
Langkah 3 – (Opsional) Menyesuaikan Otentikasi User dan Hak Istimewa
Dalam sistem Ubuntu yang menjalankan MySQL 5.7 (dan versi yang lebih baru), root user MySQL diatur untuk mengotentikasi menggunakan plugin auth_socket
secara default daripada dengan kata sandi. Hal ini bisa meningkatkan keamanan dan kegunaan dalam banyak kasus, tetapi juga dapat menyulitkan ketika Anda perlu mengizinkan program eksternal (mis., PhpMyAdmin) untuk mengakses user.
Agar kata sandi terhubung ke MySQL sebagai root, Anda harus mengganti metode otentikasi dari auth_socket
ke mysql_native_password
. Untuk melakukan ini, buka prompt MySQL dari terminal Anda:
$ sudo mysql
Selanjutnya, periksa metode otentikasi mana yang Anda (setiap akun user MySQL) gunakan dengan perintah berikut:
mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
Output +------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | | auth_socket | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 4 rows in set (0.00 sec)
Dalam contoh ini, Anda dapat melihat bahwa user root sebenarnya mengautentikasi menggunakan plugin auth_socket
. Untuk mengonfigurasi akun root untuk mengautentikasi dengan kata sandi, jalankan perintah ALTER USER
berikut. Pastikan untuk mengubah kata sandi menjadi kata sandi pilihan Anda, dan perhatikan bahwa perintah ini akan mengubah kata sandi root yang Anda atur di Langkah 2:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Kemudian, jalankan FLUSH PRIVILEGES
yang memberi tahu server agar memuat ulang tabel hibah dan menerapkan perubahan baru Anda:
mysql> FLUSH PRIVILEGES;
Periksa kembali metode otentikasi yang digunakan oleh tiap user Anda untuk mengonfirmasi bahwa root tidak lagi diautentikasi menggunakan plugin auth_socket:
mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
Output+------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 4 rows in set (0.00 sec)
Anda dapat melihat dalam output contoh bahwa user MySQL root sekarang mengautentikasi menggunakan kata sandi. Setelah Anda mengonfirmasi di server Anda sendiri, Anda dapat keluar dari shell MySQL:
mysql> exit
Atau mungkin hal itu lebih sesuai dengan alur kerja beberapa orang untuk terhubung ke MySQL dengan user khusus. Untuk membuat user tersebut, buka shell MySQL sekali lagi:
$ sudo mysql
Catatan: Jika Anda mengaktifkan otentikasi kata sandi untuk root, seperti yang dijelaskan dalam paragraf sebelumnya, Anda harus menggunakan perintah yang berbeda untuk mengakses shell MySQL. Selanjutnya akan dijalankan klien MySQL dengan hak user biasa, dan Anda hanya akan mendapatkan hak administrator dalam basis data melalui mengautentikasi:
$ mysql -u root -p
Dari sana, buat user baru dan berikan kata sandi yang kuat:
mysql> CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
Lalu, beri user baru tersebut hak istimewa yang sesuai. Misalnya, Anda bisa memberikan hak user untuk semua tabel dalam database, serta hak untuk menambah, mengubah, dan menghapus hak user, dengan perintah berikut:
mysql> GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
Perhatikan bahwa, pada titik ini, Anda tidak perlu menjalankan perintah FLUSH PRIVILEGES
lagi. Perintah ini hanya diperlukan ketika Anda memodifikasi tabel hibah menggunakan pernyataan seperti INSERT
, UPDATE
, atau DELETE
. Karena Anda membuat pengguna baru, alih-alih memodifikasi yang sudah ada, FLUSH PRIVILEGES
tidak diperlukan di sini.
Setelah itu, tutup shell MySQL:
mysql> exit
Terakhir, mari kita uji hasil instalasi MySQL.
Langkah 4 — Menguji MySQL
Terlepas dari bagaimana cara Anda menginstalnya, MySQL seharusnya sudah berjalan secara otomatis. Untuk mengujinya, periksa statusnya dengan:
$ systemctl status mysql.service
Anda akan melihat output seperti berikut:
● mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: en Active: active (running) since Wed 2018-04-23 21:21:25 UTC; 30min ago Main PID: 3754 (mysqld) Tasks: 28 Memory: 142.3M CPU: 1.994s CGroup: /system.slice/mysql.service └─3754 /usr/sbin/mysqld
Jika MySQL tidak berjalan, Anda dapat menjalankannya dengan perintah sudo systemctl start mysql
.
Untuk pemeriksaan tambahan, Anda dapat mencoba menyambungkan ke database menggunakan tool mysqladmin
, yang merupakan klien yang memungkinkan Anda menjalankan perintah administratif. Sebagai contoh, perintah ini terhubung ke MySQL sebagai root (-u root
) , meminta kata sandi (-p
), dan mengembalikan ke versi sebelumnya.
$ sudo mysqladmin -p -u root version
Setelah itu, Anda akan melihat output seperti berikut:
mysqladmin Ver 8.42 Distrib 5.7.21, for Linux on x86_64 Copyright (c) 2000, 2018, 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 5.7.21-1ubuntu1 Protocol version 10 Connection Localhost via UNIX socket UNIX socket /var/run/mysqld/mysqld.sock Uptime: 30 min 54 sec Threads: 1 Questions: 12 Slow queries: 0 Opens: 115 Flush tables: 1 Open tables: 34 Queries per second avg: 0.006
Hal itu menandakan bahwa MySQL sudah berhasil diaktifkan dan berjalan dengan baik.