如何创建没有密码的MySQL用户 - 远程登录所需 - 用于bash插入脚本?

时间:2011-04-27 14:43:01

标签: mysql bash

我的要求是创建一个用户进行远程登录但没有密码。在我的远程空间,我使用bash脚本进行插入,类似于:

for i in {1..5000}; do
  mysql -h 11.40.3.169 -uUser -pPass -DDatabaseName <<<
    "insert into DatabaseTableName values('$i','dummy_$i');" &
  echo -n "$i  "
  sleep 1
  date
done

问题是每个插件花费了大约4秒钟,除了每次插入的身份验证之外,我无法确定问题。所以,如果我可以在MySQL中创建一个用户,只需要很少的身份验证......就像这样:

# I'm trying to remove this password
GRANT ALL PRIVILEGES TO 'user'@'%' IDENTIFIED BY 'password';

......你可以提出任何建议。

5 个答案:

答案 0 :(得分:25)

只需删除IDENTIFIED BY部分:

GRANT ALL PRIVILEGES ON *.* TO 'user'@'%'

请注意,从没有密码的任何地方进行远程登录是一件非常不安全的事情。您最好限制此用户允许的IP范围:

GRANT ALL PRIVILEGES  ON *.* TO 'user'@'allowed_remote_machine'

答案 1 :(得分:24)

您可以通过创建具有密码的用户,然后将.my.cnf文件放在运行包含以下内容的bash脚本的帐户的主目录中来执行此操作:

[mysql]
user=user
password=pass
[mysqladmin]
user=user
password=pass

这可能比创建没有密码的用户更好。

答案 2 :(得分:1)

让用户没有密码和所有权限并不是一个好主意。我建议你创建一个没有密码但只有一些权限的用户(插入到特定的表或特定的数据库)。

答案 3 :(得分:1)

我认为您的问题在于您为每个插入启动了mysql客户端。你应该从php,java等程序进行插入 - 而不是从shell脚本。

客户端的启动时间(以及与主机的连接)正在扼杀你。我经常每分钟从php或java程序到MySQL数据库进行1000次插入,在小型(CPU /内存)机器上有数百万条记录。

答案 4 :(得分:0)

首先,在运行脚本的远程计算机上使用客户端cnf文件不会加快此过程。 MySQL客户端仍在发送登录信息并为每个插入登录,它只是读取uid / pw的文件,而不是使用cmd行参数。 AFAIK网络和身份验证开销相同。甚至网络数据包的内容也一样。

您仍应使用cnf文件。

提高性能的方法是制作多行linsert:

MySQL --defaults-file=/some/uid/pw/etc/.client.cnf -e \ "Insert into tbl_name ('fld1','fld2') values ('r1-fld1','r1-fld2'), ('r2-fld2','r2-fld2'), ...and so on (up to max_allowed_packet_size) ('r500-fld2','r500-fld2');" 或在通过数据文件传送后在服务器端读取DATA INFILE