这里记录centos8安装mysql8的过程
目录
下载mysql8的linux版本,我这里选64位
使用FTP工具将下载的压缩包上传到服务器centos指定目录(这里是放到 /home/mysql)
将压缩包解压到/usr/local/mysql8
首先我们先创建一个服务器账号和组,用于管理mysql的
为Mysql安装配置环境
关闭防火墙,防火墙状态为inactive时表示关闭成功
创建mysql数据目录并设置权限
配置my.cnf文件,在/etc目录下创建my.cnf文件并配置
初始化MySQL
启动MySQL服务
允许远程连接
更改远程访问数据库权限(%表示所有ip)
其他补充
下载mysql8的linux版本,我这里选64位
使用FTP工具将下载的压缩包上传到服务器centos指定目录(这里是放到 /home/mysql)
将压缩包解压到/usr/local/mysql8
命令:tar -xvf mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz -C /usr/local/mysql8
至此,mysql的基础目录为 /usr/local/mysql8/mysql8
给解压目录添加一个快捷链接
ln -s mysql-8.0.20-linux-glibc2.12-x86_64 mysql8
第一个就是指向第二个的链接,虽然跟父目录同名,但是问题不大。
首先我们先创建一个服务器账号和组,用于管理mysql的
创建MySQL组
groupadd mysqlg
创建用户mysql1,并指定所属组和目录
useradd -r -d /home/mysql -g mysqlg mysql1
修改mysql密码(xiaoming135)
passwd mysql1
提示:然后我们再把mysql相关目录和文件授权给我们创建的组mysqlg,这样只有root用户和所属的组用户才能访问和操作mysql的东西,当后续服务器需要提供给外部访问权限时,这种组和用户对目录权限的控制就显得很有必要了。
为Mysql安装配置环境
使用root用户编辑/etc/profile,将下面的内容添加到最下面,并执行source /etc/profile使配置生效
export PATH=$PATH:/usr/local/mysql/bin
然后执行一下:source /etc/profile
关闭防火墙,防火墙状态为inactive时表示关闭成功
service firewalld stop
创建mysql数据目录并设置权限
mkdir /usr/local/mysql8/mysql8/data
chmod 750 /usr/local/mysql8/mysql8/data
更改数据目录权限750含义参考
配置my.cnf文件,在/etc目录下创建my.cnf文件并配置
======================内容如下===============
[mysqld]
port=3306
basedir=/usr/local/mysql8/mysql8
datadir=/usr/local/mysql8/mysql8/data
log-error=/usr/local/mysql8/mysql8/data/error.log
socket=/tmp/mysql.sock
pid-file=/usr/local/mysql8/mysql8/data/mysql.pid
character-set-server = utf8
lower_case_table_names=1
innodb_log_file_size=1G
default-storage-engine=INNODB
default_authentication_plugin=mysql_native_password
[client]
port=3306
default-character-set=utf8
初始化MySQL
在mysql目录中,执行以下命令,然后稍等一会
bin/mysqld --initialize --user mysql
查看data/error.log日志初始化内容,最后一个则是初始化的密码 #M&Ft,Q=U1UW
启动MySQL服务
执行support-files/mysql.server start启动mysql,启动成功后可查看到mysql的进程
使用root用户登录mysql
mysql -u root -p
回车,然后输入初始化密码(上面日志中获取的那个)
修改mysql中root账号的密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root新密码';
允许远程连接
先登录
mysql -u root -p
use mysql;
update user set host = '%' where user = 'root';
flush privileges;
更改远程访问数据库权限(%表示所有ip)
例:所有的地址都可以使用root用户,密码为lxh远程访问所有的数据库
Mysql命令
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'lxh' WITH GRANT OPTION;
flush privileges;
例:IP为172.12.52.225的电脑可以使用lxh用户,密码为lxh远程访问数据库testdb的所有表
GRANT ALL PRIVILEGES ON testdb.* TO 'lxh'@'172.12.52.225' IDENTIFIED BY 'lxh' WITH GRANT OPTION;
至此,已经可以使用客户端连接服务器的MySQL了。下图是使用Navicat工具测试连接
PS:如果提示连接失败,可能是服务器防火墙拦截;可能是云服务器安全策略组未添加3306端口(如果是用的是阿里云服务器,那一定要设置)下图是我阿里服务器添加的安全策略组端口,已包含大多数常用端口。
【打开控制台,找到服务器实例,点进去》左边“本实例安全组”查看内网入方向的列表是否有该端口】
其他补充
- 用户授权模板语法
grant all privileges on 库名.表名 to '用户名'@'IP地址' identified by '密码' with grant option;
flush privileges;
说明:
库名:要远程访问的数据库名称,所有的数据库使用“*”
表名:要远程访问的数据库下的表的名称,所有的表使用“*”
用户名:要赋给远程访问权限的用户名称
IP地址:可以远程访问的电脑的IP地址,所有的地址使用“%”
密码:要赋给远程访问权限的用户对应使用的密码
- 创建一个mysql用户并授权
create user 'test'@'%' identified by 'test';
grant all on *.* to 'test'@'%';
flush privileges;
(注意这里的mysql用户跟linux中的不一样,两者分别用于登录数据库和服务器,权限也自然不能混为一谈)
- 修改root密码为永不过期
ALTER USER 'root'@'%' IDENTIFIED BY '密码' PASSWORD EXPIRE NEVER;
- root用户给其他用户授权失败
【报错Access denied; you need (at least one of) the SYSTEM_USER privilege(s) for this operation】
mySQL8版本中新增了一个system_user帐户类型,当我通过phpAdmin新增用户并赋予权限时
官方文档解释,原因是由于root用户没有SYSTEM_USER权限,把权限加入后即可解决:
grant system_user on *.* to 'root';
- 撤销授权
REVOKE all on *.* FROM 'testuser'@'%';
- 配置mysql开机自启动
首先将mysql.server 复制到/etc/init.d下面
cp support-files/mysql.server /etc/init.d/mysqld
通过chkconfig将mysql服务添加到开机启动的列表里面就可以了
chkconfig --add mysqld