Я хочу обновить некоторую таблицу с помощью 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"
, как его исправить?
Вы можете исправить/упростить это несколькими способами:
Ссылка на имя базы данных непосредственно в инструкции 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');"
Вы должны 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"