Skip to content
Notes
GitHub

CentOS 安装 MySQL

1. 下载安装包

1.1. 链接

https://dev.mysql.com/downloads/mysql/

1.2. 版本选择

  • OS : Red Hat Enterprise Linux 7 / Oracle Linux
  • Version : Red Hat Enterprise Linux 7 / Oracle Linux (x86, 64-bit)
  • RPM Bundle - Download
  • No thanks, just start my download.

1.3. 上传 tar 文件至虚拟机

移动到 /usr/local/mysql/ 目录下。此步骤需要在 /usr/local/ 下新建 mysql 文件夹。

Terminal window
sudo mv mysql-8.0.27-1.el7.x86_64.rpm-bundle.tar /usr/local/mysql/
Terminal window
sudo mv mysql-8.0.27-1.el7.x86_64.rpm-bundle.tar /usr/local/mysql/

2. 删除mariadb

2.1. 通过命令查看 mariadb 的安装包

Terminal window
rpm -qa | grep mariadb
Terminal window
rpm -qa | grep mariadb

2.2. 通过命令卸载 mariadb

Terminal window
rpm -e mariadb-libs-5.5.68-1.el7.x86_64 --nodeps
Terminal window
rpm -e mariadb-libs-5.5.68-1.el7.x86_64 --nodeps

通过命令查看 mariadb 是否卸载

Terminal window
rpm -qa | grep mariadb
Terminal window
rpm -qa | grep mariadb

3. 安装 MySQL

Terminal window
pwd
/usr/local/mysql
Terminal window
pwd
/usr/local/mysql

3.1. 解压

Terminal window
sudo tar -xvf mysql-8.0.27-1.el7.x86_64.rpm-bundle.tar
Terminal window
sudo tar -xvf mysql-8.0.27-1.el7.x86_64.rpm-bundle.tar

3.2. 安装 common

Terminal window
sudo rpm -ivh mysql-community-common-8.0.27-1.el7.x86_64.rpm --nodeps --force
Terminal window
sudo rpm -ivh mysql-community-common-8.0.27-1.el7.x86_64.rpm --nodeps --force

3.3. 安装 libs

Terminal window
sudo rpm -ivh mysql-community-libs-8.0.27-1.el7.x86_64.rpm --nodeps --force
Terminal window
sudo rpm -ivh mysql-community-libs-8.0.27-1.el7.x86_64.rpm --nodeps --force

3.4. 安装 client

Terminal window
sudo rpm -ivh mysql-community-client-8.0.27-1.el7.x86_64.rpm --nodeps --force
Terminal window
sudo rpm -ivh mysql-community-client-8.0.27-1.el7.x86_64.rpm --nodeps --force

3.5. 安装 server

该步骤花费时间较长

Terminal window
sudo rpm -ivh mysql-community-server-8.0.27-1.el7.x86_64.rpm --nodeps --force
Terminal window
sudo rpm -ivh mysql-community-server-8.0.27-1.el7.x86_64.rpm --nodeps --force

3.6. 通过命令查看安装包

Terminal window
rpm -qa | grep mysql
Terminal window
rpm -qa | grep mysql

4. 初始化与相关配置

4.1. 初始化

Terminal window
sudo mysqld --initialize;
Terminal window
sudo mysqld --initialize;

如果遇到报错 mysqld: error while loading shared libraries: libnuma.so.1,执行下面的命令

Terminal window
yum -y install numactl
Terminal window
yum -y install numactl
Terminal window
sudo chown mysql:mysql /var/lib/mysql -R;
sudo systemctl start mysqld.service;
sudo systemctl enable mysqld;
Terminal window
sudo chown mysql:mysql /var/lib/mysql -R;
sudo systemctl start mysqld.service;
sudo systemctl enable mysqld;

4.2. 查看密码

Terminal window
sudo cat /var/log/mysqld.log | grep password
Terminal window
sudo cat /var/log/mysqld.log | grep password
Terminal window
2021-11-21T14:21:26.120237Z 6 [Note] [MY-010454] [Server]
A temporary password is generated for root@localhost: 3l-/wkz#>iHl
Terminal window
2021-11-21T14:21:26.120237Z 6 [Note] [MY-010454] [Server]
A temporary password is generated for root@localhost: 3l-/wkz#>iHl

5. 使用数据库

5.1. 登录

Terminal window
mysql -uroot -p
Terminal window
mysql -uroot -p

密码即为刚刚生成的字符串。

5.2. 退出

exit;
exit;

6. Access denied

6.1. 编辑 /etc/my.cnf

在文件尾部添加以下内容

skip-grant-tables
skip-grant-tables

6.2. 重启 mysql 服务

Terminal window
sudo service mysqld restart
Terminal window
sudo service mysqld restart

6.3. 再次登录 mysql

Terminal window
mysql -uroot -p
Terminal window
mysql -uroot -p

此时登录密码为空。

6.4. 修改密码

6.4.1. 清空 authentication_string

use mysql;
UPDATE user SET authentication_string = '' WHERE User = 'root';
use mysql;
UPDATE user SET authentication_string = '' WHERE User = 'root';

6.4.2. 关闭 skip-grant-tables

  • 退出数据库
  • 删除 /etc/my.cnfskip-grant-tables
  • 重启 mysql 服务

6.4.3. 真·修改密码

无密码登录 mysql,并通过下面的脚本命令修改密码。

ALTER user 'root'@'localhost' IDENTIFIED BY 'a123456'; -- BY 后面为密码
ALTER user 'root'@'localhost' IDENTIFIED BY 'a123456'; -- BY 后面为密码

6.4.4. 重新登录数据库

可以使用刚刚的密码登录

7. 开启外部访问

7.1. 登录 MySQL

7.2. 进入 mysql 库

use mysql;
use mysql;

7.3. 更新域属性,'%' 表示允许外部访问:

update user set host='%' where user ='root';
update user set host='%' where user ='root';

7.4. flush

Terminal window
FLUSH PRIVILEGES;
Terminal window
FLUSH PRIVILEGES;

7.5. 再执行授权语句

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

7.6. 测试

TODO