要在 CentOS 7 上安装 MySQL 8.0.40,按照以下步骤操作:
下载安装包。
https://dev.mysql.com/downloads/mysql/
下载之前查看系统c++版本
解压安装包
首先,解压下载的 .tar.xz
安装包。
bash
cd /path/to/your/downloads
tar -xvf mysql-8.0.40-linux-glibc2.28-x86_64.tar.xz
解压后,会得到一个 mysql-8.0.40-linux-glibc2.28-x86_64
目录。
移动到合适的位置
接下来,你可以将解压后的目录移动到你希望安装 MySQL 的位置,通常是 /usr/local
。
bash
sudo mv mysql-8.0.40-linux-glibc2.28-x86_64 /usr/local/mysql
创建 MySQL 用户和组
为了安全性,MySQL 应该运行在专用的用户和组下。
bash
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
创建 MySQL 数据目录
接下来,创建数据存储目录,并给 MySQL 用户设置适当的权限。
bash
sudo mkdir /usr/local/mysql/data
sudo chown -R mysql:mysql /usr/local/mysql
配置环境变量
为了方便使用 MySQL 命令,你需要将 MySQL 的 bin
目录添加到 PATH
环境变量中。编辑 /etc/profile
文件。
bash
sudo vi /etc/profile
在文件末尾添加以下内容:
bash
export PATH=$PATH:/usr/local/mysql/bin
保存并退出编辑器。然后执行以下命令使改动生效:
bash
source /etc/profile
创建配置文件
bash
touch /etc/my.cnf
bash
[mysqld]
port=3306
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/data/mysql.sock
max_connect_errors=10
character-set-server=utf8mb4
default-storage-engine=INNODB
user=root
#skip-grant-tables
[client]
port=3306
socket=/usr/local/mysql/data/mysql.sock
default-character-set=utf8mb4
备注:不要有空格,否则会找不到socket连接
初始化 MySQL 数据目录
使用 MySQL 自带的 mysqld
工具初始化数据目录:
bash
sudo /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize --console --user=root
初始化成功后,会有一个临时密码
bash
[root@localhost mysql]# ./bin/mysqld --defaults-file=/etc/my.cnf --initialize --console --user=root
2024-12-03T10:56:54.844764Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.40) initializing of server in progress as process 11446
2024-12-03T10:56:54.852440Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2024-12-03T10:56:55.144832Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2024-12-03T10:56:56.594319Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: FhN9Yk=/Cdus
删除 mysql/data目录即可重新初始化
创建 mysql.sock文件(重要,非常重要的一步)
bash
cd data/
touch mysql.sock
启动mysql 服务
bash
sudo /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &
查看mysql是否启动
bash
执行命令 ps -ef | grep mysql
登录 mysql 数据库
bash
sudo /usr/local/mysql/bin/mysql --socket=/usr/local/mysql/data/mysql.sock -u root -p
完成!
到此为止,你已经成功安装 MySQL 8.0.40。
常用命令(扩展)
bash
# 初始化
sudo /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize --console --user=root
#启动服务
sudo /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &
#停止服务
sudo /usr/local/mysql/bin/mysqladmin -u root -p shutdown
#停止服务(二)
ps aux|grep mysql
kill <mysql有关的pid>
# 登录mysql
sudo /usr/local/mysql/bin/mysql --socket=/usr/local/mysql/data/mysql.sock -u root -p
创建账号并授权
bash
# 进入mysql
use mysql
# 用如下语句查看MySQL当前加密方式
select host,user,plugin from user;
# 创建账号test01、密码test01, 设置密码插件模式mysql_native_password,并允许该用户从任何主机(即 %)进行连接
CREATE USER 'test01'@'%' IDENTIFIED WITH mysql_native_password BY 'test01';
# 如果你只希望该用户能从本地(localhost)连接,可以将 '%' 改为 'localhost':
CREATE USER 'test01'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test01';
# 授予权限。为 用户授予合适的权限。如果你希望该用户具有所有权限,可以使用以下命令:
GRANT ALL PRIVILEGES ON *.* TO 'test01'@'%' WITH GRANT OPTION;
忘记密码,找回
- kill mysql服务
- 进入/etc/my.cnf
- 添加 在 [mysqld] 下面,添加一行 skip-grant-tables
- 重启mysql:sudo /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &
- 无密码,进入mysql。将登陆密码设置为空。将密码设置为空(此时还不能直接修改密码,必须先设置为空,否则会报错。 skip-grant-tables 模式下无法修改其他密码,只能修改为空 )
bash
use mysql; (使用mysql数据表)
update user set authentication_string='' where user='root';(将密码置为空)
quit; (然后退出Mysql)
- kill mysql服务。 将/etc/my.cnf 添加的一行skip-grant-tables去掉, 再次启动。
- 再次无密码登录
- 更新密码,要使用mysql_native_password 插件模式,否则navicat可能链接不上
bash
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '1234';
FLUSH PRIVILEGES;
修改加密模式
bash
update user set plugin='mysql_native_password' where user='root';
进入mysql,use mysql,直接update加密模式,退出来,原密码就无法登录了
在Mysql 8版本中,必须分两步来实现设置用户权限
在Mysql 8版本中,不能使用
bash
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password'WITH GRANT OPTION;
这一行命令来设置用户权限,必须分两步来实现设置用户权限【先创建用户、在对该用户分配用户权限】,最后刷新权限
bash
CREATE USER 'test2'@'%' IDENTIFIED WITH mysql_native_password BY 'test2';
GRANT ALL PRIVILEGES ON *.* TO 'test2'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
或者
bash
CREATE USER 'test3'@'%' IDENTIFIED BY 'test3';
GRANT ALL PRIVILEGES ON *.* TO 'test3'@'%' WITH GRANT OPTION;
update user set plugin='mysql_native_password' where user='test3';
FLUSH PRIVILEGES;
然后外部就可以通过账户密码访问了。