"Команда, не найденная" ошибка, похожа на него, был перезаписан, который является признаком неправильного типа окончаний строки. Выполненный dos2unix
на Вашем файле сценария для фиксации этого. Возможно, что это - некоторый другой случайный символ. Отобразите свое использование сценария hexdump
или cat -v
показать это. Эта проблема часто происходит при использовании редактора Windows на файле Unix.
Вместо этой строки:
ls -Al --time-style=long-iso /home/svn/repository/ | grep '^d' | awk '{print $8}' | while read line
используйте это:
find "$REPOSITORY_DIR" -maxdepth 1 -type d | while read -r line
который не полагается ls
который не предназначен для использования в сценариях/каналах. Выполнение его, этот путь также, более вероятно, будет работать в случаях, где имена файлов включают пробелы.
Можно сделать заключение в кавычки путем, у Вас есть оно, но этот пример мог бы быть лучше, так как оно работает, если существуют пробелы в именах файлов:
if [ ! -d "$BACKUP_DIR/$line" ]; then
mkdir "$BACKUP_DIR/$line"
Лучше использовать $()
вместо обратных галочек и cat
является ненужным (также упрощенное заключение в кавычки):
REVISION=$(awk '{print $1}' "$REPOSITORY_DIR/$line/db/current" )
И существует больше мест, где можно упростить заключение в кавычки.
I received a hint in a comment but the user has since deleted it.
The trick is to not use replicate-do-db and only use replicate-rewrite-db:
#replicate_do_db='DB1'
replicate-rewrite-db=DB1->DB2
Commenting out the replicate_do_db line in my.cnf fixed it for me.
Thanks to the mystery user who pointed me in the right direction, whoever you are.
Важное примечание: Вы должны добавить имя переписанной базы данных. Добавьте эту строку в свой my.cnf:
replicate-do-db=DB2
Итак, ваш файл конфигурации должен быть, наконец, таким:
server-id=101
report-host=Slave01
replicate_do_db = DB2
replicate-rewrite-db = DB1->DB2
replicate-ignore-table=DB2.SOME_TABLE_NAME
Я протестировал его, и он работает