@hoindex

Почему не проходит авторизация в MySql из bash script?

Всем доброго времени суток.
Вот уже второй час бьюсь над проблемой, но сдвигов нет.
Есть задача перенести на новый сервер базу и sh скрипт, который из этой базы генерит csv файлы для отчетов.

На сервере под Debian 10 + ispmanager + mariadb 10.3.22 создана база test123456
Для неё создан юзер test123456 с таким же паролем test123456
Через phpMyAdmin вхожу, через ssh mysql -utest123456 -ptest123456 вхожу, а вот скрип войти не может, пишет
ERROR 1045 (28000) at line 1: Access denied for user 'test123456'@'localhost' (using password: YES)

Сам скрипт
#!/bin/bash

DB_NAME="test123456"
MYSQL_USER="test123456"
MYSQL_PASSWORD="test123456"
DATE=`date +%s`
SQL="mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -D$DB_NAME -Bse"
OTHER_OUTPUT_DIR="/var/www/site.ru/data/www/site.ru/pictures/"

FILE="subscribereport.csv"
$SQL "select datetime, upper(trim(email)), upper(trim(name)), upper(trim(gender)), ip, promocode, lower(trim(utm_source)), lower(trim(utm_medium)), lower(trim(utm_campaign)), mobile_source from subscribe where email <> '' and email like '%@%.%' INTO OUTFILE '$TMP_DIR$FILE$DATE' FIELDS TERMINATED BY ';' ESCAPED BY \"\" ENCLOSED BY '\"';"

sed 's/NULL;/;/g' $TMP_DIR$FILE$DATE > $OUTPUT_DIR$FILE && sed -i '1s/^/\xef\xbb\xbf/' $OUTPUT_DIR$FILE

Юзера с базой создавал через панель, там никогда никаких проблем не было, все права есть.
В чем может быть проблема?
Уже обгуглился.... мозг взрывается...

Маловероятно что это имеет значение, но скрипт запускается из крона по команде
chmod +x /var/www/site.ru/data/www/generate_report.sh; /var/www/site.ru/data/www/generate_report.sh >/var/www/site.ru/data/www/report.log 2>&1
  • Вопрос задан
  • 97 просмотров
Решения вопроса 1
neuro
@neuro
telecommunication engineer
Может забыли что-то такое? :)
GRANT ALL ON test123456.* TO 'test123456'@'localhost';
FLUSH PRIVILEGES;

Проверить можно так:
SHOW GRANTS FOR 'test123456'@'localhost';
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
@Nc_Soft
вы как-то странно sql вызываете из bash, попробуйте так
mysql --host=db_host --port=db_port --user=db_user --password=db_password --database=db_name --execute='sql here'
Ответ написан
@ky0
Миллиардер, филантроп, патологический лгун
Кавычек какое-то дикое количество. Вполне вероятно, что из-за них. Попробуйте засунуть запрос в файл и вызывать его в скрипте как-то так:
mysql %options% < sql_file

Второй подозреваемый - переменные окружения и, соответственно, отсутствие абсолютных путей к файлам.

Вообще - когда руками из консоли скрипт вызывается, что происходит? Ошибки есть?
Ответ написан
CityCat4
@CityCat4
Если я чешу в затылке - не беда!
Русским (ну, хорошо, английским) по белому - доступ запрещен. Либо Вы указываете неверный пароль, либо неверного юзера.

Начать надо с ручного захода под данным юзером:
# mysql -u test123456 -p
и посмотреть результат. Если зашли - пробуйте команды в ручном режиме. Еще полезно включить general log - он правда гадит здорово, но узкие места показывает.
Ответ написан
shambler81
@shambler81 Куратор тега Linux
в пароле может быть спец символ тогда нужно будет делать -p'.....' а не просто -p
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы