Parola sormadan bir veritabanı mysqldump gerçekleştirmek için komut bilmek istiyorum.
NEDEN: Ben her gün bir kez veritabanı mysqldump alır bir cron işi çalıştırmak istiyorum. Bu nedenle, istendiğinde parolayı ekleyemeyeceğim.
Bunu nasıl çözebilirim?
Parola sormadan bir veritabanı mysqldump gerçekleştirmek için komut bilmek istiyorum.
NEDEN: Ben her gün bir kez veritabanı mysqldump alır bir cron işi çalıştırmak istiyorum. Bu nedenle, istendiğinde parolayı ekleyemeyeceğim.
Bunu nasıl çözebilirim?
Yanıtlar:
Ubuntu kullandığınız için, yapmanız gereken tek şey ana dizininize bir dosya eklemek ve mysqldump şifre istemini devre dışı bırakacak. Bu, dosya oluşturularak yapılır ~/.my.cnf(izinlerin 600 olması gerekir).
Bunu .my.cnf dosyasına ekleyin
[mysqldump]
user=mysqluser
password=secret
Bu, gerçekten şifreyi girmek zorunda kalmadan şifre gerektiren bir MySQL kullanıcısı olarak bağlanmanızı sağlar. -P veya --parola bile gerekmez.
Mysql ve mysqldump komutları için çok kullanışlıdır.
Bunu başarmaya yönelik adımlar bu bağlantıda bulunabilir .
Alternatif olarak, aşağıdaki komutu kullanabilirsiniz:
mysqldump -u [user name] -p[password] [database name] > [dump file]
ancak komutun tamamı (şifre dahil) basit bir ps axkomutla sistemdeki herhangi bir kullanıcı tarafından görüntülenebildiğinden, bunun doğal olarak güvensiz olduğunu unutmayın .
--defaults-file. `Mysqldump - defaults-file = my_other.cnf --print-defaults`
~/.my.cnf. Bkz. Stackoverflow.com/a/14653239/470749 . MySql benimkinin olmasını bekliyordu c:\wamp\bin\mysql\mysql5.5.24\my.cnf. Orada bir dosya oluşturdum. Mysql'i yeniden başlatmak gerekli değildi; hemen bir sonraki mysqldump için çalıştı.
GRANT LOCK TABLES, SELECT ON *.* TO 'BACKUPUSER'@'%' IDENTIFIED BY 'PASSWORD';
@ Frankline'ın cevabına ekleniyor:
-pSeçenek ekarte edilmelidir yapılandırma dosyasında şifreyi kullanmak için komutundan.
Doğru:
mysqldump –u my_username my_db > my_db.sql
Yanlış:
mysqldump –u my_username -p my_db > my_db.sql
.my.cnf kullanıcı adını atlayabilir.
[mysqldump]
password=my_password
Senin Eğer .my.cnfdosya bir değil varsayılan konum ve mysqldumpgörmüyor kullanarak belirtin --defaults-file.
mysqldump --defaults-file=/path-to-file/.my.cnf –u my_username my_db > my_db.sql
Birkaç yanıt, parolayı bir yapılandırma dosyasına yerleştirmekten bahseder.
Alternatif olarak, betiğinizden de yapabilirsiniz export MYSQL_PWD=yourverysecretpassword.
Bir yapılandırma dosyası kullanmada bu yöntemin üst kısmı, komut dosyanızla senkronize olmak için ayrı bir yapılandırma dosyasına ihtiyacınız olmamasıdır. Sadece senaryonuz var.
Orada hiçbir olumsuz bu yönteme.
Şifredir değil sistemde diğer kullanıcılar tarafından görülebilir (bu komut satırında ise görünür olacaktır). Ortam değişkenleri yalnızca mysql komutunu ve kökü çalıştıran kullanıcı tarafından görülebilir.
Parola ayrıca komut dosyasının kendisini okuyabilen herkes tarafından da görülebilir, bu nedenle komut dosyasının kendisinin korunduğundan emin olun. Bu hiçbir şekilde bir yapılandırma dosyasını korumaktan farklı değildir. Komut dosyasının herkes tarafından okunmasını istiyorsanız, şifreyi yine de ayrı bir dosyadan alabilirsiniz export MYSQL_PWD=$(cat /root/mysql_password). Bir değişkeni dışa aktarmak, bir yapılandırma dosyası oluşturmaktan daha kolaydır.
Örneğin,
$ export MYSQL_PWD=$(>&2 read -s -p "Input password (will not echo): "; echo "$REPLY")
$ 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 @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
$ 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 @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
export MYSQL_PWD=...Yok değil süreç listede görünür. Bir an bile değil. Bunun nedeni, exportkomutun bir kabuk yerleşik olmasıdır (ve olması gerekir). Bu nedenle kabuk, kabuğunuzda yürütürseniz komutun argümanıyla bir işlemi çatallamaz / yürütmez.
İşletim sistemi içinde herhangi bir yerde bulunan bir dosyayı kullanmak için --defaults-extra-fileörneğin:
mysqldump --defaults-extra-file=/path/.sqlpwd [database] > [desiredoutput].sql
Not: .sqlpwdsadece örnek bir dosya adıdır. İstediğiniz her şeyi kullanabilirsiniz.
Not: MySQL otomatik olarak ~/.my.cnfhangisinin kullanılabileceğini kontrol eder--defaults-extra-file
Benim gibi CRON kullanıyorsanız bunu deneyin!
mysqldump --defaults-extra-file=/path/.sqlpwd [database] > "$(date '+%F').sql"
Gerekli İzin ve Tavsiye Edilen Mülkiyet
sudo chmod 600 /path/.sqlpwd && sudo chown $USER:nogroup /path/.sqlpwd
.sqlpwd içeriği:
[mysqldump]
user=username
password=password
Aktarılacak diğer örnekler .cnfveya.sqlpwd
[mysql]
user=username
password=password
[mysqldiff]
user=username
password=password
[client]
user=username
password=password
Bir veritabanında otomatik olarak oturum açmak isterseniz, [mysql]örneğin bu girişe ihtiyacınız olacaktır .
Artık sizi otomatik olarak DB'ye bağlayan bir takma ad yapabilirsiniz
alias whateveryouwant="mysql --defaults-extra-file=/path/.sqlpwd [database]"
Ayrıca, parolayı yalnızca içine koyabilir .sqlpwdve kullanıcı adını script / cli aracılığıyla iletebilirsiniz. Bunun güvenliği geliştirip iyileştirmeyeceğinden emin değilim, bu hep birlikte farklı bir soru olurdu.
Tamlık uğruna aşağıdakileri yapabileceğinizi söyleyeceğim, ancak son derece güvensizdir ve asla bir üretim ortamında kullanılmamalıdır:
mysqldump -u [user_name] -p[password] [database] > [desiredoutput].sql
Not: -p ve parola arasında boşluk yoktur.
Örneğin -pPassWorddoğru -p Password, yanlışken.
Evet çok kolay .... sadece bir büyülü komut satırında artık yok
mysqldump --user='myusername' --password='mypassword' -h MyUrlOrIPAddress databasename > myfile.sql
ve bitti :)
Benim için MariaDB kullanarak bunu yapmak zorunda kaldı: Dosyayı ekleyin ~/.my.cnfve yaparak izinleri değiştirin chmod 600 ~/.my.cnf. Ardından kimlik bilgilerinizi dosyaya ekleyin. Eksik olduğum sihirli parça, şifrenin istemci bloğunun (ref: docs ) altında olması gerektiğiydi, şöyle :
[client]
password = "my_password"
[mysqldump]
user = root
host = localhost
Buraya geliyorsanız MariaDB ile nasıl mysqldump yapacağımı arıyorsunuz. Parolayı bir [client] bloğunun altına ve ardından kullanıcıyı bir [mysqldump] bloğunun altına yerleştirin.
[mysqldump]bölümün altına şifre koymak ve herhangi bir sorun olmadan çalıştı. Ubuntu 18.04 LTS
İşte bir script / bin / sh içindeki Docker için bir çözüm:
docker exec [MYSQL_CONTAINER_NAME] sh -c 'exec echo "[client]" > /root/mysql-credentials.cnf'
docker exec [MYSQL_CONTAINER_NAME] sh -c 'exec echo "user=root" >> /root/mysql-credentials.cnf'
docker exec [MYSQL_CONTAINER_NAME] sh -c 'exec echo "password=$MYSQL_ROOT_PASSWORD" >> /root/mysql-credentials.cnf'
docker exec [MYSQL_CONTAINER_NAME] sh -c 'exec mysqldump --defaults-extra-file=/root/mysql-credentials.cnf --all-databases'
Değiştirin [MYSQL_CONTAINER_NAME]ve ortam değişkeninin MYSQL_ROOT_PASSWORDkabınızda ayarlandığından emin olun .
Umarım bana yardımcı olabilir gibi yardımcı olacaktır!
Kesinlikle credentails ile kök crontab tam cmd hattı yerleştirmek daha iyi ve daha güvenli olacağını düşünüyorum. En azından crontab düzenlemesi, şifreyi zaten bilen biriyle sınırlıdır (okunabilir) .. bu yüzden düz metinde göstermekten endişe etmeyin ...
Gerekirse basit bir mysqldump'tan daha fazlası ... sadece credentails'i params olarak kabul eden ve içindeki tüm olanakları yerine getiren bir bash betiği yerleştirin ...
Basitçe bas dosyası
#!/bin/bash
mysqldump -u$1 -p$2 yourdbname > /your/path/save.sql
Crontab'da:
0 0 * * * bash /path/to/above/bash/file.sh root secretpwd 2>&1 /var/log/mycustomMysqlDump.log
Parolayı komut satırında aşağıdaki gibi belirleyebilirsiniz:
mysqldump -h <host> -u <user> -p<password> dumpfile
MySQL için seçenekler büyük / küçük harf duyarlıdır!
mysqldump -u root -pmypassword