Я хочу взять backup
из моих mysql
данных, используя mysqldump
. У меня есть три файла, содержащие имена mysql tables
построчно. Мой сценарий имеет эту строку -
mysqldump -h localhost -uroot --lock-tables=false db < $2 > ~/backup/$name'.sql'
Я использую getopts
для обработки некоторых options
. Так что в основном $2
это файл, который я собираюсь предоставить. Этот файл имеет - table1 и table2. Таким образом, эта команда должна создавать резервные копии только этих двух таблиц.
Но когда я cat
файл ~/backup/name.sql
, он показывает всю резервную копию db
. Я не уверен, если это объединенная резервная копия всех таблиц из всех 3 файлов или всей БД. Но он берет резервную копию всей базы данных вместо двух таблиц.
Что я делаю не так?
Это работает нормально, когда я говорю это так -
mysqldump -h localhost -uroot --lock-tables=false db table1 table2 > ~/backup/$name'.sql'
Это немного зависит от того, как вы запускаете скрипт, но вы должны иметь возможность использовать обратные галочки и отслеживать файл.
mysqldump -h localhost -uroot --lock-tables=false db `cat $2` > ~/backup/$name'.sql
Причина сбоя заключается в том, что mysqldump не читает стандартный ввод; table1 и table2 являются (необязательными) аргументами, но вы предоставляете их не в командной строке, а в stdin.
Если $2
является именем файла файла, содержащего одну строку с текстом table1 table2
, то должно работать следующее:
mysqldump -h localhost -uroot --lock-tables=false db `cat $2` > ~/backup/$name'.sql'
Bash расширит эту командную строку до [ 119]
mysqldump -h localhost -uroot --lock-tables=false db table1 table2 > /home/user/backup/somename.sql
- это то, что вы хотите запустить.
Однако, так как вы в любом случае используете getopt, возможно, вы могли бы поместить «table1» в $2
и «table2» в $3
и запустить просто
mysqldump -h localhost -uroot --lock-tables=false db $2 $3 > ~/backup/$name'.sql'