Versi sebelumnya dari tutorial ini ditulis oleh Hazel Virdó
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 (lebih dikenal sebagai SQL) untuk mengelola datanya.
Tutorial ini akan membahas cara menginstal MySQL versi 8.0
pada server Ubuntu 20.04. Dengan menyelesaikan tutorial ini, Anda akan memiliki basis data relasional yang berfungsi, yang dapat Anda gunakan untuk membangun situs web atau aplikasi Anda berikutnya.
Untuk mengikuti tutorial ini, Anda akan membutuhkan:
Pada Ubuntu 20.04, Anda dapat menginstal MySQL menggunakan repositori paket APT. Pada saat penulisan tutorial ini, versi MySQL yang tersedia di repositori Ubuntu asali adalah versi 18.19.
Untuk menginstalnya, perbarui indeks paket pada server Anda jika Anda belum melakukanbaru-baru ini:
- sudo apt update
Lalu instal paket mysql-server
:
- sudo apt install mysql-server
Ini akan menginstal MySQL, tetapi tidak akan meminta Anda untuk menetapkan kata sandi atau membuat perubahan konfigurasi lain. Karena ini membuat instalasi MySQL Anda menjadi tidak aman, maka kita akan membahas ini selanjutnya.
Untuk instalasi baru MySQL, Anda akan menjalankan skrip keamanan DBMS yang disertakan. Skrip ini mengubah beberapa opsi asali yang kurang aman untuk hal-hal seperti log masuk root jarak jauh dan pengguna sampel.
Jalankan skrip keamanan dengan sudo
:
- sudo mysql_secure_installation
Ini akan memandu Anda melalui serangkaian prompt di mana Anda dapat membuat beberapa perubahan pada opsi keamanan instalasi MySQL. Prompt pertama akan bertanya apakah Anda ingin menyiapkan Validate Password Plugin, yang dapat digunakan untuk menguji kekuatan kata sandi dari pengguna MySQL baru sebelum menganggapnya valid.
Jika Anda memilih untuk mengatur Validate Password Plugin, setiap pengguna MySQL yang Anda ciptakan yang terautentikasi dengan suatu kata sandi akan diharuskan memiliki kata sandi yang memenuhi kebijakan yang Anda pilih. Tingkat kebijakan terkuat — yang Anda dapat pilih dengan memasukkan 2
— akan membutuhkan kata sandi dengan panjang setidaknya delapan karakter dan menyertakan campuran huruf besar, huruf kecil, numerik, dan karakter khusus:
OutputSecuring 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:
2
Terlepas dari apakah Anda memilih mengatur Validate Password Plugin, prompt berikutnya akan mengatur kata sandi untuk pengguna root MySQL. Masukkan lalu konfirmasikan kata sandi aman yang Anda pilih:
OutputPlease set the password for root here.
New password:
Re-enter new password:
Perhatikan bahwa walaupun Anda telah mengatur kata sandi untuk pengguna MySQL root, pengguna ini belum dikonfigurasi untuk mengautentikasi dengan kata sandi ketika terhubung ke shell MySQL.
Jika Anda menggunakan Validate Password Plugin, Anda akan menerima umpan balik tentang kekuatan kata sandi baru Anda. Lalu, skrip akan bertanya apakah Anda ingin melanjutkan dengan kata sandi yang baru Anda masukkan atau apakah Anda ingin memasukkan kata sandi yang baru. Dengan asumsi Anda puas dengan kekuatan kata sandi yang baru saja Anda masukkan, masukkan Y
untuk melanjutkan skrip:
OutputEstimated 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
Dari sana, Anda dapat 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.
Setelah skrip selesai, instalasi MySQL Anda akan diamankan. Anda sekarang dapat melanjutkan ke penciptaan pengguna basis data khusus dengan klien MySQL.
Setelah instalasi, MySQL menciptakan akun pengguna root yang dapat Anda gunakan untuk mengelola basis data Anda. Pengguna ini memiliki privilese penuh atas server MySQL, artinya pengguna 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. Langkah ini menjabarkan cara menggunakan pengguna root MySQL untuk menciptakan akun pengguna baru dan memberikannya privilese.
Dalam sistem Ubuntu yang menjalankan MySQL 5.7
(dan versi lebih baru), pengguna MySQL root ditetapkan untuk mengautentikasi dengan menggunakan plugin auth_socket
secara asali alih-alih dengan kata sandi. Plugin ini mengharuskan nama pengguna sistem operasi yang memanggil klien MySQL sesuai dengan nama pengguna MySQL yang disebutkan pada perintah, sehingga Anda harus menggunakan mysql
dengan privilese sudo
untuk mendapatkan akses ke pengguna MySQL root:
- sudo mysql
Catatan: Jika Anda menginstal MySQL dengan tutorial lain dan mengaktifkan autentikasi kata sandi untuk root, Anda perlu menggunakan perintah yang berbeda untuk mengakses shell MySQL. Yang berikut ini akan menjalankan klien MySQL Anda dengan privilese pengguna reguler, dan Anda hanya akan mendapat privilese administrator di dalam basis data dengan mengautentikasi:
- mysql -u root -p
Setelah Anda memiliki akses ke prompt MySQL, Anda dapat menciptakan pengguna baru dengan pernyataan CREATE USER
. Dengan mengikuti sintaks umum ini:
- CREATE USER 'username'@'host' IDENTIFIED WITH authentication_plugin BY 'password';
Setelah CREATE USER
, Anda menetapkan nama pengguna. Ini segera diikuti dengan tanda @
dan nama hos dari mana tempat pengguna ini akan terhubung. Jika Anda hanya berencana mengakses pengguna ini secara lokal dari server Ubuntu Anda, Anda dapat menentukan localhost
. Menyatukan nama pengguna dan hos pada kutipan tunggal tidak selalu diperlukan, tetapi melakukan hal itu dapat membantu mencegah kesalahan.
Anda memiliki beberapa opsi saat memilih plugin autentikasi pengguna Anda. 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, Anda dapat sepenuhnya mengabaikan bagian WITH authentication plugin
dari sintaks untuk membuat pengguna mengautentikasi dengan plugin asali MySQL, caching_sha2_password
. Dokumentasi MySQL menganjurkan plugin ini untuk pengguna yang ingin log masuk dengan kata sandi karena fitur keamanannya yang kuat.
Jalankan perintah berikut untuk menciptakan pengguna yang mengautentikasi dengan caching_sha2_password
. Pastikan mengubah sammy
menjadi nama pengguna yang Anda inginkan dan password
menjadi kata sandi yang kuat pilihan Anda:
- CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
Catatan: Ada masalah yang diketahui dengan beberapa versi PHP yang menimbulkan masalah dengan caching_sha2_password
. Jika Anda berencana menggunakan basis data ini dengan suatu aplikasi PHP — phpMyAdmin, misalnya — Anda mungkin perlu menciptakan pengguna yang akan mengautentikasi dengan plugin mysql_native_password
yang lebih tua tetapi masih aman sebagai gantinya:
- CREATE USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Jika Anda tidak yakin, Anda selalu dapat menciptakan pengguna yang mengautentikasi dengan caching_sha2_plugin
dan melakukan ALTER
di kesempatan berikutnya dengan perintah ini:
- ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Setelah menciptakan pengguna baru Anda, Anda dapat memberinya privilese yang sesuai. Sintaks umum untuk memberi privilese adalah sebagai berikut:
- 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. Anda dapat memberi lebih dari satu privilese kepada pengguna yang sama dalam satu perintah dengan memisahkan setiap privilese dengan koma. Anda 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.
Sebagai ilustrasi, perintah-perintah berikut ini memberi seorang pengguna privilese global untuk CREATE
, ALTER
, dan DROP
basis data, tabel, dan pengguna, serta wewenang untuk INSERT
, UPDATE
, dan DELETE
data dari tabel apa pun di server. Perintah ini juga memberi pengguna kemampuan untuk melakukan kueri dengan SELECT
, menciptakan kunci asing dengan kata kunci REFERENCES
, dan melakukan operasi FLUSH
dengan privilese RELOAD
. Namun, Anda harus memberikan pengguna hanya izin yang dibutuhkan, jadi silakan atur sendiri privelese pengguna Anda sesuai kebutuhan.
Anda dapat menemukan daftar lengkap dari privilese yang tersedia pada dokumentasi MySQL resmi.
Jalankan pernyataan GRANT
ini, yang mengganti sammy
dengan nama pengguna MySQL Anda sendiri, untuk memberi privilese ini kepada pengguna Anda:
- 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 Anda untuk memberi apa pun yang dimilikinya kepada pengguna lain di sistem.
Peringatan: Beberapa pengguna mungkin ingin memberi pengguna MySQL mereka privilese ALL PRIVILEGES
, yang akan memberi mereka privilese superpengguna yang luas, yang mirip dengan privilese pengguna root, seperti:
- 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.
Setelah ini, merupakan praktik yang baik untuk menjalankan 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:
- FLUSH PRIVILEGES;
Lalu, Anda dapat keluar dari klien MySQL:
- exit
Di masa depan, untuk melakukan log masuk sebagai pengguna MySQL baru Anda, Anda dapat menggunakan perintah seperti berikut ini:
- mysql -u sammy -p
Bendera -p
akan menyebabkan klien MySQL meminta kata sandi pengguna MySQL Anda untuk diautentikasi.
Yang terakhir, mari kita uji instalasi MySQL.
Terlepas dari bagaimana Anda menginstalnya, MySQL seharusnya mulai berfungsi secara otomatis. Untuk menguji ini, periksa statusnya.
- systemctl status mysql.service
Anda akan melihat 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, Anda dapat memulainya dengan sudo systemctl start mysql
.
Sebagai pemeriksaan tambahan, Anda dapat mencoba terhubung ke basis data dengan menggunakan alat mysqladmin
, yang merupakan suatu klien yang memungkinkan Anda 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 Anda, dan masukkan kata sandi pengguna itu saat diminta:
- sudo mysqladmin -p -u sammy version
Anda akan melihat keluaran serupa dengan ini:
Outputmysqladmin 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.
Anda sekarang memiliki penataan MySQL dasar di server Anda. Berikut ini adalah beberapa contoh dari langkah selanjutnya yang Anda dapat lakukan:
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!