Ubuntu下载安装MySQL8.0(汇总下踩的坑)
雯静不会代码 2024-08-29 10:07:06 阅读 90
linux下安装MySQL比wins多点问题,记录一下我遇到的坑,因为是回忆,终端已经被我关掉了,所以有些没法截图了
我的:ubuntu22.04
1.下载MySQL
使用ubuntu自带的apt软件包管理工具进行mysql的下载,需要下载mysql-client和mysql-server两个,命令如下:
<code>sudo apt-get install mysql-client
sudo apt-get install mysql-server
使用这条命令查看是否运行:
systemctl status mysql
显示以下代表成功:
按理来说,接下来应该直接mysql -u root -p就完事了,但我遇到一些问题,这边我主要记录下我遇到的问题.
问题1:输入mysql -u root -p我的密码后,报错ERROR 2002 (HY000): Can't connect to local MySQL server through socket 'tmp/mysql.sock' (2)
意思是mysql想和tmp/mysql.sock连接,但找不到它所以导致连接失败.自己尝试cd了一下没有这个文件,所以应该是某个配置文件指向了这里,但这里是空的导致.最终得知是my.cnf配置了指向这个sock文件.因此,问题变为寻找这个my.cnf文件,可以使用下面这条指令去查看my.cnf的使用顺序:
<code>mysql --help | grep my.cnf
得到:
(base) $ mysql --help | grep my.cnf
order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
证明mysql会先读/etc/my.cnf,再读/etc/mysql/my.cnf,再读其他my.cnf
自己查了一下,第一个/etc/my.cnf也是没有的,etc下没有my.cnf
那么看第二个,输入cd /etc/mysql去到相应文件下,输入ll查看当前文件夹下的文件,看到有my.cnf,再输入cat my.cnf,看到最后有两排写着:
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
在这两个文件里看了一下,才知道最终配置文件在/etc/mysql/mysql.conf.d/的mysqld.cnf里(太绕了..)
接着我们打开这个配置文件:cd /etc/mysql/mysql.conf.d去到相应文件夹,然后cat mysqld.cnf查看这个配置文件的内容,我们看到在[mysqld]下面有这样一段写了sock真正的位置:
所以解决方法就是将这个sock文件链接到最初的tmp/mysql.sock去,输入:(文件位置根据你们自己的更改,不是完全一样的)
<code>sudo ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock
再次输入mysql -u root -p就不会报这个错了
问题2:输入mysql -u root -p,报错ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO或者YES)
我也不知道为啥又报一个错..没办法,继续上网搜咋解决,下面给出解决方案.
直截了当重置密码。还是去到刚刚我们找半天的mysqld.cnf中,先cd /etc/mysql/mysql.conf.d去到相应文件夹,然后vim mysqld.cnf对该配置文件进行编辑.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这边我遇到个问题,就是它说该文件只读(readonly),不允许我编辑,解决方法为:
1)还是在该文件目录下,先输入sudo chmod 777 mysqld.cnf,然后再vim mysqld.cnf进行编辑.
2)编辑完了记得再sudo chmod 644 mysqld.cnf,将权限修改回来,不然你刚刚的编辑是不会生效的.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1.没有遇到只读问题的直接编辑就行.vim mysqld.cnf后,按i进入编辑状态,在[mysqld]下面一行添上skip-grant-tables,用来跳过密码验证,如图:
然后按Esc键,再直接输入:wq!(其中冒号感叹号都别少掉)进行保存.
2.接着输入
<code>sudo systemctl restart mysql
重启一下mysql
3.输入mysql -u root -p回车,再回车(即不输入密码),进入mysql
4.flush privileges; 刷新
5.ALTER USER 'root'@'localhost' IDENTIFIED BY '你想改的密码';
~~~~~~~~~~~没遇到问题的直接跳过波浪线这段~~~~~~~~~~~~~~~~~
这边有可能又遇到一个问题,报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements,说密码不满足要求,于是这里要改一下密码要求.
1)SHOW VARIABLES LIKE 'validate_password%';
2)set global validate_password.policy=LOW; 原本是MEDIUM
(这边有的人写的set global validate_password_policy=LOW; 报错ERROR 1193 (HY000): Unknown system variable 'validate_password_policy',这边注意我们的最后policy前面是.不是_,mysql5.0是下划线)
3)set global validate_password.length=4; 密码最短长度设为4
4)ALTER USER 'root'@'localhost' IDENTIFIED BY '你想改的密码';
在这个问题解决完后,我4)这步也报错了ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost',这边是因为我压根没有'root'@'localhost'这个用户,解决方法:
1)
<code>use mysql;
2)
<code>select user, host from user;
可以看到,确实没有root用户
3)
<code>insert into user(User,authentication_string,ssl_cipher,x509_issuer,x509_subject) values('root','','','','');
4)
select user, host from user;
5)
<code>update user set Host='%',select_priv='y', insert_priv='y',update_priv='y',Alter_priv='y',delete_priv='y',create_priv='y',drop_priv='y',reload_priv='y',shutdown_priv='y',Process_priv='y',file_priv='y',grant_priv='y',References_priv='y',index_priv='y',create_user_priv='y',show_db_priv='y',super_priv='y',create_tmp_table_priv='y',Lock_tables_priv='y',execute_priv='y',repl_slave_priv='y',repl_client_priv='y',create_view_priv='y',show_view_priv='y',create_routine_priv='y',alter_routine_priv='y',create_user_priv='y' where user='root';commit;code>
6)
select user, host from user;
7)
<code>ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你要改的密码';
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6.刷新一下,然后再进行操作就可以成功进入了!!
flush privileges;
mysql -u root -p
上一篇: 【网络编程通关之路】 Udp 基础回显服务器(Java实现)及你不知道知识原理详解 ! ! !
下一篇: Redis(一) redis配置 | 如何连接redis服务器 | 基本数据类型 | 基本全局命令 | 数据结构和内部编码方式
本文标签
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。