Ubuntu22安装MySQL8

安装

首先更新一下源

sudo apt update
sudo apt upgrade

比较慢或者常报网络错误可以使用国内镜像,使用方法和镜像地址见:https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/

安装很简单,一条命令即可

sudo apt install mysql-server

启动MySQL

sudo service mysql start

至此,有些教程会说 执行 sudo mysql_secure_installation 命令,但其实在测试环境中,这个命令不是必要的,并且它默认使用 auth_socket 这个密码插件,这个插件可以让你不需要密码登录MySQL,所以会让你觉得困惑,我怎么都不用设置root密码?所以我建议先跳过这一步,待下面的步骤都走完了,再执行这个进行安全设置也不迟

注:auth_socket是一个密码校验的插件,它可以让你使用本机用户登录MySQL,另外还有 mysql_native_password 以及MySQL8中默认的 caching_sha2_password,这俩就需要设定密码。参见:https://kohasupport.com/what-is-the-difference-between-mysql-plugins-mysql_native_password-caching_sha2_password-and-auth_socket-plugins/

修改配置使得其可以远程访问

这点很重要,默认只能本机访问,我一开始觉得很纳闷,明明我创建了可以远程访问的账户,但依旧是无法访问,后来发现这里没改

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

将原本的

修改为

其中 0.0.0.0 表示任何主机都可以访问,也可以将其改为指定的主机

初始安装MySQL后,root不需要密码,可以直接使用下面的命令进入MySQL-CLI

sudo mysql

修改root密码

alter user 'root'@'localhost' IDENTIFIED WITH mysql_native_password by 'yourpassword';

修改完成后,退出MySQL-CLI,再进入的话就需要root密码了,使用以下命令进入

mysql -u root -pyourpassword

注意,仅在做实验测试的话可以直接将密码写出来,-p后面直接跟密码,不需要空格

创建用户

此时还不能远程访问,因为目前的root用户为 ‘root’@’localhost’,即仅为本机可以访问,最佳实践是创建一个新的管理员账户

create user 'hunt'@'%' identified with mysql_native_password by 'yourpassword';

主机部分使用 % 即表示该用户可以从任何主机访问

其中 with mysql_native_password 表示使用 mysql_native_password 这个授权插件进行密码校验,可以不要该部分,在MySQL8.0环境下,默认使用的是 caching_sha2_password 这个密码插件,它更安全但是较慢。

对新创建的账户进行授权

grant all on *.* to 'hunt'@'%' with grant option;

其格式为 grant 权限 on 数据库.表 to 用户,例如 grant select, insert, alter, index on testdb.testtable to someuser@'host',中间给的那些就是对后面数据库和表的控制权限,可以是增删改查、索引、外键、存储过程、视图等各种权限

如果需要所有权限,可以直接写 all 或者 all privileges,两者等价

with grant option 意思是说,该用户也可以将他的权限授权给其他用户

若要撤销权限,将 grant ... to ... 替换为 revoke ... from ... 即可

刷新权限,这一步可有可无,因为MySQL会自动对grant命令做出实时调整,但是如果你是直接在用户表中修改权限字段,则需要使用该命令

flush privileges;

此时如果还不能远程访问,重启一下mysql服务应该就行

sudo service mysql restart

注:service可以视为是对systemctl的进一步封装,使用两者的效果相同

卸载

首先关闭 mysql 服务端

sudo systemctl stop mysql

删除与MySQL相关的软件包

sudo apt purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-*

删除与MySQL相关的文件

sudo rm -rf /etc/mysql /var/lib/mysql /var/log/mysql

清理无用的软件包

sudo apt autoremove
sudo apt autoclean

删除MySQL的一些配置

sudo apt remove dbconfig-mysql

执行上述命令后,MySQL应该就已经被移除了

用户表

如果是修改用户密码,可以使用

alter user 'username'@'%' identified with mysql_native_password BY 'newpassword';

通过 with caching_sha2_password 或者 with mysql_native_password 指定密码插件

安装MySQL时有很多对用户的操作,事实上,MySQL中的用户也是使用 mysql.user 这张表进行管理的

select * from user where user="hunt" \G

这条命令可以查看到刚才创建的那个用户,其中,*_priv 就是表示各种权限

直接修改该表的内容即可实现对用户的各种信息的修改,例如,默认的root用户只能本机访问,即其 host 字段为 ”localhost“,直接将其修改为 ”%“ 即可任意主机访问

update user set host="%" where user="root";

然后执行

# 再次强调,如果是直接通过修改表的方式修改用户属性,则需要执行该命令或重启MySQL服务
flush privileges;

即可实时生效,若使用的是mysql_native_password这个密码插件(表中的 plugin 字段),如果要修改用户密码,可以执行这个命令

update user set authentication_string=CONCAT('*', UPPER(SHA1(UNHEX(SHA1('newpassword'))))) where user='hunt';

早期的MySQL可以直接使用 password() 函数生成密码的hash,好像MySQL8以上就不行了,用 CONCAT('*', UPPER(SHA1(UNHEX(SHA1('newpassword'))))) 代替 password() 函数即可

附 redis

安装

按照这个来即可

https://redis.io/docs/install/install-redis/install-redis-on-linux/

不过安装完成后,默认是不能远程访问的,需要修改一下配置文件 /etc/redis/redis.conf

默认为保护模式,外部访问必须设定一个访问密码

然后重启redis-server即可 sudo service redis-server restart

Leave a Comment