ОШИБКА 1046 (3D000) в строке 1: база данных не выбрана

0

Я хочу обновить некоторую таблицу с помощью bash вместо терминала mysql напрямую.
Обычный способ заключается в ebedded sql command в bash с помощью этой строки doc.

mysqlword="xyzzy"
tmpdb="yyyy"
mysql -u root -p$mysqlword  <<EOF
    USE ${tmpdb};
    UPDATE wp_posts SET post_content = replace(post_content, 'domain1', 'domain2');
EOF

Попробуйте другой способ выполнить ту же работу.

mysqlword="xyzzy"
tmpdb="yyyy"
mysql -u root -p$mysqlword  -e"USE ${tmpdb};"
sql="UPDATE wp_posts SET post_content = replace(post_content, 'domain1', 'domain2');"
mysql -u root -p$mysqlword  -e"$sql"
ERROR 1046 (3D000) at line 1: No database selected

Я выбрал базу данных с помощью mysql -u root -p$mysqlword -e"USE ${tmpdb};" перед mysql -u root -p$mysqlword -e"$sql", как его исправить?

Теги:

2 ответа

1
Лучший ответ

Вы можете исправить/упростить это несколькими способами:

  1. Удалив отдельный оператор USE.
  2. Удалив учетные данные пользователя из командной строки.

Ссылка на имя базы данных непосредственно в инструкции UPDATE:

sql="UPDATE wp_posts SET ${tmpdb}.post_content = replace(post_content, 'domain1', 'domain2');"

Если у вас есть версия mysql> = 5.6.6, используйте mysql_config_editor чтобы поместить учетные данные для входа в файл.mylogin.cnf. Он сохранит ввод и пароль будет зашифрован.

например

mysql_config_editor --login-path=root --user=root --host=localhost --password

После установки ваша команда bash будет проще (и безопаснее)

tmpdb=yyyy
sql="UPDATE wp_posts SET ${tmpdb}.post_content = replace(post_content, 'domain1', 'domain2');"
mysql --login-path=root -e "$sql" 

или, поскольку переменная здесь действительно не нужна,

mysql --login-path=root -e "UPDATE wp_posts SET yyyy.post_content = replace(post_content, 'domain1', 'domain2');"
  • 0
    Нет, MariaDB не поддерживает эту функцию.
Показать ещё 1 комментарий
1

Вы должны USE базу данных каждый раз, когда вы открываете соединение. Поэтому вам нужно объединить две команды:

mysqlword="xyzzy"
tmpdb="yyyy"
sql="USE ${tmpdb}; UPDATE wp_posts SET post_content = replace(post_content, 'domain1', 'domain2');"
mysql -u root -p$mysqlword  -e"$sql"

Ещё вопросы

Сообщество Overcoder
Наверх
Меню