Как использовать bash для запуска скрипта mysql с `ENCRYPT()`?

#mysql #bash

#mysql #bash

Вопрос:

Мой скрипт bash, как показано ниже:

 #!/bin/bash
db_root_user='root'
db_root_password='rootpassword'
mail_db='mail'
mysql --user="$db_root_user" --password="$db_root_password" << EOF
CREATE DATABASE $mail_db;
USE $mail_db;
CREATE TABLE domains (domain varchar(50) NOT NULL, PRIMARY KEY (domain) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE users (staff_id SMALLINT unsigned NOT NULL,email_addr varchar(100) NOT NULL, password varchar(106) NOT NULL, PRIMARY KEY (email_addr)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO domains (domain) VALUES ('myd1.com'),('myd2.com'),('myd3.com');
INSERT INTO users (staff_id,email_addr, password) VALUES ('1','admin@myd1.com',ENCRYPT('mypassword',CONCAT('$6$', SUBSTRING(SHA(RAND()), -16)))),('1','admin@myd2.com',ENCRYPT('mypassword',CONCAT('$6$', SUBSTRING(SHA(RAND()), -16)))),('1','admin@myd3.com',ENCRYPT('mypassword',CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))));
EOF
  

Но я получил ошибку, как показано ниже:
ERROR 1048 (23000) at line 6: Column 'password' cannot be null

На самом деле, password столбец является ENCRYPT('mypassword',CONCAT('$6$', SUBSTRING(SHA(RAND()), -16)))

В чем проблема?
Заранее спасибо!

Комментарии:

1. Какую версию MySQL вы используете?

2. @Nick,mariadb 5.5.60

Ответ №1:

Я пытался

 mysql -e "select ENCRYPT('mypassword',CONCAT('$6$', SUBSTRING(SHA(RAND()), -16)))"
  

и иногда получаем *0

Решение: избегать знаков доллара:

 mysql -e "select ENCRYPT('mypassword',CONCAT('$6$', SUBSTRING(SHA(RAND()), -16)))"
  

Это работает и для документов here.