Я пытаюсь загрузить данные в базу данных mysql, используя следующий скрипт
#!/bin/bash
DB_USER='my_user';
DB_PASSWD='passwd';
DB_NAME='db_name';
TABLE='rass';
INPUT_FILE='/full/path/to/re.txt';
SQL="USE $DB_NAME; LOAD LOCAL DATA INFILE '$INPUT_FILE' REPLACE INTO TABLE `$TABLE` LINES TERMINATED BY '|' CHARACTER SET utf8;"
mysql --user=$DB_USER --password=$DB_PASSWD --default_character_set utf8 $DB_NAME
Когда я запускаю команду, она отображает руководство по mysql, и никакие данные в файле не вставляются. Любые идеи о том, как я могу изменить свой код для вставки данных
Используйте здесь документ .
mysql [args] << EOF
USE $DB_NAME;
LOAD LOCAL DATA INFILE "$INPUT_FILE" REPLACE INTO TABLE "$TABLE" LINES TERMINATED BY '|' CHARACTER SET utf8;
QUIT;
EOF
(Я полагаю, что вы не хотите, чтобы на самом деле одиночные кавычки вокруг ссылок на переменные).
Кроме того, вы можете настроить файл ~/.my.cnf
так, чтобы неинтерактивное управление было немного проще, например:
[client]
user=root
password="some pass"
Вы также можете использовать mysql -e
и получить переменные Bash и поместить их в запрос MySQL;
#!/bin/bash
baseName="base1"
tableName="table1"
animal="dog"
par1="1"
par2="2"
myslqquery="USE $baseName;
INSERT INTO $tableName VALUES(NULL,\"$animal\",$par1,$par2);
SELECT * from $tableName;"
mysql -uroot -e "$myslqquery"