2012-02-15 154 views

回答

277

由於您使用的是Ubuntu,因此您只需要在主目錄中添加一個文件,它將禁用mysqldump密碼提示。這是通過創建文件~/.my.cnf(權限需要爲600)來完成的。

而不必實際輸入密碼本到.my.cnf文件

[mysqldump] 
user=mysqluser 
password=secret 

這可讓您連接爲誰需要密碼的MySQL用戶添加。你甚至不需要-p或--password。

對於腳本編寫非常方便mysql & mysqldump命令。

實現此目的的步驟可以在this link中找到。

或者,使用下面的命令:

的mysqldump -u [用戶名] -p [密碼] [數據庫名稱]> [轉儲文件]

+0

謝謝!工作很好! – 2012-02-15 12:34:06

+46

downvoted其他答案在命令行上傳遞-p,因爲任何用戶都可以通過ps aux查看root或用戶的密碼。使用上面的文件建議是最安全的 – Eddie 2013-04-26 18:55:52

+1

夢幻般的答案!我正在尋找一種方法,不要讓我的密碼就在我的腳本中,而且這個技巧的確有用。 – srchulo 2013-05-21 21:01:56

-20

你可以在命令行上指定密碼的方法如下:

mysqldump -h <host> -u <user> -p<password> dumpfile 

的mysqldump的選項是大小寫敏感的!

+0

都能跟得上它不工作,我不認爲它知道-p是密碼 – 2012-02-15 12:31:45

+1

不知道如何得到1票,我我們對此表示贊同。正如在這裏的其他答案中所看到的,-p和給定密碼之間不應有空格。你也應該將輸出重定向到dumpfile,而不是像你在做的那樣指定它,或者它會被假定爲一個表名。 @buzypi說得最好。 – Neek 2012-10-03 03:45:49

+0

它應該工作(雖然是不安全的,因爲它很容易讓其他用戶看到密碼),您只需確保-p和密碼之間沒有空格,例如'mysqldump -u root -pmypassword' – jx12345 2016-11-20 14:16:53

-9

當然我認爲這將是更好和更安全地將全部cmd行放在根crontab中,並帶有credentails。 至少crontab編輯被限制(可讀)給已經知道密碼的人..所以不用擔心以純文本顯示它...

如果需要的不僅僅是一個簡單的mysqldump ...只需放置一個bash腳本接受credentails作爲PARAMS和執行裏面的所有設施......

簡單

#!/bin/bash 
mysqldump -u$1 -p$2 yourdbname > /your/path/save.sql 

目前的crontab文件BAS:

0 0 * * * bash /path/to/above/bash/file.sh root secretpwd 2>&1 /var/log/mycustomMysqlDump.log 
+2

不,它不會是安全的。 ,當你向命令行添加密碼時,任何能夠讀取proc(或者完成ps)的人都可以看到 - 這是相當默認的。 當您添加.my.cnf文件並設置了600個權限時,它僅對您可見。 – rombarcz 2014-06-17 09:36:02

52

添加到@ Frankline的回答:

-p選項必須從命令中排除以便在配置文件中使用密碼。

正確:
mysqldump –u my_username my_db > my_db.sql

錯誤:
mysqldump –u my_username -p my_db > my_db.sql



.my.cnf可以省略用戶名。

[mysqldump] 
password=my_password 

如果您.my.cnf文件不在default locationmysqldump沒有看到它,使用--defaults-file指定它。

mysqldump --defaults-file=/path-to-file/.my.cnf –u my_username my_db > my_db.sql

17

呀這是很容易....只是在一個神奇的命令行沒有更多

mysqldump --user='myusername' --password='mypassword' -h MyUrlOrIPAddress databasename > myfile.sql 

,做:)

+20

警告:在命令行界面上使用密碼可能不安全。 – 2015-06-30 11:51:38

+2

@Yottatron它可能是不安全的,特別是在古代Unix系統很容易有10-15人在一天中的大部分時間登錄並且vi陷入困境的時候。在現代VPS上,雖然可以有10-15個人使用IRC,但只有管理員才能訪問shell。 – JonathanHayward 2017-04-05 13:37:31

+2

感謝你們,我只是在Docker devbox中使用它。所以安全不是問題。 – MikeiLL 2017-09-04 17:48:51

26

要使用一個文件,該文件是在任何地方OS內部,使用

mysqldump --defaults-extra-file=/media/share/.sqlpwd [database] > [desiredoutput].sql 

如果你使用像我這樣的CRON,試試這個!

mysqldump --defaults-extra-file=/media/share/.sqlpwd [database] > "$(date '+%F').sql" 

Reccomended權限和所有權

sudo chmod 600 /media/share/.sqlpwd && sudo chown $USER:nogroup /media/share/.sqlpwd 

.sqlpwd內容

[mysqldump] 
user=username 
password=password 

- - 如果你想使用:這只是登錄到數據庫

mysql --defaults-extra-file=/media/share/.sqlpwd [database] 

你需要有另一個入口內.sqlpwd

[mysql] 
user=username 
password=password 

您現在能有這樣的自動連接的別名,你到DB

alias whateveryouwant="mysql --defaults-extra-file=/media/share/.sqlpwd [database]" 

- 其他例子.CNF通過或.sqlpwd

[mysqldiff] 
user=username 
password=password 

[client] 
user=username 
password=password 
+3

--defaults-extra-file可以在默認位置使用,甚至可以通過--defaults-extra-file =〜/ .my.cnf – FreeSoftwareServers 2015-09-05 04:32:07

+2

這是最好的答案,尤其是在考慮多個數據庫和用戶/密碼時。 – Hazok 2015-10-27 09:41:50

+0

*我認爲*您也可以在文件中只輸入密碼並在CLI中傳遞用戶名,這對安全性更好,因爲它將用戶名/密碼從相同文件中分離出來。 – FreeSoftwareServers 2015-12-15 05:23:15

18

一些答案提到將密碼放在配置文件中。

另外,從您的腳本,你可以export MYSQL_PWD=yourverysecretpassword

此方法優於使用配置文件的優點是您不需要單獨的配置文件就可以與腳本保持同步。你只有腳本來維護。

這種方法沒有缺點。

密碼是而不是對系統上的其他用戶可見(如果它位於命令行上,則可見)。環境變量只對運行mysql命令的用戶和root可見。

對於任何可以閱讀腳本本身的人來說,密碼也是可見的,因此請確保腳本本身受到保護。這與保護配置文件沒有任何區別。如果您想讓腳本公開可讀(例如,export MYSQL_PWD=$(cat /root/mysql_password)),您仍然可以從單獨的文件獲取密碼。導出變量比構建配置文件更容易。

例如,

$ export MYSQL_PWD=xoF3mafn5Batxasdfuo 
$ mysqldump -u root mysql | head 
-- MySQL dump 10.13 Distrib 5.6.23, for Linux (x86_64) 
-- 
-- Host: localhost Database: mysql 
-- ------------------------------------------------------ 
-- Server version 5.6.23 
/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */; 
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */; 
/*!40101 SET @[email protected]@COLLATION_CONNECTION */; 
/*!40101 SET NAMES utf8 */; 
+0

雖然這個答案並不是真的「不正確」,但它還不安全,當程序運行時,導出的環境變量仍然很容易看到... – MatheusOl 2016-01-29 18:17:05

+1

@MatheusOl:環境變量只對root和用戶本身可見 - 無論如何,這些用戶都可以訪問持有密碼的配置文件。 – chutz 2016-02-03 23:37:47

+0

Upvoted:在編寫腳本時更容易做到,而不必嘗試正確地編寫選項文件創建腳本,同時仔細擁有其他人無法讀取它的權限,默認情況下,變量具有正確的「隱藏」權限。 – Azendale 2016-12-17 17:48:50

2

對我來說,使用MariaDB的我不得不這樣做:做chmod 600 ~/.my.cnf添加文件~/.my.cnf和更改權限。然後將您的憑據添加到該文件。神奇的一塊,我缺少的是,該密碼需要客戶端塊(參考:docs)下,像這樣:

[client] 
password = "my_password" 

[mysqldump] 
user = root 
host = localhost 

如果你碰巧來這裏尋找如何做一個mysqldump的使用MariaDB的。將密碼放置在[client]塊下,然後將用戶置於[mysqldump]塊下。

0

我有以下。

的/ etc/mysqlpwd

[mysql] 
user=root 
password=password 

用下面的別名。

alias 'mysql -p'='mysql --defaults-extra-file=/etc/mysqlpwd' 

要進行恢復,我只是用:

mysql -p [database] [file.sql] 
相關問題