Saya mencoba mengatur pekerjaan cron untuk mengambil cadangan dari mesin slave saya. Jadi saya harus menghentikan budaknya
Saya mengeluarkan perintah
mysqladmin --user=root --password=test_pass stop-slave
Tapi itu melempar kesalahan:
mysqladmin: terhubung ke server di 'localhost' gagal kesalahan: 'Akses ditolak untuk pengguna' root '@' localhost '(menggunakan kata sandi: YES)'
Sekarang saya mencoba dengan perintah itu
mysqladmin --user=root --password stop-slave
Itu meminta kata sandi dan saya berikan sebagai test_pass
dan semuanya baik-baik saja.
Kenapa begitu terjadi? Apa alternatifnya?
NB: BTW versi mysql saya mysql-5.0.95-5
, itu masuk akal.
mysql
authentication
mysqladmin
Praveen Prasannan
sumber
sumber
'
tanda kutip tunggal harus mencegah masalah itu. gnu.org/software/bash/manual/bashref.html#QuotingJawaban:
Argumen baris perintah tunduk pada interpretasi oleh shell perintah sistem, mengubah perilaku perintah atau mengubah nilai argumen sebelum diteruskan ke program yang disebut.
Ketika argumen (seperti nilai untuk
--password
) berisi karakter yang dapat ditafsirkan oleh shell, mereka perlu dikutip (biasanya dilampirkan dalam tanda kutip tunggal'
dalam unix atau penawaran ganda"
di Windows) atau melarikan diri secara individual (biasanya dengan backslash\
sebelum setiap metacharacter) ) untuk menghindari interpretasi oleh shell.Sementara karakter spesifik adalah sistem khusus, beberapa karakter yang harus diperhatikan termasuk:
Jika kata sandi, untuk contoh yang sangat buruk, disetel ke
pa$$word
...Bacaan lebih lanjut:
Pembaruan: untuk keluar dari tanda kutip
'
tunggal atau"
ganda dalam kata sandi, Anda dapat menghindarinya dengan backslash terkemuka, atau melampirkan seluruh argumen dalam gaya kutipan yang berlawanan jika tidak ada karakter lain yang tidak sesuai dengan gaya kutipan yang dipilih. dengan.Jika Anda memiliki kutipan tunggal dan karakter khusus lainnya juga, Anda terjebak dengan garis miring terbalik karena, dalam unix, kutipan ganda itu "lebih lemah" daripada kutipan tunggal dan banyak metakarakter masih diperluas ketika diapit dengan tanda kutip ganda tetapi tidak tunggal tanda kutip.
Ini bukan khusus MySQL tetapi berlaku untuk apa pun dengan argumen baris perintah.
Anda biasanya dapat menggunakan
echo
perintah untuk melihat bagaimana shell menafsirkan argumen Anda.Tindak lanjut: Bash shell (dan mungkin beberapa yang lain) memungkinkan lolosnya tanda kutip tunggal dalam string yang dikutip satu kali, meskipun konvensi ini aneh (mungkin didasarkan pada beberapa keputusan yang sudah lama terlupakan yang hilang sekarang akibat kabut waktu):
Ganti setiap
'
bagian dalam string dengan'\''
sebelum membungkus seluruh string dalam tanda kutip tunggal ... sehingga string literalfoo'bar
dinyatakan sebagai'foo'\''bar'
.Seperti yang saya katakan, aneh. Ini diperlukan karena backslash lolos dari kuotasi tunggal di luar string yang dikutip tunggal, backslash lolos dari apa pun di dalam string yang dikutip tunggal dalam bash, dan string yang dikutip tunggal dapat ditutup dan dibuka kembali dengan beberapa kutipan tunggal selama tidak ada yang tidak terhindar. karakter campur tangan yang memiliki makna khusus. Jadi
'\''
tutup kutipan string, lalu sajikan literal yang lolos, lalu buka kembali kutipan string.sumber
pa$$word
Tambahan:
Di Mesin Windows, kami juga kesulitan dengan kata sandi: kata sandi itu berisi kata-kata
%
yang harus diloloskan sebagai%%
(Kutipan saja tidak cukup di sini)sumber