Terminal içinden mysql kullanarak uyarı mesajlarını, ancak bash betiğinde yazılmış şifreyi bastırın


273

Terminal içinden MySQL üzerinde aşağıdaki komutu çalıştırmayı denediğimde:

mysql -u $user -p$password -e "statement"

Yürütme beklendiği gibi çalışır, ancak her zaman bir uyarı verir:

Uyarı: Komut satırı arabiriminde bir parola kullanmak güvenli olmayabilir.

Ancak, yukarıdaki ifadeyi $passwordşifremi saklayan bir ortam değişkeni ( ) kullanarak yapmak zorundayım , çünkü komutu Terminal içinden bas komut dosyasında yinelemeli olarak çalıştırmak istiyorum ve kesinlikle bir istemin görünmesini beklemekten hoşlanmıyorum ve şifremi tek bir komut dosyasında 50 veya 100 kez girmeye zorladım. İşte sorum:

  • Uyarıyı bastırmak mümkün müdür? Komut belirttiğim gibi düzgün çalışıyor, ancak döngüyü 50 veya 100 kez çalıştırdığımda pencere oldukça dağınık hale geliyor.

  • Uyarı mesajına uymalı mıyım ve şifremi scriptime yazmamalı mıyım? Bu durumda, istem her beni zorladığında şifremi girmem gerekir mi?

Koşmak man mysqlyardımcı olmaz, sadece

--show-warnings
Varsa, her ifadeden sonra gösterilecek uyarılar. Bu seçenek etkileşimli ve toplu mod için geçerlidir.

ve bir şey eksik değilsem, işlevselliğin nasıl kapatılacağı hakkında hiçbir şeyden bahsetmez.

OS X 10.9.1 Mavericks'liyim ve homebrew'dan MySQL 5.6 kullanıyorum.


14
Önerilen yol (gibi Tavsiyen bir seçenek dosyasında şifrenizi saklamaktır [client] password=my_passwordiçinde ~/.my.cnf). Elbette bazı güvenlik etkileri de vardır, ancak en azından çalıştırabilen herkes tarafından erişilebilir değildir psve dosya izinleriyle bunun üzerinde kontrolünüz vardır.
Anton Kovalenko

4
mysql -u root password root -e "statement" > /dev/null?

Bu arada, Python gibi bir şey de kullanabilirsiniz pexcept. Terminal eklemeleri yapabilir ve komutun verdiği geri bildirimleri işleyebilir. Bu şekilde istediğiniz çıktıyı ve istediğiniz gerçek çıktı şeridini atlayabilirsiniz :)

6
Önerilen IMO yöntemi, yanlış olanı korumak için doğru olanı cezalandırır. Parola bir komut dosyasının içinde saklanırsa ps ile veya herhangi bir günlükte görünmez. Bunu yapmanın doğru yolu budur. Dosyayı harici bir dosyaya koymak, şifreyi cronlayacak olan ancak başlaması kötü olanlara yardımcı olur. Bu arada yıllardır çalışmakta olan komut dosyaları artık başarısız oluyor ve bu uyarıyı stderr'da ortaya çıkardığı için değiştirmemiz gerekiyor.
Nestor Urquiza

2
Clear parolayı saklamaz whcih önerilen yöntem için, ayrıntılı olarak dev.mysql.com/doc/refman/5.6/en/mysql-config-editor.html
anthony

Yanıtlar:


249

MySQL istemci / sunucu sürümünüz UYARI mesajını önlemek için 5.6.xa yoluysa mysql_config_editor araçlarını kullanıyor :

mysql_config_editor set --login-path=local --host=localhost --user=username --password

Sonra kabuk betiğinizde kullanabilirsiniz:

mysql --login-path=local  -e "statement"

Onun yerine:

mysql -u username -p pass -e "statement"

28
Bunun --login-pathtüm diğer argümanlardan önce gelmesi gerektiğini unutmayın . Ben çalışıyordum mysqldump --tables --login-path=localve hata alıyorum unknown variable 'login-path=local'.
Tulio

Mysql komut satırı istemcisi varsayılan olarak 'istemci' giriş yolunun altına bakar. Küçük bir değişiklik yaparak "mysql -e 'deyimi'" talimatlarını basitleştirebilirsiniz.
Morgan Tocker

2
Kabuk dosyasını doğrudan yürütürsek iyi çalışır ama crontab'dan çağrılırsa çalışmaz
Nabeel Arshad

1
@NabeelArshad Bunun crontab'ınızda kullanıcı için "ev" ayarlanmadığından (genel olarak ENV değişkenleri) bence bu yüzden crontab'da müşteri doğru ~ / .mylogin.cnf dosyasını bulamıyor
Cristian Porta

1
@NGGVU, emin değilim, ancak bu çözümün şifreli şifreleri sakladığına inanıyorum.
zhekaus

209

Şöyle bir şey kullanıyorum:

mysql --defaults-extra-file=/path/to/config.cnf

veya

mysqldump --defaults-extra-file=/path/to/config.cnf 

Config.cnf dosyasının içerdiği yerler:

[client]
user = whatever
password = whatever
host = whatever

Bu, farklı sunucular / roller / veritabanları için birden fazla yapılandırma dosyasına sahip olmanızı sağlar. ~ / .My.cnf komutunu kullanmak yalnızca bir yapılandırma kümesine sahip olmanıza izin verir (ancak yararlı bir varsayılan küme olsa da).

Debian tabanlı bir dağıtımda bulunuyorsanız ve kök olarak çalıştırıyorsanız, yukarıdakileri atlayabilir ve almak için /etc/mysql/debian.cnf dosyasını kullanabilirsiniz ...:

mysql --defaults-extra-file=/etc/mysql/debian.cnf


12
Not: --defaults-extra-fileilk seçenek olmalıdır aksi takdirde mysql ile şikayet ediyor mysqldump: unknown variable 'defaults-extra-file.
pevik

4
Kabul edilen cevaba harika bir alternatif. Kesinlikle MYSQL_PWDdeğişkeni ayarlamayın ....
DudeOnRock

1
5.6'nın altındaki sürümler için kesinlikle iyi bir seçenek. Aksi takdirde, kabul edilen cevapla giderdim.
dkniffin

21
Geçici bir .cnf dosyası oluşturmanın alternatifi bunu Bash: 'da yapmaktır mysql --defaults-extra-file=<(printf "[client]\nuser = %s\npassword = %s" "$user" "$pwd") -e "statement". Yana printfBash tarafından yürütülür doğrudan içeri görünmüyor ps.
Dave James Miller

3
Bunun --defaults-fileyerine kullanmak zorunda kaldım --defaults-extra-file, çünkü ikincisi ~ / .my.cnf'deki ayarlara öncelik verdi.
Roger Dueck

185

Uygun (ancak eşit derecede güvensiz) bir yöntem kullanmaktır:

MYSQL_PWD=xxxxxxxx mysql -u root -e "statement"

Resmi belgelerin buna karşı öneride bulunduğunu unutmayın.
Bkz. 6.1.2.1 Parola Güvenliği için Son Kullanıcı Yönergeleri (Sürüm 5.6 için Mysql El Kitabı) :

Parolanızı MYSQL_PWDortam değişkeninde saklama

MySQL şifrenizi belirtmenin bu yöntemi son derece güvensiz kabul edilmeli ve kullanılmamalıdır. Bazı ps sürümleri, çalışan işlemlerin ortamını görüntüleme seçeneği içerir. Bazı sistemlerde, ayarladıysanız MYSQL_PWD, şifreniz ps çalıştıran diğer kullanıcılara açıktır . Böyle bir ps sürümü olmayan sistemlerde bile, kullanıcıların işlem ortamlarını inceleyebileceği başka bir yöntem olmadığını varsaymak akıllıca değildir.


6
Bu benim bash Access denied for user 'root'@'localhost' (using password: NO)
betiğimde çalışmıyor

24
Bir senaryoda, yapmanız gerekir export MYSQL_PWD=whatever.
Riot

2
Sorgum çok hızlı olduğu için bu seçeneği tercih ettim. Sonra sorgu yürüttükten sonra sahte bir şey için ayarlayın.
TimH - Codidact

11
Çalıştırmanız gerekmeyen bir senaryoda export, hepsini tek bir satıra yerleştirin:MYSQL_PWD=xxxxxxxx mysql -u root -e "statement"
JD

1
@JD: MySQL 5.7.21 ile Ubuntu 16.04'te benim için çalışıyor.
mivk

70

Komut satırında bir parola kullanmak isterseniz, bunun belirli hata iletisini filtrelemek için çalıştığını buldum:

mysqlcommand 2>&1 | grep -v "Warning: Using a password"

Temelde standart hatayı standart çıktıya yönlendiriyor ve "Uyarı: Parola kullanma" ile eşleşen tüm satırları bırakmak için grep kullanıyor.

Bu şekilde, hatalar dahil olmak üzere diğer çıktıları görebilirsiniz. Bunu çeşitli kabuk komut dosyaları vb. İçin kullanıyorum.


Bu, Capistrano dağıtımı için bir Rake görevi oluşturmak gibi diğer görevlerde adı geçen tek katmanlı görevlerde kullanım için mükemmel bir çözümdür.
JakeGould

2
Bu mesajı susturmak için mükemmel ve basit, MySQL kurulumunda herhangi bir şeye dokunmaya gerek yok.
ajaaskel

Ben zaten SQL için bir yönlendirme var mysqldump ile nasıl kullanabilirsiniz?
MacroMan

1
Bu, diğerlerine kıyasla gerçekten kötü bir çözüm. Metin değişirse MySQL'in sonraki sürümlerinde başarısız olabilir, başka bir yerel ayarda da çalışmayabilir.
yktoo

42

Günlük mysqldump veritabanı yedeklemelerimin daha güvenli çalışması için bash betiğimi burada bulabilirsiniz. Bu Cristian Porta'nın büyük cevabının bir uzantısı.

  1. İlk kullanım mysql_config_editor (MySQL 5.6+ ile gelir) şifreli şifre dosyasını kurmak. Kullanıcı adınızın "db_user" olduğunu varsayalım. Kabuk isteminden çalıştırma:

    mysql_config_editor set --login-path=local --host=localhost --user=db_user --password

    Parola ister. Girdikten sonra, kullanıcı / parola şifrelenmiş olarakhome/system_username/.mylogin.cnf

    Tabii ki, "sistem_kullaniciadi" yi sunucudaki kullanıcı adınız olarak değiştirin.

  2. Bh betiğinizi buradan değiştirin:

    mysqldump -u db_user -pInsecurePassword my_database | gzip > db_backup.tar.gz

    buna:

    mysqldump --login-path=local my_database | gzip > db_backup.tar.gz

Artık ifşa edilmiş şifreler yok.


10

En kolay yol

mysql -u root -pMYPASSWORD -e "show databases" 2>/dev/null

43
Sorun, betiğinizdeki meşru hataları da bastırmasıdır.
man910

4
Ayrıca bu hataları günlüğe kaydetmek için 2> /var/log/myscript.log günlük dosyası oluşturabilirsiniz.
Skamasle

1
2>/dev/null | grep -v "mysql: [Warning] Using a password on the command line interface can be insecure."yalnızca söz konusu uyarıyı bastırmak için kullanın
Hafenkranich

10

Oturum açma yolunu belirtirken parolayı iletmek için betiğinizdeki mysql_config_editor komutunu da çalıştırabilirsiniz.

expect -c "
spawn mysql_config_editor set --login-path=$mySqlUser --host=localhost --user=$mySqlUser --password
expect -nocase \"Enter password:\" {send \"$mySqlPassword\r\"; interact}
"

Bu, komut istemlerinde istemlerle etkileşime girmek için kullanılabilecek bir bekleme oturumu başlatır

Bu gönderiye bakın


Bu '>' gerçekten orada olmak mı demek?
David Goodwin

mysql_config_editor'ın stdout'tan girdi alması için yes '>' olması gerekir. Stdout'tan mysql_config_editor'a geçirilen şey, bu kullanıcının sahip olmasını istediğiniz şifredir '>' Olmadan, echo komutunun ayrıştırılması ve echo komutundan sonra her şey görmeniz gereken her şeydir
phylanx

Yani, boru operatörü "|" kullanmak istiyorsun değil mi? En azından * nix ve DOS'ta ">" STDOUT'u yakalar ve geçerli çalışma dizinindeki "mysql_config_editor" adlı bir dosyaya yazar.
Jay Dansand

Evet,
haklısın,

7

tamam, geçici dosyalar veya herhangi bir şey olmadan çözüm:

mysql --defaults-extra-file=<(echo $'[client]\npassword='"$password") -u $user -e "statement"

diğerlerinin bahsettiklerine benzer, ancak burada gerçek bir dosyaya ihtiyacınız yoktur, komutun bu kısmı dosyayı taklit eder: <(echo ...) (<(


şifre girişli bir .my.cnfdosyanız varsa bu işe yaramaz~/.
santiago arizti

5
shell> mysql_config_editor set --login-path=local
     --host=localhost --user=localuser --password
Enter password: enter password "localpass" here
shell> mysql_config_editor set --login-path=remote
     --host=remote.example.com --user=remoteuser --password
Enter password: enter password "remotepass" here

Mysql_config_editor'ın .mylogin.cnf dosyasına ne yazdığını görmek için print komutunu kullanın:

shell> mysql_config_editor print --all
[local]
user = localuser
password = *****
host = localhost
[remote]
user = remoteuser
password = *****
host = remote.example.com

Print komutu, her oturum açma yolunu, köşeli parantez içinde oturum açma yolunun adını gösteren bir grup üstbilgisiyle başlayan ve ardından oturum açma yolu için seçenek değerleriyle başlayan bir dizi satır olarak görüntüler. Parola değerleri maskelenir ve açık metin olarak görünmez.

Önceki örneklerde gösterildiği gibi, .mylogin.cnf dosyası birden çok oturum açma yolu içerebilir. Bu şekilde, mysql_config_editor farklı MySQL sunucularına bağlanmak için birden fazla “kişilik” kurmayı kolaylaştırır. Bunlardan herhangi biri, daha sonra bir istemci programını çağırdığınızda --login-path seçeneği kullanılarak ada göre seçilebilir. Örneğin, yerel sunucuya bağlanmak için şu komutu kullanın:

shell> mysql --login-path=local

Uzak sunucuya bağlanmak için şu komutu kullanın:

shell> mysql --login-path=remote

Www-data kullanıcısı olarak mysqldump komutunu yürütmek istersem ne olur? www-data giriş dizini yok ... www-data kullanıcısı için mysql_config_editor nasıl kurulur?
lewis4u

5

Gönderen https://gist.github.com/nestoru/4f684f206c399894952d

# Let us consider the following typical mysql backup script:
mysqldump --routines --no-data -h $mysqlHost -P $mysqlPort -u $mysqlUser -p$mysqlPassword $database

# It succeeds but stderr will get:
# Warning: Using a password on the command line interface can be insecure.
# You can fix this with the below hack:
credentialsFile=/mysql-credentials.cnf
echo "[client]" > $credentialsFile
echo "user=$mysqlUser" >> $credentialsFile
echo "password=$mysqlPassword" >> $credentialsFile
echo "host=$mysqlHost" >> $credentialsFile
mysqldump --defaults-extra-file=$credentialsFile --routines --no-data $database

# This should not be IMO an error. It is just a 'considered best practice'
# Read more from http://thinkinginsoftware.blogspot.com/2015/10/solution-for-mysql-warning-using.html

3

Başka bir alternatif mysql'yi çağırmak için sshpass kullanmaktır, örneğin:

sshpass -p topsecret mysql -u root -p username -e 'statement'

Çalışıyor gibi görünüyor, ancak komut satırından 'kullanıcı adını' kaldırmanız gerekiyor, değil mi?
e2-e4

3

Basit bir geçici çözüm betiği. Bu "mysql" olarak adlandırın ve "/ usr / bin" den önce yolunuza koyun. Diğer komutlar için açık değişkenler veya uyarı metni farklıysa.

#!/bin/sh

(
(
(
(
(
    /usr/bin/mysql "$@"
) 1>&9 
) 2>&1
) | fgrep -v 'mysql: [Warning] Using a password on the command line interface can be insecure.'
) 1>&2 
) 9>&1

3
Bu cevap biraz kıvrımlı olsa da, sadece iptal ettim, çünkü açıkça yanlış olmayan ya da yorum yapmadan alışılmadık bir şekilde aşağı inen oyları görmek için bana çok şey veriyor! David'in başka soruları yanıtlamamasına şaşmamalı! O atladı ve yeni bir çözüm ile yardım etmeye çalıştı ve neden hiçbir açıklama olmadan çarptı! Yorum bırakmayan anonim FU'lar!
Jeremy Davis

3
+1 Jeremy Davis'i kabul edin. Bu kıvrıktır, ancak başka bir seçenek olmadan bırakıldığında bu kabul edilebilir. Şimdiye kadarki en aptalca fikir olması gereken uyarıları kapatmanın aksine kesinlikle yanlış değil!
Ben McIntyre

1
@JeremyDavis Evet, bu, özellikle işi göstermek istediğim için kıvrılmıştı. Herhangi bir parantez olmadan yapılabilir, ancak daha az net olabilirdi. Bu aynı zamanda tüm yığın değişimindeki ilk okuma yapma aktivitemdi ... daha sonra uzun süre dokunmadım. Yorumunuz kesinlikle takdir edildi.
David G.

@DavidG. - Yorumumun senin için değerli olduğuna sevindim. Ayrıca geri döndüğünüzü ve cevabınızın şimdi pozitif bölgede olduğunu görmek harika. Şahsen, yorum yapmadan aşağı oylamaya izin verilmesi gerektiğini düşünmüyorum ... Birisi gittikleri için çarpıldıklarında nasıl öğrenilecek?
Jeremy Davis

Söyledikten sonra, cevabınıza yeniden bakarak, geçici bir soruna (esasen mysql'yi sarmak) kalıcı bir çözümün (tek bir komut dosyasında kullanım için bir hata mesajını bastırmak) gitmek için en iyi yol olduğuna ikna olmadım. IMO sarma mysql komut dosyasındaki bir işlevde (burada yönteminizi kullanmak iyi olurdu) üstün bir yaklaşımdır. Benim 2c ... :)
Jeremy Davis

3

İşte bir script / bin / sh içindeki Docker için bir çözüm:

docker yürütme [MYSQL_CONTAINER_NAME] sh -c 'exec echo "[client]"> /root/mysql-credentials.cnf'

docker yürütme [MYSQL_CONTAINER_NAME] sh -c 'exec echo "user = root" >> /root/mysql-credentials.cnf'

docker exec [MYSQL_CONTAINER_NAME] sh -c 'exec echo "şifre = $ MYSQL_ROOT_PASSWORD" >> /root/mysql-credentials.cnf'

docker exec [MYSQL_CONTAINER_NAME] sh -c 'exec mysqldump --defaults-extra-file = / root / mysql-credentials.cnf --all-veritabanları'

[MYSQL_CONTAINER_NAME] ürününü değiştirin ve MYSQL_ROOT_PASSWORD ortam değişkeninin kapsayıcınızda ayarlandığından emin olun.

Umarım bana yardımcı olabilir gibi yardımcı olacaktır!


Fena değil. Sadece bir dönüş ile bir çağrı kullandım, örneğin docker exec [MYSQL_CONTAINER_NAME] sh -c 'exec echo "[client] [RETURN HERE] password=pa55" > /root/defaults'Kullanarak --defaults-filezaten kök de alır.
Matthew Wilcoxson

3

Ayrıca standart hata STDERR çıktısını / dev / null konumuna yönlendirebilirsiniz.

Sadece şunu yapın:

mysql -u $user -p$password -e "statement" 2> /dev/null


7
Yasal

1

Şahsen, bu hatayı yakalamak için komut dosyası sarmalayıcı kullanıyorum. İşte kod örneği:

#!/bin/bash

#echo $@ | cat >> /home/mysqldump.log 2>/dev/null
ERR_FILE=/tmp/tmp_mdump.err

# Execute dumper
/usr/bin/mysqldump $@ 2>$ERR_FILE

# Determine error and remove tmp file
ERROR=`cat $ERR_FILE`
rm $ERR_FILE

# Handle an error
if [ "" != "$ERROR" ]; then

        # Error occured
        if [ "Warning: Using a password on the command line interface can be insecure." != "$ERROR" ]; then
                echo $ERROR >&2
                exit 1
        fi
fi

1

PowerShell için ( pwshdeğil bash), bu oldukça bir rube-goldberg çözümüydü ... İlk denemem çağrıları mysqlbir try/catchfonksiyona sarmaktı, ancak PowerShell hata işlemedeki garip davranışlar nedeniyle bu geçerli değildi.

Solüsyon geçersiz oldu $ErrorActionPreferenceyakalama ve birleştirmek için yeterince uzun STDERRve STDOUTkelime için ve ayrıştırma ERRORgerektiği gibi ve tekrar fırlatılması. Yakalayamamanız ve serbest bırakamamamızın nedeni "^mysql.*Warning.*password", PowerShell'in hatayı tek bir akış olarak ele alması ve yükseltmesidir, bu nedenle filtrelemek ve yeniden atmak için hepsini yakalamanız gerekir . : /

Function CallMySQL() {
    # Cache the error action preference
    $_temp = $ErrorActionPreference
    $ErrorActionPreference = "Continue"

    # Capture all output from mysql
    $output = (&mysql --user=foo --password=bar 2>&1)

    # Restore the error action preference
    $ErrorActionPreference = $_temp

    if ($output -match "ERROR") {
        throw $output
    } elseif($output) {
        "   Swallowing $output"
    } else {
        "   No output"
    }
}

Not: PowerShell, Unix için kullanılabilir, bu nedenle bu çözüm çapraz platformdur. bashBazı küçük sözdizimi modifikasyonlarına uyarlanabilir .

: Uyarı Bu tür hata iletileri veya kelime dönmek ifadeleri olmayan ingilizce olarak çalışmayacaktır kenar-vakaların düzinelerce vardır ERRORçıktıda hiçbir yerinde, ama temel bir arama için uyarı yutmak için yeterliydi mysqldışarı bombalama olmadan tüm komut dosyası. Umarım diğerleri bunu faydalı bulur.

mysqlBu uyarıyı bastırmak için bir seçenek eklemeniz güzel olurdu .


1

Rundeck'i görevlerinizi veya bir mylogin.cnfdosya istediğiniz herhangi bir platformu zamanlamak için kullanırsanız , sql çağrılarına devam etmeden önce dosya için yeni bir konum sağlamak için aşağıdaki kabuk kodunu başarıyla kullandım:

if test -f "$CUSTOM_MY_LOGINS_FILE_PATH"; then
   chmod 600 $CUSTOM_MY_LOGINS_FILE_PATH
   export MYSQL_TEST_LOGIN_FILE="$CUSTOM_MY_LOGINS_FILE_PATH"
fi

...

result=$(mysql --login-path=production -NBA -D $schema -e "$query")

MYSQL_TEST_LOGIN_FILEVarsayılan değerden farklı bir dosya yoluna ayarlanabilen bir ortam değişkeni nerede .

Bu özellikle çatallı bir işlemde çalışıyorsanız ve dosyaları $HOMEdizine taşıyamaz veya kopyalayamıyorsanız faydalıdır .

Buradaki belgelere bakın.


0

en iyi çözüm takma adı kullanmaktır:

alias [yourapp]-mysql="mysql -u root -psomepassword -P3306 -h 127.0.0.1"

Örneğin, bunu betiğinize koyun:

alias drupal-mysql="mysql -u root -psomepassword -P3306 -h 127.0.0.1"

daha sonra bir veritabanı yüklemek için betiğinizde:

drupal-mysql database_name < database_dump.sql

bir ifade çalıştırmak için:

drupal-mysql -e "EXEC SOMESTATEMENT;"

sonra aliaas unalias:
Neil Davis

Komut dosyası içindeki bir işlev içinde mysql çağırıyorsanız, diğer adı kullanamazsınız.
user3616725

0

Yardımcıyı tanımlayın:

remove-warning () {
    grep -v 'mysql: [Warning] Using a password on the command line interface can be insecure.'
}

Kullanın:

mysql -u $user -p$password -e "statement" 2>&1 | remove-warning

Tachaan! Kodunuz temiz ve okunması güzel

(bash ile test edildi)


-1

Başka bir çözüm (örneğin bir komut dosyasından):

 sed -i'' -e "s/password=.*\$/password=$pass/g" ~/.my.cnf
 mysql -h $host -u $user $db_name -e "$sql_cmd"

Bu -i''seçenek Mac OS X ile uyumluluk içindir. Standart UNIX işletim sistemleri doğrudan kullanabilir-i


1
şifre hala 'sed' komut satırındadır, bu yüzden sadece kısa bir süre de olsa işlem listelerinde görünür kalır.
Anthony

-1

Sahip olduğum sorun çıktı bir bash komut dosyasında bir koşullu kullanmak oldu.

Bu zarif değil, ama bir liman işçisinde bu gerçekten önemli olmamalı. Temelde tüm bu son satırda olmayan çıkışı yok saymak. Awk ile benzerlik yapabilir ve ilk satır vb.

Bu yalnızca Son satırı döndürür

mysql -u db_user -pInsecurePassword my_database ... | sed -e '$!d'

Hatayı bastırmaz, ancak bir bash komut dosyasında bir sorgunun çıktısını kullanabileceğinizden emin olur.


-1

En kolay yol:

mysql -u root -p YOUR_DATABASE

Bunu girin ve şifrenizi girmeniz gerekir.

Not: Evet, noktalı virgül kullanmadan.


-3

Örneğin / dev / null komutunu kullanarak mySQL yürütebilir ve uyarı ve hata iletilerini engelleyebilirsiniz:

# if you run just a SQL-command
mysql -u ${USERNAME} -p${PASSWORD} -h ${HOST} ${DATABASE} -e "${STATEMENT}" &> /dev/null

# Or you can run SQL-script as a file
mysql -u ${USERNAME} -p${PASSWORD} -h ${HOST} ${DATABASE} < ${FILEPATH} &> /dev/null

Nerede:

${USERNAME} - existing mysql user

${PASSWORD} - password

${HOST}     - ip or hostname, for example 'localhost'

${DATABASE} - name of database

${STATEMENT}- SQL command

${FILEPATH} - Path to the SQL-script

zevk almak!


1
Sadece bu şifre uyarılarını değil, TÜM hata mesajlarını da bastıracağını unutmayın.
Simon East

-3

Benim için çalıştı- Sadece eklendikten 2> nullsonra eklendi $(mysql_command)ve sadece Hatalar ve Uyarı mesajlarını bastırır.


1
Bu, başka bir şeyler ters gittiğinde rapor almamanız anlamına gelir!
Anthony

Ayrıca, muhtemelen istedin 2>/dev/null. Kullanmak 2> nullsadece geçerli dizinde "null" adlı bir dosyaya çıktı koyacaktır.
thelogix
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.