【Linux】MySQL安装配置
检查是否已安装 rpm -qa|grep -i mysql
若安装了,需要卸载
rpm -e mysql-libs-5.1.61-4.el6.x86_64 --nodeps
- 官网下载 MySQL 包
首先,查看服务器glibc版本,来选择 MySQL 的安装版本 rpm -qa|grep glibc 官方下载地址:
downloads.mysql.com/archives/co…
- 上传解压至home目录
tar -xJvf mysql-8.4.2-linux-glibc2.17-x86_64.tar.xz
- 移动文件
将压缩包移动到usr/local目录下,并重命名为mysql8.4.2
mv /home/mysql-8.4.2-linux-glibc2.17-x86_64 /usr/local/mysql8.4.2
- 创建用户组 groupadd mysql #创建用户组
-r 参数表示 mysql 用户是系统用户,不可用于登录系统,创建用户 mysql 并将其添加到用户组 mysql 中
useradd -r -g mysql mysql
chown -R mysql /usr/local/mysql8.4.2/ # 将文件的所有属性改为 mysql 用户 chgrp -R mysql /usr/local/mysql8.4.2/ # 将组属性改为 mysql 组
注:为什么要创建用户?
MySQL 开在 root 上意味着它可以在系统的任何位置写任何文件,MySQL 开在 mysql 用户上,保证它对系统大部分位置不可写,从而 MySQL 即使被攻击,也可以限制它对整个系统的影响。
当让MySQL运行的时候使用一个独立的账号和用户组时,该用户和用户组权限是可以控制的。当系统中文件的权限未设定给Mysql用户以及用户组时,Mysql用户无法进行读写执行操作。而如果MySQL被黑了,可以通那么开始拿到的权限就是那个创建的账号而不是默认的root,我们在编译安装的时候创建一个mysql组和一个mysql用户,并把datadir和安装目录属主改为mysql。 在MySQL启动的时候,单进程mysqld,该进程的属主就是mysql,这样就保证了mysql服务的独立性,即使mysql服务被黑掉,得到了mysql用户权限,也不会影响整个系统的安全。
- 创建数据目录并赋予权限
mkdir -p /data/mysql #数据目录
给data文件夹增加权限
chown -R mysql:mysql /data/mysql chmod -R 755 /data/mysql
- 修改配置文件 vim /etc/my.cnf
[mysqld] bind-address=0.0.0.0 port=3306 user=mysql basedir=/usr/local/mysql8.4.2 datadir=/data/mysql socket=/tmp/mysql.sock log-error=/data/mysql/mysql.err pid-file=/data/mysql/mysql.pid #character config character_set_server=utf8mb4 symbolic-links=0 explicit_defaults_for_timestamp=true lower_case_table_names=1
[client] default-character-set=utf8mb4 socket=/tmp/mysql.sock
[mysql] default-character-set=utf8mb4 socket=/tmp/mysql.sock
- 初始化数据库
参数: --basedir 为mysql解压目录,–datadir 为mysql数据存放目录。(注意安装路径是否一致)
./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql8.4.2/ --datadir=/data/mysql --user=mysql --initialize
查看初始密码
cat /data/mysql/mysql.err
- 创建MySQL服务
首先需要将scripts/mysql.server服务脚本复制到/etc/init.d/,并重命名为mysqld。
cp /usr/local/mysql8.4.2/support-files/mysql.server /etc/init.d/mysqld
通过chkconfig命令将mysqld服务加入到自启动服务项中。
chkconfig --add mysqld
注意服务名称mysqld就是我们将mysql.server复制到/etc/init.d/时重命名的名称。
查看是否添加成功
chkconfig --list mysqld
启动服务
service mysql start
查看启动状态
service mysql status
- 配置全局环境变量
编辑/etc/profile文件,使用vim /etc/profile命令,在profile文件中添加如下两行配置,使用:wq命令保存后退出
export PATH=$PATH:/usr/local/mysql8.4.2/bin:/usr/local/mysql8.4.2/lib
设置环境变量立即生效使用source /etc/profile命令。 source /etc/profile
- 登录MySQL修改密码
使用默认密码登录
mysql -uroot -p
修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'xxx';
授权远程用户连接
改表法
选择数据库
use mysql;
最后授权 MySQL,允许远程用户登录访问 MySQL
update user set host = '%' where user = 'root';
刷新权限
flush privileges;
若防火墙打开,需要开放该端口
查看防火墙状态
systemctl status firewalld
永久开放端口
firewall-cmd --list-ports --permanent
开放指定端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
重载防火墙
firewall-cmd --reload
命令含义: --zone #作用域 --add-port=3306/tcp #添加端口,格式为:端口/通讯协议 --permanent #永久生效,没有此参数重启后失效
或者 -> 允许 MySQL 端口的流量
sudo ufw allow 3306
查看防火墙状态
systemctl status firewalld
永久开放端口
firewall-cmd --list-ports --permanent
开放指定端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
重载防火墙
firewall-cmd --reload
命令含义:
--zone #作用域
--add-port=3306/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效
或者 -> 允许 MySQL 端口的流量
sudo ufw allow 3306
新建用户 CREATE USER 'test_user'@'%' IDENTIFIED BY '123456'; GRANT ALL PRIVILEGES ON . TO 'test_user'@'%'; FLUSH PRIVILEGES;
创建只读用户
CREATE USER 'readonly'@'%' IDENTIFIED BY '123456'; GRANT SELECT ON . TO 'readonly'@'%'; FLUSH PRIVILEGES;
-- 仅授权部分数据库 GRANT SELECT, SHOW VIEW ON your_database.* TO 'tys_user'@'%'; GRANT ALL PRIVILEGES ON data_gateway.* TO 'tys_user'@'%'; FLUSH PRIVILEGES;
-- 取消授权 REVOKE ALL PRIVILEGES ON . FROM 'tys_user'@'%';