二进制部署 MySQL
下载
这里的 glibc 版本视情况选择合适的版本。工作站系统更新过,可以直接部署 glibc 2.28 版本。云服务器系统过于老旧,请使用 glibc 2.17 版本。
下载对应的压缩包。如无特殊需求,直接选体积最大的那个拉满即可。
解压
解压压缩包到 /usr/local
下
1 | sudo tar -xJvf mysql-8.4.5-linux-glibc2.28-x86_64.tar.xz -C /usr/local |
为了便于后续操作,先配置环境变量
1 | export "/usr/local/mysql/bin" >> ~/.bashrc |
初始化
创建系统用户和数据目录,为启动 MySQL 做准备
1 | # 新建 mysql 用户(无登录 shell) |
工作站的 MySQL,数据目录是一个 512G 的逻辑卷,挂载在
/mnt/mysql
下。
初始化数据目录(只需要执行一次)。这里只是初始化,还没有启动 MySQL。
1 | sudo /usr/local/mysql/bin/mysqld \ |
这样 root 初始无密码,后续可用 ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘YourStrong!Pass’; 设置密码。
编写 MySQL 配置文件:在 /mnt/mysql
下新建一个 my.cnf
,插入以下内容并保存。
1 | [client] |
配置 MySQL 服务
在 /etc/systemd/system
下新建一个 systemd 单元文件 mysqld.service
1 | sudo vim /etc/systemd/system/mysqld.service |
插入以下内容:
1 | # /etc/systemd/system/mysqld.service |
保存后执行:
1 | sudo systemctl daemon-reload |
启动 MySQL
1 | # 启动 |
启动 MySQL 后,测试是否能够正常连接
1 | mysql -uroot -p |
由于上面通过 --initialize-insecure
参数初始化 MySQL,因此 root 用户默认密码为空,直接回车登录即可。
确认登录成功后,重新设置 root 密码(强密码):
1 | ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrong!Pass'; |
权限配置
按照上述操作启动 MySQL 后,在终端可以通过 root 进行登录,但是通过远程连接是无法登录的。因为 MySQL 的用户是用户名 + 主机两元组控制的:
用户 | 允许登录来源 |
---|---|
root@localhost | 仅限本机(localhost/127.0.0.1) |
root@IP | 允许从 IP 访问 |
root@% | 允许从任意主机访问 |
如果是自己本机部署 MySQL 开发,root 用户裸奔无所谓。但是服务器部署就需要考虑权限问题,十几个人通过一个 root 账户进行开发是很傻逼的行为。
对于每个用户,按照最小权限原则,只需要授予其需要使用的数据库权限即可。一般一人一个即可,如果有协作开发场景,那就授予多人这个库的权限。
首先,创建数据库。
1 | CREATE DATABASE dev_yzh; |
然后,创建需要使用这个库的用户(这个一次就够了,后续都是这几个用户)。
1 | CREATE USER 'yzh'@'172.26.%' IDENTIFIED BY '用户yzh的密码'; |
这里使用
%
通配符对 IP 进行了限制,即分配 IP 的 172.26 网段。
授予用户 yzh
数据库 dev_yzh
的所有权限。
1 | GRANT ALL PRIVILEGES ON dev_yzh.* TO 'yzh'@'172.26.%'; |
也可以对权限进行限制,只授予表结构变更和数据操作的权限,保留全局管理操作的权限:
1 | GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER |
还可以通过 MySQL 8.0+ 的角色模板进行管理。