Bagaimana Anda menjalankan permintaan tunggal melalui mysql dari baris perintah?

157

Saya ingin dapat menjalankan permintaan tunggal pada server jarak jauh dalam tugas skrip.

Misalnya, secara intuitif, saya akan membayangkan itu akan seperti:

mysql -uroot -p -hslavedb.mydomain.com mydb_production "select * from users;"
Matius
sumber

Jawaban:

249
mysql -u <user> -p -e "select * from schema.table"
RC.
sumber
3
C: \ Program Files (x86) \ MySQL \ MySQL Server 5.7 \ bin> mysql.exe -u root -p -e "kueri saya" ----> ERROR 1045 (28000): Akses ditolak untuk pengguna 'root' @ 'localhost' (menggunakan kata sandi: YA)
Dr.jacky
2
Ini harus menjadi hasil pertama dalam pencarian google (untuk "mysql exec sql dari command line") dan bukan situs mysql yang besar!
Guillaume Bois
4
Juga, jika Anda ingin menghapus format tajuk dan tabel, Anda dapat menggunakanmysql -u <user> -p -B --disable-column-names -e 'select * from schema.table'
dvlcube
2
@tinybyte Mengasumsikan Linux: Insinde menggandakan tanda bintang yang *akan diperluas ke semua file di direktori saat ini, sementara ekspansi ini tidak terjadi dalam singlequotes, itulah alasan mengapa. Doublequotes akan berfungsi untuk kueri tanpa *.
NobbZ
2
@ Dr.jacky Saya yakin Anda tidak benar-benar membutuhkannya lagi, tetapi untuk masa depan, jika pengguna root Anda tidak memiliki kata sandi, jangan berikan opsi -p kosong, hanya jangan berikan sama sekali yaitumysql.exe -u root -e "my query"
solidau
29
mysql -uroot -p -hslavedb.mydomain.com mydb_production -e "select * from users;"

Dari hasil penggunaan:

-e, --execute=name
Jalankan perintah dan keluar. (Nonaktifkan --forcedan file riwayat)

John Kugelman
sumber
15

inilah cara Anda dapat melakukannya dengan trik shell keren:

mysql -uroot -p -hslavedb.mydomain.com mydb_production <<< 'select * from users'

'<<<' menginstruksikan shell untuk mengambil apa pun yang mengikutinya sebagai stdin, mirip dengan pemipaan dari echo.

gunakan flag -t untuk mengaktifkan output format tabel

ʞɔıu
sumber
13

Jika itu kueri yang sering Anda jalankan, Anda bisa menyimpannya dalam file. Maka kapan saja Anda ingin menjalankannya :

mysql < thefile

(dengan semua bendera login dan basis data tentunya)

dnagirl
sumber
6
echo "select * from users;" | mysql -uroot -p -hslavedb.mydomain.com mydb_production
Oktober
sumber