0% menganggap dokumen ini bermanfaat (0 suara)
68 tayangan

Modul 13 - MySQLAdministration

Dokumen tersebut merupakan modul praktikum tentang pengelolaan basis data MySQL. Modul tersebut membahas tujuan praktikum yang meliputi pengelolaan database, tabel, user, dan fungsi administrasi MySQL serta backup dan restore. Modul tersebut juga membahas alat dan bahan, waktu, serta materi dan latihan praktikum yang meliputi pengelolaan server MySQL, pengaturan user, hak akses, dan pengelolaan role.

Diunggah oleh

Front deeP
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
68 tayangan

Modul 13 - MySQLAdministration

Dokumen tersebut merupakan modul praktikum tentang pengelolaan basis data MySQL. Modul tersebut membahas tujuan praktikum yang meliputi pengelolaan database, tabel, user, dan fungsi administrasi MySQL serta backup dan restore. Modul tersebut juga membahas alat dan bahan, waktu, serta materi dan latihan praktikum yang meliputi pengelolaan server MySQL, pengaturan user, hak akses, dan pengelolaan role.

Diunggah oleh

Front deeP
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 37

MODUL PRAKTIKUM BASIS DATA - “MySQL Adminstration”

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

ALAT DAN BAHAN:


1. Modul Praktikum
2. Komputer
3. Software MySQL, PHPMyAdmin atau HeidiSQL
4. Viewer LCD

WAKTU: 150 MENIT


AKTIVITAS PRAKTIKUM
• 10 menit pendahuluan dan persiapan alat
• 120 menit materi dan latihan
• 10 menit penutup

MATERI DAN LATIHAN PRAKTIKUM


CATATAN : BEBERAPA SINTAKS HANYA BISA BERJALAN DI MARIADB

1 START DAN STOP MYSQL SERVER


Untuk menjalankan MySQL yang telah terinstall di komputer berbasis Windows terdapat
beberapa cara:
a. Jika menggunakan XAMPP maka hanya perlu menjalankan XAMPP dan start MySQL Service

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!

Untuk mematikan service MySQL terdapat beberapa cara:

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

c. Maka mysqld akan mati (off).

2 PENGATURAN USER, ROLE, DAN HAK AKSES


2.1 PEMBUATAN USER
Untuk membuat user, gunakan perintah dasar berikut:
CREATE USER [IF NOT EXISTS] ‘account_name’
IDENTIFIED BY 'password';

Account_name memiliki format nama_user@host


Nama_user tidak boleh memiliki spasi
Host berupa host aktif dan valid, seperti localhost, IP address tertentu atau URL

Contoh:
CREATE USER ‘bob@localhost’ IDENTIFIED by ‘Secure1Pass!’;

Menampilkan User pada MySQL


Cara menampilkan dilakukan dengan perintah:
SELECT user FROM mysql.user;

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.

Cara memberikan akses:

GRANT privilege [,privilege],…


ON privilege_level
TO account_name;

Contoh:

GRANT SELECT
ON <nama database>.<nama tabel>
TO <nim>@localhost;

Atau

GRANT INSERT, UPDATE, DELETE


ON <nama database>.<nama tabel>
TO <nim>@localhost;

Priveledge level pada MySQL adalah:

Contoh:
GRANT INSERT
ON <nama database>.*
TO <nim>@localhost;

Untuk memberikan akses seluruhnya pada seluruh database dan tabel:

GRANT ALL
ON *.*
TO <nim>@localhost;

Berikut adalah daftar lengkap level akses database:

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;

Untuk merevoke semua hak akses:


REVOKE
ALL [PRIVILEGES],
GRANT OPTION
FROM user1 [, user2];

Contoh:
REVOKE ALL, GRANT OPTION
FROM <nim>@localhost;

2.4 MANAGE ROLES


MySQL menyediakan object yang disebut role. Role merupakan kumpulan hak akses (privileges).
Seperti user accounts, hak akses untuk role dapat diberikan (grant) atau dicabut (revoke).

Gambar 1 Ilustrasi Roles pada MySQL

Secara umum, ada beberapa langkah untuk melalkukan manage roles.


1. Buat role baru.
2. Grant Privileges pada role tersebut.
3. Grant role tersebut pada user.

6
Contoh:
1. Buat database dengan nama crm;
CREATE DATABASE crm;

2. Tambahkan tabel customer dan didalam crm database

CREATE TABLE customers(


id INT PRIMARY KEY AUTO_INCREMENT,
first_name VARCHAR(255) NOT NULL,
last_name VARCHAR(255) NOT NULL,
phone VARCHAR(15) NOT NULL,
email VARCHAR(255)
);
Tambahkan data

INSERT INTO customers(first_name,last_name,phone,email)


VALUES('John','Doe','(408)-987-7654','[email protected]'),
('Lily','Bush','(408)-987-7985','[email protected]');

3. Buat role baru


CREATE ROLE
crm_dev,
crm_read,
crm_write;

Nama role memiliki kesamaan dengan user account, terdiri dari 2 bagian: name dan host
role_name@host_name

4. Grant Privileges to role


crm_dev

GRANT ALL
ON crm.*
TO crm_dev;

crm_read

GRANT SELECT
ON crm.*
TO crm_read;

crm_write

GRANT INSERT, UPDATE, DELETE


ON crm.*
TO 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';

Untuk melakukan set role, digunakan perintah GRANT


Role crm_dev kepada user account crm_dev1@localhost:

GRANT crm_dev
TO crm_dev1@localhost;

Role crm_read kepada user crm_read1@localhost:

GRANT crm_read
TO crm_read1@localhost;

Role crm_read dan crm_write kepada user crm_write1@localhost dan


crm_write2@localhost:

GRANT crm_read,
crm_write
TO crm_write1@localhost,
crm_write2@localhost;

Untuk melakukan verifikasi role menggunakan perintah SHOW GRANTS


SHOW GRANTS FOR crm_dev1@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.

Untuk melakukan pengecekan, dapat digunakan


SELECT current_role();

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;

Sekarang, jika melakukan koneksi ke database MySQL menggunakan user account


cm_read1 dan meminta akses ke CURRENT_ROLE().

>mysql -u crm_read1 -p
Enter password: ************
mysql> select current_role();

Akan menampilkan default roles untuk crm_read1

+----------------+
| 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.

mysql> use crm;


Database changed

9
mysql> SELECT COUNT(*) FROM customers;
+----------+
| COUNT(*) |
+----------+
| 2|
+----------+
1 row in set (0.00 sec)

mysql> DELETE FROM customers;


ERROR 1142 (42000): DELETE command denied to user 'crm_read1'@'localhost' for
table 'customers'

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.

7. Setting Active role


Mengatur role aktif user account berdasarkan privilege dan role yang di berikan.
Mengaktifkan role to NONE, tidak ada active role:
SET ROLE NONE;

Set active role menjadi all granted role:


SET ROLE ALL;

Set active role to default role:


SET ROLE DEFAULT;

Untuk mengaktifkan named role:


SET ROLE
granted_role_1
[, granted_role-2,…]

8. Revoke Privilege dari Role


Untuk melakukan revoke pada role tertentu, digunakan perintah REVOKE. Perintah REVOKE
berpengaruh tidak hanya pada role tetapi juga pada account yang berasosiasi.

Misalnya, secara temporary membuat semua user hanya dapat read/write, dapat
menggunakan perintah:
REVOKE INSERT, UPDATE, DELETE
ON crm.*
FROM crm_write;

Untuk mengembalikan hak akses, perlu dilakukan re-grant sebagai berikut:


GRANT INSERT, UPDATE, DELETE
ON crm.*
FOR 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.

Misalnya: menghapus role daric rm_read, crm_write dengan menggunakan perintah:


DROP ROLE crm_read, crm_write;

10. Copy Privileges dari satu user ke user lain


Ketika dibutuhkan account untuk developer lain pada crm database, maka langkah pertama
buat account baru:

CREATE USER crm_dev2@localhost


IDENTIFIED BY 'Secure$6275';

Kemudian copy privileges dari account crm_dev1 ke account crm_dev2 dengan menggunakan
perintah:
GRANT crm_dev1@localhost
TO crm_dev2@localhost;

2.5 SHOW GRANT PRIVILEGES


Digunakan untuk menampilkan hak ases dan role yang diberikan pada user account.
Syntax:
SHOW GRANTS
[FOR {user | role}
[USING role [, role] …]]

Untuk menjalankan perintah SHOW GRANTS diperlukan hak akses SELECT dari system database
MySQL, kecuali untuk menampilkan hak akses dan role pada user saat ini.

Menampilkan Hak Akses Yang Diberikan Pada User Saat Ini


(Previleges Granted for Current User)
Syntax:
SHOW GRANTS;

Sama dengan perintah


SHOW GRANTS FOR CURRENT_USER;

Dan
SHOW GRANTS FOR CURRENT_USER();

Baik CURRENT_USER dan CURRENT_USER() akan menampilkan user saat ini.

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;

Tampilkan hak askes yang diberikan (granted) untuk role writter@localhost:


SHOW GRANTS
FOR [useraccount]

12
SHOW GRANT dengan USING Clausa Example
Contoh:
1. Buat akun baru jame@localhost.
CREATE USER jame@localhost
IDENTIFIED BY ‘Secret@Pass1’;

2. Grant EXECUTE privilege pada jame@localhost.


GRANT EXECUTE
ON vehicles.*
TO jame@localhsot;

3. Grant role writer@localhost pada jame@localhost.


GRANT writer@localhost
TO jame@localhost;

4. Tampilkan privilege grant pada user jame@localhost.


SHOW GRANTS
FOR jame@localhost;

5. Gunakan USING pada SHOW GRANTS


SHOW GRANTS
FOR jame@localhost
USING writer@localhost;

13
2.6 DROP USER
Digunakan untuk menghapus daftar account user pada database MySQL.
Syntax:
DROP USER account_name;

Untuk menghapus multiple user dapat menggunakan:


DROP USER account_name [,account_name2]...;

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;

Cek datanya dengan melakukan SELECT pada table mysql.user


mysql> select user, host from mysql.user;

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)

Drop Multiple User Account


Hapus user account api@localhost dan remote.
mysql> drop user api@localhost, remote;

Cek datanya dengan melakukan SELECT pada table mysql.user


mysql> select user, host from mysql.user;

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)

Drop Connected User Account


Lakukan login dengan user account alice@localhost:
mysql -u alice -p
Enter password: ************

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 memiliki koneksi id 21. Terminate processnya dengan


menggunakan perintah KILL
KILL 21;

User account ‘alice@localhost’ akan mengirimkan pesan error jika menjalankan query.
ERROR 2013 (HY000): Lost connection to MySQL server during query

Langkah terakhir tinggal menjalankan perintah DROP USER


DROP USER alice@localhost;

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.

Change Password Menggunakan UPDATE


Contoh: melakukan perubahan password untuk user ‘dbadmin’ menjadi ‘dolphin’ untuk
database yang terkoneksi dalam localhost
use mysql;

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;

Change Password Menggunakan SET


Contoh: melakukan perubahan password untuk user ‘dbadmin’.
SET PASSWORD FOR ‘dbadmin’@’localhost’ = PASSWORD(‘bigshark’)

Change Password Menggunakan ALTER USER


Contoh: melakukan perubahan password untuk user ‘dbadmin’ menjadi ‘littlewhale’
ALTER USER dbadmin@localhost IDENTIFIED BY ‘littlewhale’;

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.

Show User: List All Users


Contoh: menampilkan semua user pada database.
SELECT
user
FROM
mysql.user;

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;

Show Current User


Untuk mendapatkan informasi mengenai current user dapat menggunakan perintah user():
mysql> SELECT user();
+-----------------+
| user() |
+-----------------+
| local@localhost |
+-----------------+
1 row in set (0.00 sec)

17
Atau current_user();
mysql> SELECT current_user();
+----------------+
| current_user() |
+----------------+
| local@localhost |
+----------------+
1 row in set (0.00 sec)

Show Current Logged User


Untuk menampilkan current logged user, dapat menggunakan perintah berikut:

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;

Untuk mengganti multipe user


RENAME USER
old_user1 TO new_user1,
old_user2 TO new_user2,
….
RENAME USER memindahkan semua hak akses dari user lama ke user baru.

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;

Cek query untuk verifikasi data.


SELECT host, user
FROM mysql.user
WHERE user IN (‘jin’,’hank’);

Rename User Account Berasosiasi dengan Store Procedure


RENAME USER fx to fc;

Panggil Procedurenya lagi


CALL GetPayments();

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.

Dapat juga menggunakan ALTER USER … ACCOUNT LOCK


ALTER USER account_name
IDENTIFIED BY ‘password’
ACCOUNT LOCK;

MySQL menyimpan kondisi lock dalam kolom account_locked pada tabel system mysql.user.
Nilai Y dan N mewakili untuk lock and unlock.

Gambar 2 Ilustrasi Unlock User Account

Contoh:

Account Lock Untuk Lock Account Baru


1. Buat user account baru.
CREATE USER david@localhost
IDENTIFIED BY ‘Secret!Pas1’
ACCOUNT LOCK;

2. Tampilkan user account dan statusnya.


SELECT
user, host, account_locked
FROM
mysql.user
WHERE
user = ‘david’ AND host=’localhost’;

20
3. Gunakan user account yang baru dibuat untuk konek dalam MySQL, dan akan didapatkan
error.
mysql -u david -p
Enter password: ******

Maka didapatkan error message:


ERROR 3118 (HY000): Access deined for user ‘david@localhost’. Account is locked.

Account Lock Untuk Lock Existing User


1. Buat akun baru

CREATE USER dolphine@localhost


IDENTIFIED BY ‘Secret!Pas1’;

2. Gunakan user account yang baru untuk melakukan koneksi

mysql -u dolhine -p
Enter password: ******

3. ALTER TABLE LOCK ACCOUNT untuk lock user account.

SELECT
user, host, account_locked
FROM
mysql.user
WHERE
user = ‘dolphine’;

Untuk menampilkan jumlah locked accout, dapat digunakan perintah:

SHOW GLOBAL STATUS


LIKE ‘Locked_connects’;

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;

Untuk UNLOCK multiple account

ALTER USER [IF EXISTS]


account_name1
[, account_name2, …]
ACCOUNT UNLOCK;

Contoh:

1. Buat user account baru dengan status lock.


CREATE USER brad@localhost
IDENTIFIED BY ‘Secret!Pas1’
AUTO LOCK;

2. Tampilkan status dari account.

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;

Secara langsung akan ditampilkan daftar database, misalnya:

mysql> SHOW DATABASES;


+--------------------+
| Database |
+--------------------+
| classicmodels |
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
6 rows in set (0.00 sec)

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:

SHOW DATABASES LIKE '%schema';


+--------------------+
| Database (%schema) |
+--------------------+
| information_schema |
| performance_schema |
+--------------------+
2 rows in set (0.00 sec)

Catatan : ketika memulai MySQL server dengan –skip-show-database, penggunaan SHOW


DATABASE tidak dimungkinkan kecuali memiliki hak akses SHOW DATABASES

Query Database Dari Information_Schema


Jika dalam kondisi klausa LIKE tidak cukup, dapat dilakukan query database secara langsung dari
table schemata pada database information_schema

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)

3.2 SHOW TABLES


Digunakan untuk melihat daftar tabel-tabel yang ada di suatu database. Perintah yang
digunakan:
SHOW TABLES;

Menampilkan Datar Tabel Dari Database


Menampilkan daftar tabel yang ada dari database tertentu, misalnya data base classicmodels.
>mysql -u root
mysql> use classicmodels;
Database changed
mysql>
> show tables;

Outputnya:

> show tables;


+-------------------------+
| Tables_in_classicmodels |
+-------------------------+
| customers |
| employees |
| offices |
| orderdetails |
| orders |
| payments |
| productlines |
| products |
+-------------------------+
8 rows in set (0.00 sec)

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.

CREATE VIEW contacts


AS
SELECT lastName, firstName, extension as phone
FROM employees
UNION
SELECT contactFirstName, contactLastName, phone
FROM customers;

Ketika kita menjalakan SHOW FULL TABLES, maka akan didapatkan:

> SHOW FULL TABLES


+-------------------------+------------+
| Tables_in_classicmodels | Table_type |
+-------------------------+------------+
| contacts | VIEW |
| customers | BASE TABLE |
| employees | BASE TABLE |
| offices | BASE TABLE |
| orderdetails | BASE TABLE |
| orders | BASE TABLE |
| payments | BASE TABLE |
| productlines | BASE TABLE |
| products | BASE TABLE |
+-------------------------+------------+
9 rows in set (0.00 sec)

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;

SHOW TABLES WHERE expression;

25
Contoh:
Menampilkan semua tabel pada database classicmodels yang dimulai dengan huruf ‘p’.

> SHOW TABLES LIKE 'p%';


+------------------------------+
| Tables_in_classicmodels (p%) |
+------------------------------+
| payments |
| productlines |
| products |
+------------------------------+
3 rows in set (0.00 sec)

Menampilkan semuat table yang berakhiran string ‘es’.

> SHOW TABLES LIKE '%es';


+-------------------------------+
| Tables_in_classicmodels (%es) |
+-------------------------------+
| employees |
| offices |
| productlines |
+-------------------------------+
3 rows in set (0.00 sec)

Berikut ini contoh penggunaan klausa WHERE pada perintah SHOW TABLES untuk menampilkan
list view tabel pada database classicmodels.

> SHOW FULL TABLES WHERE table_type = 'VIEW';


+-------------------------+------------+
| Tables_in_classicmodels | Table_type |
+-------------------------+------------+
| contacts | VIEW |
+-------------------------+------------+
1 row in set (0.00 sec)

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’;

> SHOW TABLES FROM mysql LIKE 'time%';


+---------------------------+
| Tables_in_mysql (time%) |
+---------------------------+
| time_zone |
| time_zone_leap_second |
| time_zone_name |

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.

3.3 SHOW COLUMNS


Digunakan untuk menampilkan kolom dari table dengan menggunakan perintah DESCRIBE dan
MySQL SHOW COLUMNS.

Describe
Digunakan untuk menampilkan kolom dan kamus data dari tabel.
Contoh:

mysql> DESCRIBE orders;


+----------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+-------------+------+-----+---------+-------+
| orderNumber | int(11) | NO | PRI | NULL | |
| orderDate | date | NO | | NULL | |
| requiredDate | date | NO | | NULL | |
| shippedDate | date | YES | | NULL | |
| status | varchar(15) | NO | | NULL | |
| comments | text | YES | | NULL | |
| customerNumber | int(11) | NO | MUL | NULL | |
+----------------+-------------+------+-----+---------+-------+
7 rows in set (0.01 sec)

Dapat juga menggunakan perinah DESC untuk mempersingkat penulisan perintah DECRIBE
DESC orders;

Perintah SHOW COLUMNS


Digunakan untuk menampilkan list kolom pada table.
Syntax:
SHOW COLUMNS FROM table_name;

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

SHOW COLUMNS FROM orders;

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:

mysql> SHOW FULL COLUMNS FROM payments \G;


*************************** 1. row ***************************
Field: customerNumber
Type: int(11)
Collation: NULL
Null: NO
Key: PRI
Default: NULL
Extra:
Privileges: select,insert,update,references
Comment:
*************************** 2. row ***************************
Field: checkNumber
Type: varchar(50)
Collation: latin1_swedish_ci
Null: NO
Key: PRI
Default: NULL
Extra:
Privileges: select,insert,update,references
Comment:
*************************** 3. row ***************************
Field: paymentDate
Type: date
Collation: NULL
Null: NO
Key:
Default: NULL
Extra:
Privileges: select,insert,update,references
Comment:
*************************** 4. row ***************************
Field: amount
Type: decimal(10,2)
Collation: NULL
Null: NO
Key:
Default: NULL
Extra:
Privileges: select,insert,update,references
Comment:

28
4 rows in set (0.01 sec)

Perintah SHOW COLUMNS memungkinkan untuk ditambahkan collation, privileges dan


comment ada hasil.

Perintah SHOW COLUMNS memungkinkan untuk melalakukan filter coloums table dengan
menggunakan operator LIKE atau klausa WHERE

SHOW COLUMNS FROM table_name LIKE pattern;

SHOW COLUMNS FROM table_name WHERE expression;

Contoh Dengan Operator LIKE

mysql> SHOW COLUMNS FROM payments LIKE 'c%';


+----------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+-------------+------+-----+---------+-------+
| customerNumber | int(11) | NO | PRI | NULL | |
| checkNumber | varchar(50) | NO | PRI | NULL | |
+----------------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

3.4 SHOW PROCESSLIST


Digunakan untuk menampilkan thread yang sedang berjalan. Model koneksi database yang
menggunakan client server, mengakibatkan terjadinya error “too many connections” yang
dikembalikan oleh MySQL Server. Untuk mencari tahu penyebabnya dapat digunakan perintah
SHOW PROCESSLIST. Untuk mematikan thread yang idle dapat menggunakan perintah KILL.
Sintaks SHOW PROCESSLIST secara umum

SHOW [FULL] PROCESSLIST;

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.

Backup Single Database


Syntax:
mysqldump --user=<username> --password=<password> --result-
file=<path_to_backup_file> -- database <database_name>

Contoh : melakukan backup database classicmodels dan meletakknanya pada file


c:\backup\classicmodels.sql789
mysqldump –user=root –password=Supe!rPass1 –result-file=c:\backup\classicmodels.sql –
databases classicmodels

Backup Multiple Database


Untuk melakukan backup pada multiple database, ditambahkan daftar dari database setelah
perintah –database
Syntax:

mysqldump –user=<username> --password=<password> --result-


file=<path_to_backup_file> --databases <dbname1>[,<dbname2>, …]

Contoh : backup database classiscmodels dan world:


mysqldump –user=root --password= Supe!rPass1 --result-file=
c:\backup\classicmodels_world.sql --databases classicmodels world

Backup Seluruh Database


Untuk melakukan backup semua database pada MySQL Server, digunakan perintah:

mysqldump –user=<username> --password=<password> --result-


file=<path_to_backup_file> --all-databases

Contoh :
mysqldump –user=root --password= Supe!rPass1 --result-file= c:\backup\all_databases.sql

Backup Table Tertentu dari Database


Untuk melakukan backup table tertentu dari database, digunakan perintah:
mysqldump –user=<username> --password=<password> --result-
file=<path_to_backup_file> <database_name> <table_name>

atau dapat langsung disebutkan secara berurutan, seperti :


mysqldump –user=<username> --password=<password> --result-
file=<path_to_backup_file> <database_name> <table1> <table2> <table3>

Contoh : Backup table employees dari database classicmodels


mysqldump –user=root --password= Supe!rPass1 --result-file= c:\backup\employees.sql
classicmodels employees

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.

Contoh: backup struktur database dari database classicmodels.


mysqldump –user=root --password= Supe!rPass1 --result-file= c:\backup\classicmodels-
ddl.sql --nodata --databases classicmodels

Backup hanya Data saja dari Database


Untuk melakukan backup data saja dari database, tambahkan pilihan –no-create-info.
mysqldump –user=<username> --password=<password> --result-
file=<path_to_backup_file> --no-create-info --databases <database_name>

Perintah diatas akan menghasilkan dump file SQL yang digunakan untuk mengunci table dan
memasukkan data kedalam tabel. Dump file tidak berisi perintah CREATE TABLE.

Contoh : backup data dari database classicmodels.


mysqldump –user=root --password= Supe!rPass1 --result-file= c:\backup\classicmodels-
data.sql –no-create-info nodata --databases classicmodels

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.

5.1 ANALISA TABEL (ANALYZE)


Optimasi query MySQL merupakan komponen penting dari server MySQL yang melakukan
pengaturan dan perencanaan eksekusi query yang optimal. Untuk query tertentu, proses
optimasi query menggunakan distribusi kunci yang disimpan dan factor-faktor lain untuk
memutuskan urutan table mana yang digabung dan index mana yang digunakan pada tabel
tertentu.
Namum, kunci distribusi terkadang tidak akurat, misalnya ketika anda melakukan perubahan
banyak data dalam tabel seperti insert, delete atau update. Jika distribusi kunci tidak akurat,
proses optimasi query memilih rencana pelaksanaan query yang buruk sehingga akan
menyebabkan masalah kinerja yang parah.
Untuk menyelesaikan permasalah ini, anda dapat menjalankan perintah ANALYZE TABLE pada
table tertentu misalnya perintah pada analyze table payments pada database sample.

ANALYZE TABLE payments;

Jika tidak ada perubahan sejak perintah ANALYZE TABLE dijalankan, MySQL tidak akan
mengalisis tabel lagi. Ketika perintah ANALYZE TABLE kembali dijalankan :

ANALYZE TABLE payments;

Table sudah up to date.

5.2 OPTIMASI TABEL (OPTIMIZE)


Saat bekerja dengan database, Anda melakukan banyak perubahan seperti menyisipkan,
memperbarui, dan menghapus data dalam tabel yang dapat menyebabkan penyimpanan fisik
tabel terfragmentasi. Akibatnya, kinerja server database terdegradasi.

MySQL memberi Anda pernyataan yang memungkinkan Anda untuk mengoptimalkan tabel
untuk menghindari masalah defragmenting ini. Berikut ini menggambarkan cara
mengoptimalkan tabel:

OPTIMIZE TABLE table_name;

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;

5.3 PENGECEKAN TABEL (CHECKING)


Sesuatu yang salah dapat saja terjadi pada server basis data, misalnya server dimatikan secara
tidak terduga, terjadi kesalahan saat menulis data kedalam harddisk, dll. Kondisi tersebut dapat
menyababkan basis data beroperasi secara salah dan dalam kasus terburuk dapat
menyababkan system crash.

MySQL memungkinkan untuk melakukan pemeriksaan integritas pada tabal database dengan
menggunakan CHECK TABLE.

CHECK TABLE table_name;

Perintah CHECK TABLE melakukan pengecekan baik pada table maupun pada index nya. CHECK
TABLE juga dapat melakukan pecekan pada orders tabel.

CHECK TABLE orders;

CHECK TABLE hanya mendeketksi permasalahan pada table database tetapi tidak dapat
melakukan perbaikan. Untuk melakukan perbaikan pada table, dapat digunakan perintah
REPAIR TABLE.

5.4 PERBAIKAN TABEL (REPAIR)


Perintah REPAIR TABLE digunakan untuk melakukan perbaikan error yang terjadi pada table.
MYSQL tidak menjamin perintah REPAIR TABLE dapat memperbaiki semua error yang terjadi.

Perintah pada REPAIR TABLE


REPAIR TABLE table name;

Contoh penggunaan REPAIR TABLE


REPAIR TABLE employees;

REFERENSI:
MySQL Tutorial Administrasi: http://www.mysqltutorial.org/mysql-administration.aspx

34
6 LATIHAN
1. Buatlah user <nickname> dengan password ‘ukdw’.

2. Tampilkan apakah user anda sudah ada di MySQL!

3. Silahkan login ke MySQL menggunakan user anda! Gunakan mysql -u <nim> -p


a. Tampilkan database yang ada

b. Buat 1 database baru (apakah bisa)?

c. Buat 1 tabel baru (apakah bisa)?

d. Tambahkan 1 record baru ke tabel tersebut (apakah bisa)?

4. Silakan login menggunkan root!


a. Tambahkan semua hak akses (privilege) kedalam user account baru yang telah anda
buat (clue : Gunakan GRANT ALL)

b. Tampilkan semua hak akses (privileges) pada user account <nickname>

5. Buat database baru dengan nama “Produksi”, kemudian tambahkan tabel berikut ini

CREATE TABLE pelanggan(


id INT PRIMARY KEY AUTO_INCREMENT,
first_name VARCHAR(255) NOT NULL,
last_name VARCHAR(255) NOT NULL,
phone VARCHAR(15) NOT NULL,
email VARCHAR(255)
);

35
Tambahkan datanya

INSERT INTO pelanggan(first_name,last_name,phone,email)


VALUES('John','Doe','(408)-987-7654','[email protected]'),
('Lily','Bush','(408)-987-7985','lily.bush@ armagedon.com ');

a. Buat role baru pada data database tersebut:


• prod_dev,

• prod_read

• prod_write

b. Tambahkan privilege pada masing-masing role


• prod_dev, -> select, insert, update, delete

• prod_read -> select

• prod_write -> insert, update, delete

c. Tambahkan user account baru sesuai dengan peruntukannya masing-masing, dan


jangan lupa berikan hak aksesnya.

Username Password Role


<nickname>_dev1
Developer
<nickname>_dev2
<nickname>_read1
dutawacana Read access
<nickname>_read2
<nickname>_write1
Read write users
<nickname>_write2

36
d. GRANT akses untuk masing-masing role dan user account

6. a. Revoke hak akses <nickname>_read2

b. Remove user <nickname>_write1

7. Rename <nickname>_dev1 dan <nickname>_dev 2 menjadi <nickname>_produksi1 dan


<nickname>_produksi2.

8. a. Backup struktur database produksi dan simpan dengan name produksi_stuktur_db.sql

b. Backup keseluruhan database produksi dan simpan dengan name produksi_db.sql

37

Anda mungkin juga menyukai