
正文
(28000): Access denied for user 'root'@'127.0.0.1' (using password: YES)
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
在一台测试服务器测试Python脚本时,执行Python脚本时报如下错误:
主要错误信息为“operation the sql fail!1045 (28000): Access denied for user 'root'@'127.0.0.1' (using password: YES)”。 部分测试脚本如下所示,如下所,mysql.connector.connect的host为127.0.0.1 其它账号信息做了脱敏处理.
def record_server_info():
CRLF
try:
CRLF
server_ip = get_host_ip();
CRLF
CRLF
server_name= str.strip(get_host_name());
CRLF
CRLF
server_system=platform.system();
CRLF
CRLF
linux_dis =platform.linux_distribution();
CRLF
os_version =''
CRLF
os_version = ' '.join(linux_dis)
CRLF
CRLF
os_bitinfo = platform.architecture()
CRLF
os_bit =os_bitinfo[0][0:2]
CRLF
CRLF
processor = str.strip(commands.getoutput("cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c"))
CRLF
CRLF
cpu_slot= commands.getoutput("cat /proc/cpuinfo | grep 'model name' | sort | uniq | wc -l");
CRLF
CRLF
cpu_core = multiprocessing.cpu_count();
CRLF
CRLF
processor_core =int(cpu_core)/int(cpu_slot);
CRLF
CRLF
memory = get_physical_memory()
CRLF
CRLF
disk_space = get_disk_info()["capacity"]/1024/1024;
CRLF
CRLF
CRLF
dbcon = mysql.connector.connect(
CRLF
host='127.0.0.1',
CRLF
user='root',
CRLF
passwd='123456',
CRLF
database='mysql'
CRLF
)
CRLF
cursor = dbcon.cursor()
CRLF
sql_tex =( "insert into db_server_info("
CRLF
"factory_cd ,"
CRLF
"server_name ,"
CRLF
"server_ip ,"
CRLF
"server_type ,"
CRLF
"server_system ,"
CRLF
"is_production ,"
CRLF
"os_version ,"
CRLF
"os_patch ,"
CRLF
"os_bit ,"
CRLF
"processors ,"
CRLF
"cpu_slot ,"
CRLF
"processors_core ,"
CRLF
"memory ,"
CRLF
"disk_space ,"
CRLF
"server_purpose) "
CRLF
"values(%(factory_cd)s,%(server_name)s,%(server_ip)s,%(server_type)s,%(server_system)s,%(is_production)s,%(os_version)s,%(os_patch)s,%(os_bit)s,%(processors)s,%(cpu_slot)s,%(processors_core)s,%(memory)s,%(disk_space)s,%(server_purpose)s)")
CRLF
data={'factory_cd':factory_cd, 'server_name':server_name, 'server_ip':server_ip,"server_type":server_type,"server_system":server_system,"is_production":is_productin,"os_version":os_version, "os_patch":'',"os_bit":int(os_bit), "processors":processor,"cpu_slot":cpu_slot, "processors_core":processor_core,"memory":memory,"disk_space":disk_space,"server_purpose":''}
CRLF
CRLF
cursor.execute('truncate table db_server_info')
CRLF
dbcon.commit()
CRLF
cursor.execute(sql_tex, data)
CRLF
dbcon.commit()
CRLF
CRLF
except mysql.connector.Error as e:
CRLF
print('operation the sql fail!{0}'.format(e))
CRLF
finally:
CRLF
cursor.close;
CRLF
dbcon.close;
CRLF
mysql -u root -p 测试登录MySQ发现没有问题,但是一检查发现,如果不指定host的情况下,当前用户为root@localhost,而root@'127.0.0.1'的密码为空。
mysql> select current_user();
CRLF
+----------------+
CRLF
| current_user() |
CRLF
+----------------+
CRLF
| root@localhost |
CRLF
+----------------+
CRLF
1 row in set (0.00 sec)
CRLF
CRLF
mysql> show grants for root@'localhost';
CRLF
+---------------------------------------------------------------------------------------------------------------------------+
CRLF
| Grants for root@localhost |
CRLF
+---------------------------------------------------------------------------------------------------------------------------+
CRLF
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*9B67EF98D94F2B81011D6D2CEDE4' WITH GRANT OPTION|
CRLF
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
CRLF
+---------------------------------------------------------------------------------------------------------------------------+
CRLF
2 rows in set (0.00 sec)
CRLF
CRLF
mysql> show grants for root@'127.0.0.1';
CRLF
+---------------------------------------------------------------------+
CRLF
| Grants for root@127.0.0.1 |
CRLF
+---------------------------------------------------------------------+
CRLF
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' WITH GRANT OPTION |
CRLF
+---------------------------------------------------------------------+
CRLF
1 row in set (0.00 sec)
CRLF
CRLF
mysql>
CRLF
立即检查my.cnf的配置,发现可能某次测试时,设置了参数 skip-name-resolve, 后面忘记取消了。由于启动mysqld时使用了'--skip-name-resolve'参数,此种情况下由于不做域名解析,127.0.0.1和localhost对mysql数据库来讲,是不同的主机,而root@'127.0.0.1'为空密码,所以Python脚本执行时,访问MySQL报错“(28000): Access denied for user 'root'@'127.0.0.1' (using password: YES)”







