Ubuntu22安装MySQL8
安装
首先更新一下源
sudo apt updatesudo 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 autoremovesudo 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