Modul 13 - MySQLAdministration
Modul 13 - MySQLAdministration
TUJUAN PRAKTIKUM:
1. Mahasiswa dapat mengelola database dan tabel pada MySQL
2. Mahasiswa dapat mengelola user dan priveledges pada MySQL
3. Mahasiswa dapat menggunakan command adminstrasi MySQL
4. Mahasiswa dapat menggunakan fungsi backup dan restore MySQL
b. Jika menginstall MySQL secara biasa maka menggunakan perintah berikut pada Cmd (run as
Administrator Mode):
mysqld
1
c. Pastikan bahwa path MySQL bin Anda telah terdeteksi dalam environment Windows anda!
a. Jika menggunakan XAMPP, hanya perlu klik stop pada tombol service MySQL
b. Jika menggunakan instalasi biasa, gunakan tool mysqladmin dan diketik pada cmd yang
dijalankan as administrator mode
Contoh:
CREATE USER ‘bob@localhost’ IDENTIFIED by ‘Secure1Pass!’;
2
2.2 GRANT PRIVILEGES
Perintah create user yang sudah dipelajari dapat membuat user tapi tanpa ada kemampuan
(hak akses) apapun terhadap user tersebut. Anda tidak bisa select database ataupun melakukan
query ke tabel.
Contoh:
GRANT SELECT
ON <nama database>.<nama tabel>
TO <nim>@localhost;
Atau
Contoh:
GRANT INSERT
ON <nama database>.*
TO <nim>@localhost;
GRANT ALL
ON *.*
TO <nim>@localhost;
3
Privilege Meaning Level
Global Database Table Column Stored Proxy
Routine
ALL Grant all privileges at X X X X X X
[PRIVILEGES] specified access level
except GRANT OPTION
ALTER Allow user to use of X X X
ALTER TABLEstatement
ALTER Allow user to alter and X X X
ROUTINE drop stored
procedures or stored
functions.
CREATE Allow user to create X X X
databases and tables
CREATE Allow user to create X X
ROUTINE stored procedures and
stored functions
CREATE Allow user to create, X
TABLESPACE alter or drop
tablespaces and log file
groups
CREATE Allow user to create a X X
TEMPORARY temporary table by
TABLES using CREATE
TEMPORARY TABLE
statement
CREATE USER Allow user to use the X
CREATE USER, DROP
USER, RENAME USER,
and REVOKE ALL
PRIVILEGES
statements.
CREATE VIEW Allow user to create or X X X
modify the view.
DELETE Allow user to use X X X
DELETE statement
DROP Allow user to drop X X X
database, table and
view
EVENT Enable use of events X X
for the Event
Scheduler.
EXECUTE Allow user to execute X X X
stored routines
FILE Allow user to read any X
file in the database
directory.
GRANT Allow user to have X X X X X
OPTION privileges to grant or
revoke privileges from
other accounts.
4
INDEX Allow user to create or X X X
drop indexes.
INSERT Allow user to use the X X X X
INSERT statement
LOCK TABLES Allow user to use LOCK X X
TABLES on tables for
which you have the
SELECT privilege
PROCESS Allow user to see all X
processes with SHOW
PROCESSLIST
statement.
PROXY Enable user proxying.
REFERENCES Allow user to create a X X X X
foreign key
RELOAD Allow user to use X
FLUSH statement
REPLICATION Allow user to query to X
CLIENT see where master or
slave servers are
REPLICATION Allow the user to use X
SLAVE replicate slaves to read
binary log events from
the master.
SELECT Allow user to use X X X X
SELECT statement
SHOW Allow user to show all X
DATABASES databases
SHOW VIEW Allow user to use SHOW X X X
CREATE VIEW
statement
SHUTDOWN Allow user to use X
mysqladmin shutdown
command
SUPER Allow user to use other X
administrative
operations such as
CHANGE MASTER TO,
KILL, PURGE BINARY
LOGS, SET GLOBAL,
and mysqladmin
command
TRIGGER Allow user to use X X X
TRIGGER operations.
UPDATE Allow user to use the X X X X
UPDATE statement
USAGE Equivalent to “no
privileges”
5
2.3 REVOKE PRIVILEGES
Perintah revoke merupakan kebalikan dari grant, artinya membuang hak askes
Syntaks umum:
REVOKE
privilegee [,privilege]..
ON [object_type] privilege_level
FROM user1 [, user2] ..;
Contoh:
REVOKE INSERT, UPDATE
ON <nama database>.*
FROM <nim>@localhost;
Contoh:
REVOKE ALL, GRANT OPTION
FROM <nim>@localhost;
6
Contoh:
1. Buat database dengan nama crm;
CREATE DATABASE crm;
Nama role memiliki kesamaan dengan user account, terdiri dari 2 bagian: name dan host
role_name@host_name
GRANT ALL
ON crm.*
TO crm_dev;
crm_read
GRANT SELECT
ON crm.*
TO crm_read;
crm_write
7
5. Set roles to user account
Misalkan pada tahap pengembangan aplikasi diperlukan user account developer, user
account dengan akses read only dan dua user account dengan akses read/write.
Create user
-- developer user
CREATE USER crm_dev1@localhost IDENTIFIED BY 'Secure$1782';
-- read access user
CREATE USER crm_read1@localhost IDENTIFIED BY 'Secure$5432';
-- read/write users
CREATE USER crm_write1@localhost IDENTIFIED BY 'Secure$9075';
CREATE USER crm_write2@localhost IDENTIFIED BY 'Secure$3452';
GRANT crm_dev
TO crm_dev1@localhost;
GRANT crm_read
TO crm_read1@localhost;
GRANT crm_read,
crm_write
TO crm_write1@localhost,
crm_write2@localhost;
Seperti yang dilihat, hasil diatas menampilkan granted role. Untuk menampilkan hak akses
yang merepresentasikan role, digunakan kalusa USING sebagai berikut:
SHOW GRANTS
FOR crm_write1@localhost
USING crm_write;
8
6. Setting default role
Sekarang coba lakukan koneksi ke server MySQL menggunakan user account crm_read1
>mysql -u crm_read1 -p
Enter password: ***********
mysql>USE crm;
Akan memunculkan pesan error, karena ketika memberikan grant roles pada user account,
tidak secara langusng membuat role menjadi aktif ketika user account terkonkesi ke server
database.
Otuputnya:
+----------------+
| current_role() |
+----------------+
| NONE |
+----------------+
1 row in set (0.00 sec)
Untuk menentukan role mana yang harus aktif setiap kali user account terhubung ke
database server, dapat menggunakan SET DEFAULT ROLE.
Misalnya: set default role untuk crm_read1@localhost.
SET DEFAULT ROLE ALL TO crm_read1@localhost;
>mysql -u crm_read1 -p
Enter password: ************
mysql> select current_role();
+----------------+
| current_role() |
+----------------+
| `crm_read`@`%` |
+----------------+
1 row in set (0.00 sec)
Dilakukan test untuk menguji hak akses daric rm_read dengan mengubah database ke crm
dan menjalankan perintah SELECT dan DELETE untuk mengujinya.
9
mysql> SELECT COUNT(*) FROM customers;
+----------+
| COUNT(*) |
+----------+
| 2|
+----------+
1 row in set (0.00 sec)
Hasil yang di tunjukkan pada MySQL bekerja sesuai dengan yang diharapkan. Ketika
mencoba menjalankan DELETE, MySQL akan ERROR karena user account crm_read1 hanya
mempunyai akses untuk read saja.
Misalnya, secara temporary membuat semua user hanya dapat read/write, dapat
menggunakan perintah:
REVOKE INSERT, UPDATE, DELETE
ON crm.*
FROM crm_write;
10
9. Remove Role
Untuk menghapus 1 atau 2 role, dapat menggunakan perintah berikut ini
DROP ROLE role_name[, role_name, …];
Seperti revoke, perintah drop role menghapus pula semua hak akses dari akun yang
dihapus.
Kemudian copy privileges dari account crm_dev1 ke account crm_dev2 dengan menggunakan
perintah:
GRANT crm_dev1@localhost
TO crm_dev2@localhost;
Untuk menjalankan perintah SHOW GRANTS diperlukan hak akses SELECT dari system database
MySQL, kecuali untuk menampilkan hak akses dan role pada user saat ini.
Dan
SHOW GRANTS FOR CURRENT_USER();
11
Menampilkan Hak Akses Untuk User Yang Diberikan (Previleges Granted for User)
Syntax:
SHOW GRANTS
FOR [useraccount]
Contoh:
SHOW GRANTS
FOR musk@localhost;
GRANT USAGE memiliki persamaan dengan tidak ada hak akses. Secara default ketika membuat
satu user baru, tidak mempunyai hak akses.
Grant semua hak akses pada tabel tertentu untuk user tertentu.
GRANT ALL
ON vehicles.*
TO musk@localhost;
Jalankan kembali perintah GRANT
SHOW GRANTS
FOR musk@localhost;
Menampilkan Hak Akses Untuk Suatu Role (Previleges Granted for Role)
Syntax:
SHOW GRANTS
FOR [useraccount]
Contoh:
Grant SELECT, INSERT, UPDATE dan DELETE pada database vehicles untuk account
writter@localhost:
GRANT
SELECT,
INSERT,
UPDATE,
DELETE
ON vehicles.*
TO writer@localhost;
12
SHOW GRANT dengan USING Clausa Example
Contoh:
1. Buat akun baru jame@localhost.
CREATE USER jame@localhost
IDENTIFIED BY ‘Secret@Pass1’;
13
2.6 DROP USER
Digunakan untuk menghapus daftar account user pada database MySQL.
Syntax:
DROP USER account_name;
Ketika menghapus user account yang tidak ada, secara langsung MySQL akan menampilkan
error.
Contoh:
Drop Single User Account
Hapus user account dbadmin@localhost menggunakan perintah DROP USER
mysql> drop user dbadmin@localhost;
Hasilnya:
+------------------+-----------+
| user | host |
+------------------+-----------+
| remote |% |
| alice | localhost |
| api | localhost |
| bob | localhost |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
8 rows in set (0.00 sec)
Hasilnya:
+------------------+-----------+
| user | host |
+------------------+-----------+
| alice | localhost |
| bob | localhost |
| mysql.infoschema | localhost |
| mysql.session | localhost |
14
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)
Ketika user account alice@localhost masih berkoneksi dengan MySQL server dan akan dihapus
(drop), secara umum user account dapat beroperasi normal sampai login berikutnya. Dalam
kasus ini harus ada informasi ke user account terlebih dahulu.
Ketika proses ini tidak dapat dilakukan, user session harus dihapus terlebih dahulu. Dapat
menggunakan SHOW PROCESSLIST tetapi harus login menggunakan user account root.
+----+-----------------+-----------------+--------+---------+-------+------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-----------------+-----------------+--------+---------+-------+------------------------+------------------+
| 4 | event_scheduler | localhost | NULL | Daemon | 31803 | Waiting on empty queue |
NULL |
| 20 | root | localhost:63851 | NULL | Query | 0 | starting | show processlist |
| 21 | alice | localhost:64060 | people | Sleep | 14 | | NULL |
+----+-----------------+-----------------+--------+---------+-------+------------------------+------------------+
User account ‘alice@localhost’ akan mengirimkan pesan error jika menjalankan query.
ERROR 2013 (HY000): Lost connection to MySQL server during query
15
2.7 CHANGE PASSWORD
Sebelum melakukan pergantian password pada account MySQL, perlu dipertibangkan beberapa
hal berikut ini :
1. User account mana yang ingin diubah passwordnya ?
2. Aplikasi apa saja yang menggunakan user account yang passwordnya dirubah? Jika
melakukan perubahan password tanpa merubah string koneksi aplikasi yang menggunakan
user account tersebut, aplikasi biasanya tidak akan terhubung dengan database.
UPDATE user
SET Password = PASSWORD(‘dolphin’)
WHERE user = ‘dbadmin’
host = ‘localhost’;
FLUSH PRIVILEGES;
Pada seri MySQL 5.7.6+ perlu menggunakan authentication_string pada kolom UPDATE,
sehingga menjadi
use mysql;
UPDATE user
SET authentication_string = PASSWORD(‘dolphin’)
WHERE user = ‘dbadmin’
host = ‘localhost’;
FLUSH PRIVILEGES;
Jika ingin melakukan perubahan password pada akun root MySQL, terlebih dahulu lakukan stop
pada MySQL server dan kemudian restart tanpa grant table validation.
16
2.8 SHOW USER
Digunakan untuk melihat daftar user pada database MySQL.
Outpunya:
+-----------+
| user |
+-----------+
| mysql.sys |
| mysqlxsys |
| root |
+-----------+
3 rows in set (0.00 sec)
Untuk mendapatkan informasi yang lebih mendetail dari tabel user, dapat menambahkan
perintah DESC.
DESC USER;
Untuk menampilkan informasi user seperti host, account_locking dan password expiration
status dapat menggunkan perintah berikut ini:
SELECT
user,
host,
account_locked,
password_expired
FROM
user;
17
Atau current_user();
mysql> SELECT current_user();
+----------------+
| current_user() |
+----------------+
| local@localhost |
+----------------+
1 row in set (0.00 sec)
SELECT
user,
host,
db,
command
FROM
information_schema.processlist;
+-------+-----------------+---------------+---------+
| user | host | db | command |
+-------+-----------------+---------------+---------+
| local | localhost:50591 | classicmodels | Sleep |
| root | localhost:50557 | NULL | Query |
+-------+-----------------+---------------+---------+
2 rows in set (0.00 sec)
18
2.9 RENAME USER
Digunakan untuk mengganti nama user account dari MySQL Server.
Sytnax umum:
RENAME USER old_user1
TO new_user1;
Contoh:
Rename User
RENAME USER john@localhost
TO doe@localhost
Cek Query nya untuk melihat user sudah diganti atau belum
SELECT host, user
FROM mysql.user
WHERE user = ‘doe’ and host = ‘localhost’
Rename Multiple User
RENAME USER
jill@localhost TO jing@localhost,
hill@localhost TO hank@localhost;
Muncul error
Error Corde: 1499. The user specified as a definer (‘fx’@’%’) does not exist
Untuk menyelesaikan problem ini, silakan lakukan pergantian sceara manual definer pada store
procedure GetPayments() dan lakukan save ulang.
19
2.10 LOCK USER ACCOUNTS
Digunakan untuk melakukan lock user account dari MySQL Server.
Syntax umum:
Menggunakan CREATE USER … ACCOUNT LOCK
CREATE USER account_name
IDENTIFIED BY ‘password’
ACCOUNT LOCK;
Jika mengghilangkan klausa ACCOUNT LOCK, statement CREATE USER membuat user baru tidak
dalam keadaan terkunci secara default.
MySQL menyimpan kondisi lock dalam kolom account_locked pada tabel system mysql.user.
Nilai Y dan N mewakili untuk lock and unlock.
Contoh:
20
3. Gunakan user account yang baru dibuat untuk konek dalam MySQL, dan akan didapatkan
error.
mysql -u david -p
Enter password: ******
mysql -u dolhine -p
Enter password: ******
SELECT
user, host, account_locked
FROM
mysql.user
WHERE
user = ‘dolphine’;
21
2.11 UNLOCK USER ACCOUNTS
Digunakan untuk melakukan unlock user account dari MySQL Server.
Syntax umum:
ALTER USER [IF EXISTS] account_name
ACCOUNT UNLOCK;
Contoh:
SELECT
user, host, account_locked
FROM
mysql.user
WHERE
user = ‘brad’ AND host=’localhost’;
3. Unlock user.
ALTER USER ‘brad’@’localhost’
ACCOUNT LOCK;
22
3 PENGGUNAAN COMMAND ADMINISTRASI
3.1 SHOW DATABASES
Untuk melihat daftar database yang ada di MySQl server digunakan perintah :
SHOW DATABASES;
Perintah SHOW SCHEMAS merupakan perintah yang sada SHOW DATABASES, ketika dijalankan
akan menghasilkan keluaran yang sama.
SHOW SCHEMAS;
Untuk melakukan query pada database tertentu, dapat ditambahkan klausa LIKE,
SHOW DATABASES LIKE pattern;
Contoh:
Contoh
SELECT schema_name
FROM information_schema.schemata;
23
Perintah SELECT mengembalikan database dengan nama ‘schema’ atau ‘s’.
SELECT schema_name
FROM information_schema.schemata
WHERE schema_name LIKE ‘%schema’ OR
Schema_name LIKE ‘%s’;
Akan menghasilkan:
+--------------------+
| SCHEMA_NAME |
+--------------------+
| information_schema |
| performance_schema |
| sys |
| classicmodels |
+--------------------+
4 rows in set (0.00 sec)
Outputnya:
24
Perintah SHOW TABLES digunakan untuk menampilkan table berdasarkan base table atau
table view. Untuk menampilkan table beserta dengan tipenya, dapat menggunakan perintah:
SHOW FULL TABLES;
Contoh:
Pada database classicmodels, buat view dengan nama contacts yang berisi firstname,
lastname dan phone dari table employees dan customers.
Seperti yang dilihat, pada keluaran tabel diatas, semua table diatas menjadi base table kecuali
tabel contacts yang merupakan view. Dalam beberapa kasus, database yang memiliki banyak
tabel untuk menampilkan semua tabel sekaligus mungkin akan menjadi tidak intuitif.
Untuk menampilkan tabel yang lebih spesifik, dapat ditambahkan operator LIKE atau
expression WHERE.
SHOW TABLES LIKE pattern;
25
Contoh:
Menampilkan semua tabel pada database classicmodels yang dimulai dengan huruf ‘p’.
Berikut ini contoh penggunaan klausa WHERE pada perintah SHOW TABLES untuk menampilkan
list view tabel pada database classicmodels.
Untuk melihat table dalam database yang tidak terhubung dengan lainnya dapat menambahkan
klausa FROM pada SHOW TABLES untuk menentukan database mana yang ini dilihat tabelnya.
Contoh:
Tampilkan tabel pada database yang dimulai dari kata ‘time’;
26
| time_zone_transition |
| time_zone_transition_type |
+---------------------------+
5 rows in set (0.00 sec)
Perintah diatas sama dengan ketika kita menggunakan IN sebagai pengganti FROM
SHOW TABLES IN mysql LIKE ‘time%’;
CATATAN : Hak akses base table atau view diperlukan untuk menjalankan SHOW TABLE, jika
tidak ada maka tidak akan menghasilkan apapun ketika perintah SHOW TABLE dijalankan.
Describe
Digunakan untuk menampilkan kolom dan kamus data dari tabel.
Contoh:
Dapat juga menggunakan perinah DESC untuk mempersingkat penulisan perintah DECRIBE
DESC orders;
Untuk menampilkan kolom yang lebih spesifik, misalnya kolom table yang berada di database
lain, dapat digunakan
SHOW COLUMNS FROM database_name.table_name;
Atau
SHOW COLUMNS FROM table_name IN database_name;
27
Contoh:
Tampilkan colom dari order table menggunakan SHOW COLUMNS
Hasil yang ditampilkan sama dengan ketika kita menggunakan DESC. Untuk mendapatkan
informasi yang lebih lengkap, dapat ditambahkan klausa FULL setelah SHOW COLUMNS
SHOW FULL COLUMNS FROM table_name;
Misalnya:
28
4 rows in set (0.01 sec)
Perintah SHOW COLUMNS memungkinkan untuk melalakukan filter coloums table dengan
menggunakan operator LIKE atau klausa WHERE
User account dengan hak akses PROCESS dapat melihat semua thread yang berjalan, jika tidak
hanya dapat melihat thread yang berhubungan dengan akun tersebut.
Contoh:
mysql>SHOW PROCESSLIST;
+----+-----------------------+-----------------+---------------+----------------+--------+---------------------------------+-----------------
-+
| Id | User | Host | db | Command | Time | State |
Info |
+----+------------- ---------+-----------------+---------------+----------------+--------+---------------------------------+-----------------
-+
| 4 | event_scheduler | localhost | NULL | Daemon | 2246 | Waiting on empty queue |
NULL |
| 14 | root | localhost:50924 | NULL | Query | 0 | starting | SHOW PROCESSLIST |
| 15 | car | localhost:50933 | classicmodels | Sleep | 2 | | NULL |
+----+-----------------+-----------------+---------------+---------+------+------------------------+------------------+
3 rows in set (0.00 sec)
29
Keterangan :
Id Id process client
User Username yang berhubungan dengan thread
Host Host dimana client terhubungan
DB Database default yang dipilih, jika tidak ada maka bernilai NULL
Command Tipe perintah
Time Waktu yang saat thread aktif hingga saat ini
State Status thread aktif atau sedang dijalankan
Info Pernyataan sedang dijalankan, atau NULL jika tidak menjalankan perintah
apapun. Jika tidak menggunakan kata kunci FULL dalam perintah SHOW
PROCESSLIST, maka hanya 100 karakter pertama yang akan ditampilkan dari
kolom info.
30
4 BACKUP DAN RESTORE MYSQL
4.1 BACKUP
Membuat back up dari satu atau lebih database dengan menggunakan mysqldumb.
Contoh :
mysqldump –user=root --password= Supe!rPass1 --result-file= c:\backup\all_databases.sql
31
Backup Struktur Database
Untuk melakukan backup struktur database saja, tambahkan pilihan --nodata
mysqldump –user=<username> --password=<password> --result-
file=<path_to_backup_file> --nodata –databases <database_name>
Perintah diatas akan menghasilkan dump file SQL yang digunakan untuk membuat ulang
struktur database. Dump file tidak berisi perintah INSERT.
Perintah diatas akan menghasilkan dump file SQL yang digunakan untuk mengunci table dan
memasukkan data kedalam tabel. Dump file tidak berisi perintah CREATE TABLE.
4.2 RESTORE
Digunakan untuk melakukan restore file SQL dump mydb.sql kedalam basis data. Untuk
melakukan restore data, digunakan perintah RESTORE
Syntax:
mysql>source <source_file_dump.sql>
Contoh:
mysql>source c:\backup\mysql.db
Perintah SOURCE mengembalikan informasi detail saat proses restore termasuk warning dan
errors.
32
5 MAINTENANCE DATABASE DAN TABEL PADA MYSQL
MySQL menyediakan beberapa perintah yang digunakan untuk melakukan pemeliharaan
(mintenance) database secara efektif. Perintah tersebut digunakan untuk melakukan analisa,
optimasi, pengecekan dan memperbaiki table dalam database.
Jika tidak ada perubahan sejak perintah ANALYZE TABLE dijalankan, MySQL tidak akan
mengalisis tabel lagi. Ketika perintah ANALYZE TABLE kembali dijalankan :
MySQL memberi Anda pernyataan yang memungkinkan Anda untuk mengoptimalkan tabel
untuk menghindari masalah defragmenting ini. Berikut ini menggambarkan cara
mengoptimalkan tabel:
Perintah OPTIMIZE di jalankan secara berulang pada tabel yang sering diupdate berkala. Contoh
ketika akan melakukan optimasi pengurutan pada table dengan melakukan defrag, dapat
dilakukan dengan cara:
33
OPTIMIZE TABLE orders;
MySQL memungkinkan untuk melakukan pemeriksaan integritas pada tabal database dengan
menggunakan CHECK TABLE.
Perintah CHECK TABLE melakukan pengecekan baik pada table maupun pada index nya. CHECK
TABLE juga dapat melakukan pecekan pada orders tabel.
CHECK TABLE hanya mendeketksi permasalahan pada table database tetapi tidak dapat
melakukan perbaikan. Untuk melakukan perbaikan pada table, dapat digunakan perintah
REPAIR TABLE.
REFERENSI:
MySQL Tutorial Administrasi: http://www.mysqltutorial.org/mysql-administration.aspx
34
6 LATIHAN
1. Buatlah user <nickname> dengan password ‘ukdw’.
5. Buat database baru dengan nama “Produksi”, kemudian tambahkan tabel berikut ini
35
Tambahkan datanya
• prod_read
• prod_write
36
d. GRANT akses untuk masing-masing role dan user account
37