Хотите отдельный файл для хранения MySQL имя пользователя, пароль и имя базы данных

2

У меня есть скрипт, который создает дамп базы данных MySQL и сжимает файл. То, что я хочу сделать, это иметь другой (редактировать) файл, который может изменить имя пользователя, пароль и имя базы данных. Затем каким-то образом подключите этот файл к этому сценарию.

В другом файле я хочу что-то, что говорит, например.

username =  "username"
password = "password"
database = c2duo_db

Затем в имени скрипта mysqlbackup.sh некоторые импортируют пароль пользователя и базу данных из файла.

#!/bin/sh

mysqldump -u"username" -p"password" --opt c2duo_db > /home/sh/c2duo_db-`date +%d%m%Y`.sql

cd /home/sh
tar -zcvf c2duo_db-`date +%d%m%Y`.tar.gz  *.sql
Shehzad009
источник
@Caleb: если вы используете оболочку sh в AIX, то источник выдаст вам ошибку. Пожалуйста, используйте . (точка) вместо источника.
Гириш Пандей

Ответы:

5

Вы можете легко сделать это, используя sourceкоманду, чтобы импортировать содержимое другого файла в текущую среду оболочки (в вашем случае ваш скрипт) и запустить его там.

В db.conf:

username="username"
password="password"
database="database"

В вашем скрипте:

#!/bin/sh

source /path/to/db.conf
cd /home/sh
dumpfile_name=$database-$(date +%d%m%Y).sql

mysqldump -u"$username" -p"$password" --opt "$database" > $dumpfile_name
gzip $dumpfile_name

Примечания:

  • Вы никогда не должны ставить пробел после =оператора присваивания при назначении переменных оболочки!
  • Я сделал пару вещей, чтобы очистить ваш код. Я не добавил новый дамп в один файл tar, как вы делали. Я показал, как вы можете сжать отдельный файл. Если вы хотите сделать так, чтобы они были в одном архиве, вы тоже можете это сделать, но я считаю, что иметь отдельные сжатые файлы дампа очень полезно.
  • Я перенес cdоперацию на перед mysqldumpкомандой, чтобы вам не пришлось указывать путь к выходному файлу, поскольку это текущий каталог. Просто сохраняет дублированный код.

Редактировать: Даже после того, как этот шаг сделан, кажется, что это наполовину испеченное решение для меня. Возможно, вас заинтересует, как вы можете передавать значения, используя аргументы. Например, вы можете взять жестко закодированный путь к файлу конфигурации из приведенного выше сценария и заменить его следующим:

#!/bin/sh

source "$1"
cd /home/sh
[...] # rest of script as above

Вы могли бы тогда выполнить это как ./mysqlbackup.sh /path/to/db.conf. Вы могли бы сделать еще один шаг вперед и просто написать все в одном скрипте и указать все три значения в качестве аргументов:

#!/bin/sh

username="$1"
password="$2"
database="$3"
cd /home/sh
[...] # rest of script as above

... и назовите это как ./mysqlbackup.sh username password database.

Калеб
источник
Это именно то, что я ищу. Спасибо
Shehzad009
0

Вы можете изменить первый файл на:

s/username/joe/
s/password/secret/
s/database/c2duo_db/g

сохраните его как db.sed и назовите

sed -f db.sed mysqlbackup.sh > joeSqlbackup.sh

Для разных пользователей / паролей и баз данных вы должны создавать разные sed-скрипты.

неизвестный пользователь
источник