我的要求是创建一个用户进行远程登录但没有密码。在我的远程空间,我使用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';
......你可以提出任何建议。
答案 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