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



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。