Option Defaults, Options Expecting Values, dan tanda =


Dengan konvensi, bentuk panjang option yang memberikan nilai ditulis dengan tanda sama dengan (=), seperti ini:

shell> mysql --host=tonfisk --user=jon

Untuk pilihan yang membutuhkan nilai (yaitu, tidak memiliki nilai default), tanda sama dengan tidak diperlukan, sehingga berikut juga berlaku:

shell> mysql --host tonfisk --user jon

Dalam kedua kasus, klien mysql mencoba untuk terhubung ke server MySQL yang berjalan pada host bernama “tonfisk” menggunakan akun dengan nama pengguna “jon”.

Karena perilaku ini, masalah kadang-kadang bisa muncul ketika ada nilai yang diberikan untuk sebuah opsi yang mengharapkan satu. Perhatikan contoh berikut ini, di mana pengguna terhubung ke server MySQL yang berjalan pada host tonfisk sebagai pengguna jon:

shell> mysql --host 85.224.35.45 --user jon
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.5.24 Source distribution
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.
mysql> SELECT CURRENT_USER();
+—————————-+
| CURRENT_USER() |
+—————————-+
| jon@%                        |
+—————————-+
1 row in set (0.00 sec)

Menghilangkan nilai yang diperlukan untuk salah satu opsi ini menghasilkan kesalahan, seperti yang ditunjukkan di sini:

shell> mysql --host 85.224.35.45 --user
MYSQL: OPTION ‘--USER’ REQUIRES AN ARGUMENT

Dalam kasus ini, mysql tidak dapat menemukan nilai yang mengikuti option --user karena tidak ada yang datang setelah itu pada command line. Namun, jika anda menghilangkan nilai untuk option yang bukan option terakhir yang digunakan, anda mendapatkan kesalahan yang berbeda yang tidak anda harapkan:

shell> mysql --host --user jon
ERROR 2005 (HY000): Unknown MySQL server host ‘--user’ (1)

Karena mysql mengasumsikan bahwa setiap string yang mengikuti --host pada command line adalah nama host, --host --user ditafsirkan sebagai --host = --user, dan klien mencoba untuk terhubung ke server MySQL yang berjalan pada sebuah host bernama “--user”.

Options memiliki nilai default selalu memerlukan tanda sama dengan ketika menetapkan nilai, gagal untuk melakukannya menyebabkan kesalahan. Sebagai contoh, server MySQL option --log-error memiliki nilai default host_name.err, di mana host_name adalah nama host di mana MySQL sedang berjalan. Asumsikan bahwa anda menjalankan MySQL pada komputer yang memiliki nama host adalah “tonfisk”, dan mempertimbangkan pemanggilan mysqld_safe berikut:

shell> mysqld_safe &
[1] 11699
shell> 080112 12:53:40 mysqld_safe Logging to ‘/usr/local/mysql/var/tonfisk.err’.
080112 12:53:40 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
shell>

Setelah mematikan server, restart sebagai berikut:

shell> mysqld_safe --log-error &
[1] 11699
shell> 080112 12:53:40 mysqld_safe Logging to ‘/usr/local/mysql/var/tonfisk.err’.
080112 12:53:40 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
shell>

Server mencoba untuk mulai menggunakan /usr/local/mysql/var/tonfisk.err sebagai error log, tapi kemudian ditutup. Meneliti beberapa baris terakhir dari file ini menunjukkan alasannya:

shell> tail /usr/local/mysql/var/tonfisk.err
080111 22:53:32 InnoDB: Started; log sequence number 0 46409
/USR/LOCAL/MYSQL/LIBEXEC/MYSQLD: TOO MANY ARGUMENTS (FIRST EXTRA IS ‘MY-ERRORS’).
USE --VERBOSE --HELP TO GET A LIST OF AVAILABLE OPTIONS
080111 22:53:32 [ERROR] ABORTING
080111 22:53:32 InnoDB: Starting shutdown…
080111 22:53:34 InnoDB: Shutdown completed; log sequence number 0 46409
080111 22:53:34 [Note] /usr/local/mysql/libexec/mysqld: Shutdown complete
080111 22:53:34 mysqld_safe mysqld from pid file /usr/local/mysql/var/tonfisk.pid ended

Karena option --log-error memasok nilai default, anda harus menggunakan tanda sama dengan untuk menetapkan nilai yang berbeda untuk itu, seperti yang ditunjukkan di sini:

shell> mysqld_safe --log-error=my-errors &
[1] 31437
shell> 080111 22:54:15 mysqld_safe Logging to ‘/usr/local/mysql/var/my-errors.err’.
080111 22:54:15 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
shell>

Sekarang server telah berjalan dengan sukses, dan logging errors ke file /usr/local/mysql/var/my-errors.err.

Masalah serupa dapat muncul ketika menetapkan nilai opsi option file. Sebagai contoh, perhatikan file my.cnf yang berisi sebagai berikut:

[mysql]
host
user

Ketika klien mysql membaca file ini, entri ini diuraikan sebagai --host --user atau --host = --user, dengan hasil yang ditunjukkan di sini:

shell> mysql
ERROR 2005 (HY000): UNKNOWN MYSQL SERVER HOST ‘--USER’ (1)

Namun, dalam option file, tanda sama dengan tidak dianggap. Misalkan file my.cnf seperti yang ditunjukkan di sini:

[mysql]
user jon

Mencoba untuk memulai mysql dalam hal ini menyebabkan kesalahan yang berbeda:

shell> mysql
MYSQL: UNKNOWN OPTION ‘--USER JON’

Sebuah kesalahan yang sama akan terjadi jika anda menulis host tonfisk dalam option file bukannya host=tonfisk. Sebaliknya, anda harus menggunakan tanda sama dengan:

[mysql]
user=jon

Sekarang percobaan login berhasil:

shell> mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.5.24 Source distribution
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.
mysql> SELECT USER();
+—————————-+
| USER()                         |
+—————————-+
| jon@localhost            |
+—————————-+
1 row in set (0.00 sec)

Ini bukan perilaku yang sama seperti dengan command line, di mana tanda sama tidak diperlukan:

shell> mysql --user jon --host tonfisk
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.5.24 Source distribution
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.
mysql> SELECT USER();
+——————+
| USER()          |
+——————+
| jon@tonfisk  |
+——————+
1 row in set (0.00 sec)

Dalam MySQL 5.5, menentukan pilihan yang membutuhkan nilai tanpa nilai dalam suatu option file menyebabkan server untuk membatalkan dengan kesalahan. Misalkan my.cnf berisi berikut:

[mysqld]
log_error
relay_log
relay_log_index

Hal ini menyebabkan server gagal pada startup, seperti yang ditunjukkan di sini:

shell> mysqld_safe &
090514 09:48:39 mysqld_safe Logging to ‘/home/jon/bin/mysql-5.5/var/tonfisk.err’.
090514 09:48:39 mysqld_safe Starting mysqld daemon with databases from /home/jon/bin/mysql-5.5/var
090514 09:48:39 mysqld_safe mysqld from pid file /home/jon/bin/mysql-5.5/var/tonfisk.pid ended

Option --log-error tidak memerlukan argumen, namun option  --relay-log membutuhkannya. seperti yang ditunjukkan di error log (dimana dengan tidak adanya nilai tertentu, default ke datadir/hostname.err):

shell> tail -n 3 ../var/tonfisk.err
090514 09:48:39 mysqld_safe Starting mysqld daemon with databases from /home/jon/bin/mysql-5.5/var
090514 9:48:39 [ERROR] /home/jon/bin/mysql-5.5/libexec/mysqld: option ‘--relay-log’ requires an argument
090514 9:48:39 [ERROR] Aborting

Ini adalah perubahan dari perilaku sebelumnya, di mana server akan menafsirkan dua baris terakhir di file contoh my.cnf sebagai  --relay-log=relay_log_index menciptakan sebuah file log relay menggunakan “relay_log_index” sebagai basename tersebut.

Iklan
  1. No trackbacks yet.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: