赞
踩
做前端的女朋友让我帮忙在远程虚拟机上安装MySQL数据库,根据我多年编程经验,这个应该是几分钟的事情,满口自信答应,结果还是遇到很多坑。阮一峰约莫说过:软件编程更多是一种应用能力,和基础科学研究是不同的。编程就是用已经有的砖头搭建起图纸上的高楼。
通过Xshell连接虚拟机,然后开始安装MySQL、排查问题、Navicat连接MySQL。
sudo apt-get install mysql-server //服务端 sudo apt-get install mysql-client //客户端 sudo apt-get install libmysqlclient-dev //程序编译时链接的库 service mysql status //查看mysql运行状态mysql -u root -p //登录mysql #服务管理 #启动 sudo service mysql start #停止 sudo service mysql stop #重启 sudo service mysql restart #进入管理员账户 sudo su
#首先使用以下命令删除MySQL服务器: sudo apt-get remove mysql-server#查看当前的数据库。
show databases;
问题:Access denied for user ‘root‘@‘localhost‘ (using password: YES)
解决办法:
(1)虚拟机cd到 /etc/mysql/mysql.conf.d 目录下,mysql8的相关配置在文件mysqld.cnf中。
(2)vim mysqld.cnf 搜索 /mysqld 按 i 进入输入模式,在[mysqld]下输入 skip-grant-tables ,让mysql跳过密码验证
(3)重启mysql sudo service mysql restart。
(4)登录mysql,键入mysql –uroot –p;直接回车不需要输入密码(Enter)
(5)更新密码。update mysql.user set authentication_string=password('123') where user='root';
(6)flush privileges; 刷新数据库。此时报错语法不正确
问题:ERROR 1064 (42000) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘password(‘123456’)’ at line 1
解决办法:
(1)MySQL8.0后请使用alter修改用户密码。ALTER USER 'root'@'%' IDENTIFIED BY '123';
(2)此时报错 :ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
问题:ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
解决办法:
(1)先执行:flush privileges;
(2)再执行修改密码命令,可以了
(3)报错:ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'%'
4.MySQL8修改密码方法
MySQL5.7和之前的用户修改密码方式:
mysql -uroot -e "Set password=password(‘123’);" mysql -uroot -p123.com -e "use mysql;update user set authentication_string=password('456') where user='root';" update mysql.user set authentication_string=password("123") where user='root';以上三种方法在MySQL8.0以后版本中将不能使用,如果使用了将会导致在正确修改密码是报如下错误:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123'; ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost'如遇上以上问题请使用update语句先清空authentication_string字段,然后再修改密码即可
update user set authentication_string='' where user='root'; ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';所以特别提醒童鞋们:
MySQL8.0后请使用alter修改用户密码,因为在MySQL8.0以后的加密方式为caching_sha2_password,如果使用update修改密码会给user表中root用户的authentication_string字段下设置newpassowrd值,当再使用alter user 'root'@'localhost' identified by 'newpassword'修改密码时会一直报错,必须清空后再修改,因为authentication_string字段下只能是MySQL加密后的43位字符串密码,其他的会报格式错误,所以在MySQL8.0以后能修改密码的方法只能是:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
(1)虚拟机cd到 /etc/mysql/mysql.conf.d 目录下,mysql 8 的相关配置在文件mysqld.cnf中。
(2) 因为默认3306端口只允许本地访问的,注释掉这行 #bind-address = 127.0.0.1
(3)关闭ubuntu的防火墙
sudo ufw status # 查看防火墙状态sudo ufw enable #打开防火墙
sudo ufw disable #关闭防火墙
直接定位具体MySQL版本、具体问题,就不会出现因为版本不一样,导致运行命令不同这个问题。 如果一开始直接搜索:mysql8 修改密码 可能就不会出现过程中的那些问题。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。